Вызов функции 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 = ' Я пытаюсь вызвать функцию из формы в том же файле .php, но когда нажимается кнопка «Отправить», таблица не генерируется.
Вот код:
<*>
Есть идеи, почему это не работает?
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>
Есть идеи, почему это не работает?
Решение
Если вы ожидаете целое число как год, получите его из суперглобального значения POST как
$year=(int) Если вы ожидаете целое число как год, получите его из суперглобального значения POST как
<*>
И добавьте параметр в свою функцию выбора, чтобы взять год, а затем выполните так, как предложил SanHolo.
Кстати, обратите внимание, я приводил переменную к целому числу (часть (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 р>POST['year_txt'];
И добавьте параметр в свою функцию выбора, чтобы взять год, а затем выполните так, как предложил SanHolo.
Кстати, обратите внимание, я приводил переменную к целому числу (часть (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>