2016-12-01 5 views
0

入力に値があるかどうかを確認しますか?入力値がnull/emptyの場合、DBに更新しないでください。入力のいずれかに値があるかどうかを確認してください。

ここに私のコードがあります。入力が空いていると、DBのデータが失われてしまいました。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$mysql_host = "localhost"; 
$mysql_username = "root"; 
$mysql_password = ""; 
$mysql_database = "medvedgrad"; 

// First we create the connection 
$pdo = new PDO("mysql:host=".$mysql_host .";dbname=".$mysql_database .";charset=utf8", $mysql_username, $mysql_password); 
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$data = json_decode(file_get_contents("php://input")); 
$zm = $data->zlatni_medvjed; 
$ck = $data->crna_kraljica; 
$gv = $data->gricka_vjestica; 
$dk = $data->dva_klasa; 
$fk = $data->fakin; 



// Then we prepare, and execute the query 
$stmt = $pdo->prepare("UPDATE `stanje_piva` 
SET 
`zlatni_medvjed`=`zlatni_medvjed`+:zm, `crna_kraljica`=`crna_kraljica`+:ck, `gricka_vjestica`=`gricka_vjestica`+:gv, `dva_klasa`=`dva_klasa`+:dk,`fakin`=`fakin`+:fk WHERE `id`=1"); 

$stmt->execute(array("zm" => $zm, "ck" => $ck, "gv" => $gv, "dk" => $dk, "fk" => $fk)); 

?> 
+1

あなたは[ '空の()'](http://php.net/manual/en/function.empty.php)コマンドを試してみましたか? –

+0

1.プレースホルダの前に '+'記号がある理由2.配列形式は 'array(:zm => $ zm)'ではなく、 'array(" zm "=> $ )。それらを確認してください。 –

+0

あなたはこの昨日質問しました、そして、ここで答えられました:http://stackoverflow.com/questions/40888924/update-table-set-only-column-wich-have-input?noredirect=1#comment69016187_40888924 –

答えて

1
<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$mysql_host = "localhost"; 
$mysql_username = "root"; 
$mysql_password = ""; 
$mysql_database = "medvedgrad"; 

// First we create the connection 
$pdo = new PDO("mysql:host=".$mysql_host .";dbname=".$mysql_database .";charset=utf8", $mysql_username, $mysql_password); 
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$data = json_decode(file_get_contents("php://input")); 

$zm = $data->zlatni_medvjed; 
$ck = $data->crna_kraljica; 
$gv = $data->gricka_vjestica; 
$dk = $data->dva_klasa; 
$fk = $data->fakin; 

//Let's do like Jack the ripper, lets divide into parts :p 

$updateparts = array(); 

$zm = trim($zm); 
if($zm != "") 
{ 
    $zmpart = "`zlatni_medvjed`=`zlatni_medvjed`+:zm"; 
    $updateparts[] = $zmpart; 
} 

$ck = trim($ck); 
if($ck != "") 
{ 
    $ckpart = "`crna_kraljica`=`crna_kraljica`+:ck"; 
    $updateparts[] = $ckpart; 
} 

$gv = trim($gv); 
if($gv != "") 
{ 
    $gvpart = "`gricka_vjestica`=`gricka_vjestica`+:gv"; 
    $updateparts[] = $gvpart; 
} 

$dk = trim($dk); 
if($dk != "") 
{ 
    $dkpart = "`dva_klasa`=`dva_klasa`+:dk"; 
    $updateparts[] = $dkpart; 
} 

$fk = trim($fk); 
if($fk != "") 
{ 
    $fkpart = "`fakin`=`fakin`+:fk"; 
    $updateparts[] = $fkpart; 
} 

$updatepartstring = implode(",",$updateparts); 

$update_query="UPDATE `stanje_piva` 
SET 
$updatepartstring 
WHERE `id`=1"; 



// Then we prepare, and execute the query 
$stmt = $pdo->prepare($update_query); 

$stmt->execute(array("zm" => $zm, "ck" => $ck, "gv" => $gv, "dk" => $dk, "fk" => $fk)); 

?> 
+0

1つ以上の答えを書くのではなく、あなたの答えを編集してください。 –

+0

メッセージ「SQLSTATE [HY093]:無効なパラメータ番号:C:\ xampp \ htdocs \ app2 \ app \ database \のバインドされた変数の数がトークンの数と一致しません」という致命的なエラー: COSでスローされた#1 {main}#1のスタックトレース:#0 C:¥xampp¥htdocs¥app2¥app¥database¥unos-piva.php(75):PDOStatement-> execute(Array) \ xampp \ htdocs \ app2 \ app \ database \ unos-piva.php on line 75' – strava1

+0

この作業は、空の入力を残すとエラーが出る – strava1

関連する問題