现在更新仅在所有文本框都填写完毕后才有效,因此用户不能仅仅更新productName。没有错误,但如果其他文本框留空,则数据库将使用空白和0进行更新。我希望这可以更新接收输入的任何文本框,无论是一个还是全部,如果没有输入任何内容,则单独保留其余信息。
如果该行的productName是三星,则说明是'手机' wholesalePrice是179.99而我只更新productName文本框我仍然希望描述和wholesalePrice保持不变。现在,如果我只更新productName,那么wholesalePrice显示为0.00,描述为空。我尝试在查询中使用OR语句而不是逗号,而在输入信息的任何文本框中都返回了0。
if(isset($_POST['id'])) {
try {
$query = "UPDATE products SET productName = :productName, description = :description, wholesalePrice = :wholesalePrice,
retailPrice = :retailPrice, category = :category, quantityOnHand = :quantityOnHand
WHERE productID = :productID";
$statement = $db->prepare($query);
$statement->bindValue(':productID', $_POST['id']);
$statement->bindValue(':productName', $productName);
$statement->bindValue(':description', $description);
$statement->bindValue(':wholesalePrice', $wholesalePrice);
$statement->bindValue(':retailPrice', $retailPrice);
$statement->bindValue(':category', $category);
$statement->bindValue(':quantityOnHand', $quantityOnHand);
$statement->execute();
$statement->closeCursor();
//reload page after data is entered into the table and display a message if successful for 3 seconds before redirect
$page = $_SERVER['PHP_SELF'];
header('Location: ' . $_SERVER["HTTP_REFERER"] );
exit;
答案 0 :(得分:3)
如果设置了每个$_POST
值,您可以使用列的辅助数组动态绑定值。然后,您可以仅为这些值创建更新查询。
$fields = array('productName', 'description', 'wholesalePrice', 'retailPrice', 'category', 'quantityOnHand');
$values = array();
$binds = array();
foreach($fields as $key => $value) {
if (isset($_POST[$value])) {
$values[] = $value.' = :'.$value;
$binds[':'.$value] = $_POST[$value];
}
}
if (!empty($values)) {
$query = "UPDATE products SET ";
$query .= implode(', ', $values);
$query .= " WHERE productID = :productID";
$binds[':productID'] = $_POST['id'];
$statement = $db->prepare($query);
$statement->execute($binds);
$statement->closeCursor();
}
修改强>
如果您将值存储在变量中,则可以使用变量:
foreach($fields as $key => $value) {
if (isset($$value)) {
$values[] = $value.' = :'.$value;
$binds[':'.$value] = $$value;
}
}
答案 1 :(得分:0)
您需要将所有现有值传递给表单字段,以便在没有任何更改的情况下将现有数据传递给sql update。在提交时验证数据,然后进行更新。
<textarea name="description">'.$row['description'].'</textarea>
if(isset($_POST['id'])) {
$productname = $_POST['productname'];
$description = $_POST['description'];
// etc ....
try {
// sql
}catch{
// error
}
}