我有一个奇怪的小问题。
我正在编写一个在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++;
}
答案 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,这是确保您的输入干净的好方法。您永远不应该信任用户输入,并且应该始终根据合适变量的白名单对其进行测试。