加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP通过文本框更新

发布时间:2020-12-13 16:58:40 所属栏目:PHP教程 来源:网络整理
导读:现在,只有在填写完所有文本框的情况下,更新才有效,因此用户不能仅仅更新productName.没有错误,但如果其他文本框留空,则数据库将使用空格和0进行更新.我希望这可以更新接收输入的任何文本框,无论是一个还是全部,如果没有输入任何内容,则单独保留其余信息. 如
现在,只有在填写完所有文本框的情况下,更新才有效,因此用户不能仅仅更新productName.没有错误,但如果其他文本框留空,则数据库将使用空格和0进行更新.我希望这可以更新接收输入的任何文本框,无论是一个还是全部,如果没有输入任何内容,则单独保留其余信息.

如果该行的productName是三星,则描述是’A phone’legack’Priice是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;

解决方法

如果设置了每个$_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;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读