PHP继续导致无限循环

时间:2013-02-17 01:23:40

标签: php mysql

我有一个奇怪的小问题。

我正在编写一个在MySQL数据库中插入多行的脚本,怪癖是他们的ID不一定是一个很好的整齐1,2,3集,因为他们正在编辑。 continue语句必须跳过每一行,因为它在PHP中超时。在过去的几个小时里,我一直在努力。有什么想法吗?

谢谢!

$items = $_POST['invItemQuantity'];
$i = 1;
while($i <= $items) {
    if(!isset($_POST['item'.$i])) continue;
        //assign posts to variables
        $date = $_POST["item_date".$i];
        $description = $_POST["description".$i];
        $price = $_POST["price".$i];
        $ID = $_POST["item".$i];

        $que = "UPDATE invoice_items SET date='".$date."', description ='".$description."', price ='".$price."' WHERE item_ID=".$ID;
        $test .= $que."<br>";
        $i++; 

} 

3 个答案:

答案 0 :(得分:4)

if(!isset($_POST['item'.$i])) continue;

在这种情况下你忘了增加我。将其修复为:

if(!isset($_POST['item'.$i])) { $i++; continue; }

答案 1 :(得分:1)

由于您需要遍历所有项目字段,无论如何,for循环可能会更容易忘记您的增量操作。

$items = $_POST['invItemQuantity'];
for($i=1; $i<=$items; $i++)
{
    if(!isset($_POST['item'.$i])) continue;

    // ...
}

您可能还希望在代码中使用它之前对“$ _POST ['invItemQuantity']”执行一些验证(例如,验证它包含多个预期范围)。

答案 2 :(得分:0)

你的整个方法很奇怪。我在你的表单中猜测你有item1,item2,item3等。相反,你应该为所有人提供项目[]以将其作为数组提交。对每个item_date,描述和价格执行相同操作。然后只需运行:

foreach($_POST['items'] as $i => $item) {
    if(!empty($item)) {
        $date = mysql_real_escape_string(trim($_POST['item_date'][$i]));
        $description = mysql_real_escape_string(trim($_POST['description'][$i]));
        $price = mysql_real_escape_string(trim($_POST['price'][$i]));
        $ID = (int)$_POST['item'][$i];

        //UPDATE QUERY...
    }
}

另一件事是你永远不应该接受用户输入并直接将其输入到数据库中,因为这样你就可以完全接受SQL注入了。你应该首先使用mysql_real_escape_string(对于mysql)来逃避它。更好的方法是学习MySQLi或PDO。

您可能还希望查看filter_input,这是确保您的输入干净的好方法。您永远不应该信任用户输入,并且应该始终根据合适变量的白名单对其进行测试。