我是pdo中的新手,所以我只需要从html作为数组(Items [])发布的更改值或值,下面的代码更新发布的值并将未更改的值变为零。 请帮助和谢谢。
<?php
if(isset($_POST['update'])) {
for($t=0;$t<8;$t++){
if(isset($_POST['Items'])) {
$items=$_POST['Items'];
$update="UPDATE items SET Updater = :LogName,
UptoDate = :uptodate,
ItemPrice = :Items
WHERE id = $t";
$y=$t-1;
$stmt=$Link->prepare($update);
$stmt->bindParam(':Items',$items[$y], PDO::PARAM_STR);
$stmt->bindParam(':uptodate', $date, PDO::PARAM_STR);
$stmt->bindParam(':LogName', $LogName, PDO::PARAM_STR);
$stmt->execute();
} else {
// Don't do anything because it means there is no $_POST['Items(t)']
}
}
}
?>
.........
</tr>
</table>
<input type="submit" name="update" value="تحديث"/>
</form>
答案 0 :(得分:0)
将数据库中的当前数据加载到数组中(正确格式化),然后使用array_diff
获取数据库和表单数据之间的差异,这样您就可以构建UPDATE
语句了愿望。
您还可以为未填写的字段指定默认值,因此当它们到达您的服务器时,您知道哪些字段有更改(值与默认值不同)
答案 1 :(得分:0)
Eurekaaaa。 我解决了这个问题:
if(isset($_POST['update'])) {
$Items=$_POST['Items'];
for($t=0;$t<8;$t++){
if((!isset($Items[$t])) or ($Items[$t]==="") or ($Items[$t]===0))
{$t++;}
elseif(isset ($Items[$t])){
$y=$t+1;
$update="UPDATE items SET Updater = :LogName,
UptoDate = :uptodate,
ItemPrice = :Items
WHERE id = $y";
$stmt=$Link->prepare($update);
$stmt->bindParam(':Items',$Items[$t], PDO::PARAM_STR);
$stmt->bindParam(':uptodate', $date, PDO::PARAM_STR);
$stmt->bindParam(':LogName', $LogName, PDO::PARAM_STR);
$stmt->execute();
}}}
答案 2 :(得分:-1)
更新查询只会更新需要更改的行。您可以获取受影响的行(http://php.net/manual/en/pdostatement.rowcount.php),它将告诉您已更新的行数。除非您特别需要更改的值(在这种情况下您需要先选择它们),我相信代码会自动处理您需要的内容。