3

データの複数の列を更新するフォームを作成しています。このコードは私の目的のために部分的に成功しています。あとは、更新クエリに含める(IS NOT NULLの場合)だけです。どうすればいいのかわかりません。

つまり、$_POST値が空でない場合にのみUPDATEを実行する必要があります。

<form>
<input type='text' name='input1' />
<input type='text' name='input2' />
<input type='text' name='input3' />
<input type='submit' value='submit' />
</form>

<?php
//db connect

$1=$_POST['input1'];
$2=$_POST['input2'];
$3=$_POST['input3'];

mysql_query("UPDATE table
             SET a = $1
                 b = $2
                 c = $3
             WHERE row = 'row_id");

);


?>

助けてくれてありがとう。

(余分な入力を避けるために、元のコードは文字をエスケープするため、SQLインジェクションの警告は必要ありません。また、「mysqli_query」に慣れている途中なので、コメントする必要もありません。)

4

8 に答える 8

23

使用できますCOALESCE

       UPDATE table
         SET a = COALESCE($1, a),
             b = COALESCE($2, b),
             c = COALESCE($3, c)
         WHERE row = ''
于 2013-03-20T13:43:46.413 に答える
2
COALESCE

解決策です。OracleのNVLと同等です。パラメータを使用して、プリペアドステートメントで以下のように使用できます

UPDATE
    tbl_cccustomerinfo
SET
    customerAddress = COALESCE(?,customerAddress),
    customerName =  COALESCE(?,customerName),
    description =  COALESCE(?,description)
WHERE
    contactNumber=?
于 2013-09-29T20:04:59.507 に答える
2

COALESCE

COALESCEが最良のオプションです。

意味: COALESCE(a、b)は、単にaをPUTすることを意味しますが、aがNULL(この場合はPOSTED / PUTではない)の場合は、 bに置き換えます。

 `mysql_query("UPDATE table
         SET a =COALESCE($1,a)
             b = COALESCE($2,b)
             c = COALESCE($3,c)
         WHERE row = 'row_id")`
于 2018-03-27T14:45:52.720 に答える
1
if(!empty($_POST['input1'])){ ...mysql query.. }
于 2013-03-20T13:44:50.877 に答える
1
<?php
$query="UPDATE table SET"
$query.=(!empty($_POST['input1']))? "a=$1,":"";
$query.=(!empty($_POST['input2']))? "b=$2,":"";
$query.=(!empty($_POST['input3']))? "c=$3,":"";
$query=substr($query,0,-1);
$query.="WHERE row = 'row_id'"
mysql_query($query);
?>
于 2013-03-20T13:55:01.700 に答える
0

これで試してください:

$updateList = array();
if(!empty($_POST['input1'])) {
    $updateList[] = 'a = '.$_POST['input1'];
}

//Do it for every input...

if(!empty($updateList)) {
    $sql = 'UPDATE table SET '.implode(', ', $updateList).' WHERE row = 1';
}

あなたはそれを行う方法を知っていると言ったので、私は何もエスケープ/引用しなかったことに注意してください。

于 2013-03-20T13:56:43.213 に答える
0

それらの配列を作成するだけです。そのようです:

if(empty($_POST['input1']) && empty($_POST['input2']) && empty($_POST['input3'])) {
   return false;
  } else {
   $updates = array();

   if(!empty($_POST['input1'])) 
     $updates[] = 'a='".$_POST['input1']."';

   if(!empty($_POST['input2'])) 
    $updates[] = 'b='".$_POST['input2']."';

   if(!empty($_POST['input3'])) 
    $updates[] = 'c='".$_POST['input3']."';


        $query = "UPDATE table SET".$updates."WHERE row_id=''";
        $sth = $sth->connect->prepare($query);
        $sth->execute();

        ));
   }
于 2013-09-29T20:31:40.977 に答える
-1

簡単な条件で試してください

$1  =   isset($_POST['input1'])? $_POST['input1'] : 'a';
$2  =   isset($_POST['input2'] ? $_POST['input2'] : 'b';
$3  =   isset($_POST['input3'] ? $_POST['input3'] : 'c';


if(count($_POST) > 0){

    mysql_query("UPDATE table
                 SET a = $1
                     b = $2
                     c = $3
                 WHERE row = 'row_id");

    );
}
于 2013-03-20T13:43:54.637 に答える