【问题标题】:sql UPDATE row::leave present value if input emptysql UPDATE row::leave current value if input empty
【发布时间】:2013-02-03 21:12:02
【问题描述】:

我是新手,我不确定这是一个 php 问题还是一个 sql,但我有一个没有必填字段的表单,提交时它会更新数据库行中的列。目前,如果输入为空,则在提交表单时,它会使用空白空间更新相应的列并擦除曾经存在的值。我想弄清楚的是如何在表单提交时做到这一点,如果输入值为空,它不会更新数据库列。

if ( isset($_POST['submit']) ) {
    $user = $_SESSION['user_name'];
    $signature = $mysqli->real_escape_string($_POST['signature']);
    $skype = $mysqli->real_escape_string($_POST['skype']);
    $facebook = $mysqli->real_escape_string($_POST['facebook']);

    $insert = $mysqli->query("
    UPDATE users 
    SET u_signature='$signature', u_skype='$skype', u_facebook='$facebook' 
    WHERE u_name='$user'
    ") or die ($mysqli->error);

【问题讨论】:

标签: php sql database


【解决方案1】:
<?php
if ( isset($_POST['submit']) ) {

    $user = $_SESSION['user_name'];
    $signature = mysql_real_escape_string($_POST['signature']);
    $skype = mysql_real_escape_string($_POST['skype']);
    $facebook = mysql_real_escape_string($_POST['facebook']);
    if(!empty($signature)){
     $update_fields[] = "u_signature='$signature'";
    }
    if(!empty($skype)){
     $update_fields[] = "u_skype='$skype'";
    }
    if(!empty($facebook)){
     $update_fields[] = "u_facebook='$facebook'";
    }
    if(count($update_fields) > 0){
      $nonempty_fields = implode(", ", $update_fields);
      $insert = mysql_query("
      UPDATE users 
      SET $nonempty_fields
      WHERE u_name='$user'
      ") or die(mysql_error());
    }
    else{
     echo "must not update the db because all required fields are empty";
    }

}
?>

【讨论】:

  • 请编辑它以供您使用,这只是一个用于教育目的的模式。
  • 这就是他们所说的“准备好的陈述”吗?
【解决方案2】:

默认情况下,您可以在输入中包含旧数据,因此如果没有更改任何数据,则只是再次插入旧数据。否则:

$q_vars = "UPDATE users SET ";
if(!empty($signature))
{
$q_vars .= "signature = $signature ";
}

但如果不是最后一个,则使用数组 + foreach 添加逗号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多