大家好,我需要以下代码的帮助。
我正在建立一个客户管理系统。我在这里尝试的是为ORDERS table =>更新多行单击提交多行。在此页面之前,我有另一个页面,我的表单中有输入:
<input type="text" name="qty[]" value="<?php echo $row["qty"]; ?>" />
<input type="text" name="desc[]" value="<?php echo $row["desc"]; ?>" />
<input type="text" name="price[]"value="<?php echo $row["price"]; ?>" />
提交表格后,将转到下一页:
<?php
if(isset($_POST["submit"])){
$qty = $_POST['qty'];
$desc = $_POST['desc'];
$price = $_POST['price'];
$order = $_POST['order'];
$customer = $_POST['customer'];
$i = 0;
$count = count($qty);
for($i=0; $i < $count; $i++){
$qty = $qty[$i];
$desc = $desc[$i];
$price = $price[$i];
$update = mysql_query("UPDATE `orders` SET `qty` = '".$qty."', `desc` = '".$desc."', `price` = '".$price."' WHERE `order_id` = '".$order."' ");
}
?>
此代码看起来有时更新而不是更新,当我更新多行时,我也会收到此代码的错误。
Notice: Uninitialized string offset: 1 in
请帮助大家解决这个问题。
由于 来自艾迪
答案 0 :(得分:1)
您已覆盖变量,例如$qty
。
试试这个:
$qty = $_POST['qty'];
$desc = $_POST['desc'];
$price = $_POST['price'];
$order = $_POST['order'];
$customer = $_POST['customer'];
$count = count($qty);
for($i = 0; $i < $count; $i++){
$qty1 = $qty[$i];
$desc1 = $desc[$i];
$price1 = $price[$i];
$update = mysql_query("UPDATE `orders` SET `qty` = '{$qty1}', `desc` = '{$desc1}', `price` = '{$price1}' WHERE `order_id` = '{$order}';");
}
**我建议使用MySQLi
或PDO
扩展名代替MySQL
。
<强> UPD:强>
可能有$qty
,$desc
&amp; $price
可能有不同的长度。我建议你修改这样的循环:
$sql = "UPDATE `orders` SET `qty` = '{$qty1}', `desc` = '{$desc1}', `price` = '{$price1}' WHERE `order_id` = '{$order}';";
$update = mysql_query($sql);
if(mysql_errno())echo PHP_EOL, mysql_error();
它可能会帮助您获得MySQL错误。
答案 1 :(得分:0)
是否设置了检查值..并使用mysqli or PDO
代替mysql
以避免sql注入
for($i=0; $i < $count; $i++){
$qty_val = isset($qty[$i])?$qty[$i]:'';
$desc_val = isset($desc[$i])?$desc[$i]:'';
$price_val = isset($price[$i])?$price[$i]:'';
$update = mysql_query("UPDATE `orders` SET `qty` = '".$qty_val."', `desc` = '".$desc_val."', `price` = '".$price_val."' WHERE `order_id` = '".$order."' ");
}
答案 2 :(得分:0)
使用foreach而不是for,但我们假设您的数组保持同步索引:
foreach ($qty as $index => $quantity_entry){
$update = mysql_query("UPDATE `orders` SET
`qty` = '" . mysql_real_escape_string($quantity_entry) . "',
`desc` = '" . mysql_real_escape_string($desc[$index]) . "',
`price` = '" . mysql_real_escape_string($price[$index]) . "'
WHERE `order_id` = '" . mysql_real_escape_string($order) . "' ");
}
这样您就不必担心不存在的索引...... PS:注意mysql转义 - 你永远不应该跳过它!
答案 3 :(得分:0)
您在每次迭代中都会覆盖$ qty,$ desc和$ price变量,因此它们只能在第一个变量中起作用
$qty = $_POST['qty'];
$desc = $_POST['desc'];
$price = $_POST['price'];
$order = $_POST['order'];
$customer = $_POST['customer'];
$i = 0;
$count = count($qty);
for($i=0; $i < $count; $i++){
$currentQty = mysql_real_escape_string($qty[$i]);
$currentDesc = mysql_real_escape_string($desc[$i]);
$currentPrice = mysql_real_escape_string($price[$i]);
$update = mysql_query("UPDATE `orders` SET `qty` = '".$currentQty."', `desc` = '".$currentDesc."', `price` = '".$currentPrice."' WHERE `order_id` = '".$order."' ");
}
$qty = $_POST['qty'];
$desc = $_POST['desc'];
$price = $_POST['price'];
$order = $_POST['order'];
$customer = $_POST['customer'];
$i = 0;
$count = count($qty);
for($i=0; $i < $count; $i++){
$currentQty = mysql_real_escape_string($qty[$i]);
$currentDesc = mysql_real_escape_string($desc[$i]);
$currentPrice = mysql_real_escape_string($price[$i]);
$update = mysql_query("UPDATE `orders` SET `qty` = '".$currentQty."', `desc` = '".$currentDesc."', `price` = '".$currentPrice."' WHERE `order_id` = '".$order."' ");
}
无论如何,代码中有太多错误。在将条目发送到mysql之前,您应该过滤或转义条目,并且所有订单项都具有相同的数量,设计和价格,因为您使用相同的order_id不断覆盖数据。
答案 4 :(得分:0)
您无法确保所有三个阵列的长度相等。如果没有插入价格或描述,则该项目不会随请求一起发送(浏览器仅发送非空值)。
您应该重新编写HTML输出并设置一个包含多个键命名列的单个数组,这样您只需要迭代一个数组而不是三个数组。
一个例子是:
<input type="text" name="product[0][qty]" value="QTY_1" />
<input type="text" name="product[0][desc]" value="DESC_1" />
<input type="text" name="product[0][price]"value="PRICE_1" />
<input type="text" name="product[1][qty]" value="QTY_2" />
<input type="text" name="product[1][desc]" value="DESC_2" />
<input type="text" name="product[1][price]"value="PRICE_2" />
使用foreach
迭代products数组并另外检查列是否已设置:
foreach( $_POST['product'] as $inputRow )
{
if( !isset( $inputRow['qty'] ) || !isset( $inputRow['desc'] ) || !isset( $inputRow['price'] ) )
{
echo 'Some input is missing; can\'t store to database';
continue;
}
/* insert to DB here, but please use prepared statement or at least escape the user inputs properly! */
}