양식에서 작동하지 않는 PHP 기능 호출
-
06-07-2019 - |
문제
동일한 .php 파일 내 양식에서 함수를 호출하려고하지만 제출 버튼이 닿으면 테이블이 생성되지 않습니다.
코드는 다음과 같습니다.
<p>
<?php
function selectQuery()
{
$con = mysql_connect("localhost","readonly","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("mediadb", $con);
$result = mysql_query("SELECT title, director FROM movies WHERE year = '$_POST[year_txt]'");
echo "<table border='1' background='lightgray'>
<tr>
<th>Title</th>
<th>Director</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['title'] . "</td>";
echo "<td>" . $row['director'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
}
?>
</p>
<p>
<!-- start of entry form -->
<form action="index.php?action=selectQuery" method="post">
Year: <input type="text" name="year_txt" />
<input type="submit"/>
</form>
<!-- end of entry form -->
</p>
이것이 왜 작동하지 않는지 아십니까?
해결책
1 년 동안 정수를 기대하고 있다면 Post Superglobal에서
$year=(int)$_POST['year_txt'];
그리고 선택 함수에 매개 변수를 추가하여 연도를 수행 한 다음 Sanholo가 제안한 방식을 실행하십시오.
btw, 참고 나는 내가 제공 한 예제에서 변수를 정수 (int) 부분으로 캐스팅합니다. 코드가있는 코드는 거대한 보안 구멍입니다. 데이터 양식화, SQL 주입 및 매개 변수화 된 준비 문을 찾아야합니다 (PDO를 확인).
$ _post [ 'year_txt']를 넣은 곳에서 누군가는 SQL 문에 똑바로 넣을 수 있습니다 ... "90; 영화에서 삭제 1;". 생성 할 SQL 문을 확인하십시오!
하지 마라 항상 사용자가 제공 한 입력을 인쇄하고 먼저 정신을 확인하고 소독하지 않고 SQL 명령에 넣지 마십시오. 숫자라면 int로 캐스트하십시오. 문자열을받는 경우 preg_replace를 사용하여 홀수 문자를 필터링하십시오. 특정 PHP Filter_var 함수를 사용할 수도 있습니다. http://php.net/manual/en/function.filter-var.php
다른 팁
나는 당신이 실제로 기능을 부르는 곳을 보지 못하며, 당신은 그것을 정의합니다. 다음과 같은 내용을 읽는 블록을 구현해야합니다.
if (isset($_GET['action'])) { if ('selectQuery' == $_GET['action']) { selectQuery(); } }
좋아, 여기에 다시 쓰여진 버전이있다. 물론 여전히 이상적이지는 않지만 도움이 될 것입니다.
<html>
<head><title>Movies, yo</title></head>
<body>
<?php
$year=(int)$_POST['year_txt'];
function selectQuery($year)
{
$con = mysql_connect("localhost","readonly","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("mediadb", $con);
$result = mysql_query("SELECT title, director FROM movies WHERE year = $year");
$movie_results=array();
while($row = mysql_fetch_array($result))
{
$movie_results[]=$row;
}
mysql_close($con);
return $movie_results;
}
function print_movies($movie_array)
{ ?>
<table border='1' background='lightgray'>
<tr>
<th>Title</th>
<th>Director</th>
</tr>
<?php
foreach($movie_array as $a_movie)
{ ?>
<tr>
<td><?php echo $a_movie['title'];?></td>
<td><?php echo $a_movie['director'];?></td>
</tr>
<?php
}//end foreach movie_array?>
</table>
<?php
}?>
<p>
<!-- start of entry form -->
<form action="index.php" method="post">
Year: <input type="text" name="year_txt" value='<?php echo $year;?>'/>
<input type='hidden' value='selectQuery' name='action'/>
<input type="submit"/>
</form>
<!-- end of entry form -->
</p>
<?php
if ('selectQuery'==$_POST['action'])
{
if ($year>0)
$movie_results=selectQuery($year);
if(!empty($movie_results))
{
print_movies($movie_results);
}
else
{
echo "No movie was found for $year<br>";
}
}//end if 'year is valid'
else
{
echo "Please enter a valid year<br>";
}
}//end if 'action was selectQuery'
?>
</body>
</html>