用户检索他们的产品列表,并在一个页面上显示此列表,其中文本框预先填充了数量.用户可以更改这些数量,然后表单将此数据发送到更新页面.我使用以下语句来执行数据库更新..
$sql = "UPDATE reservations SET quantity=? WHERE tableID= ?";
Run Code Online (Sandbox Code Playgroud)
这适用于任何值,除非用户在文本框中放置零,然后更新只是跳过此值并将其保留在现有值.我已经直接进入数据库并且可以手动将值更改为零而没有任何问题,但它似乎只是基于Web的语句不起作用.它被设置为INT,我也尝试了VARCHAR,但也没有运气.知道什么会导致sql语句忽略零(0)值?
完整的更新代码是
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$conn = new PDO($dsn, $username, $password, $opt);
$sql = "UPDATE reservations SET quantity=? WHERE tableID= ?";
$stmt = $conn->prepare($sql);
foreach($_POST["Quantity"] as $id => $quantity) {
if ($quantity) $stmt->execute(array($quantity, $id));
}
Run Code Online (Sandbox Code Playgroud) 我有一个表单,用于检索多行数据,每个项目都有一个textarea,供用户对特定项目进行评论.返回的项目数是可变的,它们不必在任何/所有框中留下注释.
<textarea name="comment[]" cols="25" rows="2"><?php echo $f2; ?></textarea>
<input name="tableid[]" type="hidden" value="<?php echo $f1; ?>">
Run Code Online (Sandbox Code Playgroud)
echo语句使用当前存储在数据库中的任何内容填充文本区域,因为用户可以修改其他人输入的内容.
当它传递给表单处理页面时,它返回此..
Submit: Submit
comment: Test Comment 1,Test Comment 2
tableid: 590,591
Run Code Online (Sandbox Code Playgroud)
所以它似乎正确地传递了数组.我正在使用此代码更新数据库
$conn = new PDO("mysql:host=xxxx;dbname=xxxxx",$username,$password);
$i = 0;
if(isset($_POST['submit'])) {
foreach($_POST['comment'] as $comment) {
$comment = $_POST['comment'][$i];
$id = $_POST['tableid'][$i];
$stmt = $conn->prepare("UPDATE reservations SET comment=:comment WHERE tableid=:id");
$stmt->bindValue(':comment', $comment, PDO::PARAM_INT);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$i++;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎根本没有更新,我哪里错了?
非常感谢