1

私はこれに不慣れで、これが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);
4

2 に答える 2

2
<?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";
    }

}
?>
于 2013-02-03T21:26:02.587 に答える
0

デフォルトでは古いデータを入力に含めることができるため、データが変更されていない場合は、古いデータが再度挿入されます。さもないと:

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

ただし、配列+ foreachを使用して、最後でない場合はコンマを追加します。

于 2013-02-03T21:15:43.163 に答える