Вопрос

Я пытаюсь вызвать функцию из формы в том же файле .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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top