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超全球中获取
<*>
并在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>