PHP $_POST[键] return 值

PHP $_POST[key] return value

我看到了一份 PHP 试卷,其中提供了与产品购物车功能相关的代码示例。当我浏览代码示例时,我遇到了某些 PHP if 条件,用于检查分配了 $_POST[key] 值的变量是否为假。以下是与我面临的问题相关的代码示例。

nicepage.php

$id=$_GET['previd'];
$SQL = "select * from pro where prId=".$id;
$runSQL = mysql_query($SQL) or die(mysql_error());
$details = mysql_fetch_array($runSQL);
echo "<p>Catalogue Item Number: ".$details['prId'];
echo "<p>". strtoupper($details['prName']);
echo "<p>".$details['prDescrip'];
echo "<p><img src=images/".$details['prPicName'].">";
echo "<p>£".$details['prPrice'];
echo "<p>".$details['prQuantity']." items for you to get!" ;
echo "<form method=post action=greatpage.php>" ;
echo "<p>Enter how many: ";
echo "<input type=text name=newqu size=5 maxlength=3>";
echo "<input type=submit value='Get them'>";
echo "<input type=hidden name=newid value=".$id.">";
echo "</form>" ;
echo "</center>";
echo "</body>";
echo "</html>";

greatpage.php

$theid=$_POST['newid'];
$thequ=$_POST['newqu'];
if (!$theid)
{
echo "<p>Nothing new is added, show the stuff from before";
}
else
{
if (!$thequ or $thequ==0)
{
echo "<p>Error!";
echo "<p><a href=nicepage.php>Enter correct value!</a>";
exit;
}
else
{
$theSQL="select prQuantity from pro where prId=".$theid;
$runtheSQL=mysql_query($theSQL) or die (mysql_error());
$info=mySQL_fetch_array($runtheSQL);
$ourqu=$info['prQuantity'];
if ($thequ > $ourqu)
{
echo "<p>Not good!";
echo "<p><a href=nicepage.php> Do it again!</a>";
exit;
}
else
{
echo "<p>Great, item added!";
$_SESSION['storage'][$theid]=$thequ;
}
}
}

以上代码示例提供了与该问题相关的部分 PHP 脚本。

我是一个相对较新的 PHP 程序员,因此请原谅我犯的任何错误。

我想了解为什么要检查 $theid$thequ 是否等于 false,而不是使用像 isset($_POST['key']) 这样的函数来检查 $_POST全局变量在分配给两个 PHP $theid$thequ 变量之前设置。

在上面的代码示例中,哪些情况可能导致 !$theid!$thequ 为真?

如果有人能解决这个难题,我将不胜感激。

如果您使用 isset(),它会检查变量是否存在。所以如果你说

$id="";

结果将为 TRUE,因为变量存在。但是是空的。

最好的方法是;

if(empty($id)) {

//your code
} else {

//your code when NOT empty
}

所以让我们分解一下

if(!$theid)

这是检查变量是否存在的糟糕方法。你应该做一些更像 if(isset($_POST['newid'])) 的事情,这将明确告诉你该字段已提交

if (!$thequ or $thequ==0)

同样,我们检查该值是否存在的方法很差,但第二个是查看字段是否提交为空的草率方法。如果您提交一个空字段,它的值将为 '',或一个空字符串。由于空字符串是 falsey,您可以检查 anything PHP considers to be false。所以 '' == 0 是正确的。我至少会使用 ''empty() 而不是 0 (这样可以提高可读性)。

接下来,您的 SQL 对 SQL injection 敞开大门。

最后,请不要将mysql_函数用作they are deprecated and will soon be removed from PHP