我正在尝试从同一个.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超全球中获取

<*>

并在select函数中添加一个参数以获取年份,然后执行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

POST['year_txt'];

并在select函数中添加一个参数以获取年份,然后执行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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top