2016-11-30 1 views
0

こんにちは私の問題は私はdbにデータを更新するアプリケーションに取り組んでいます。私の問題は、入力が空の場合に新しいデータをdbに送信するときに、テーブル内の既存のデータを0で上書きする場合です。値がある場合は、入力のケース番号で正しく更新されます。入力がある更新テーブルセットのみの列

空の入力を確認するにはどうすればいいですか?

<?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)); 
?> 
+0

[SQL UPDATE row :: Possible input in empty](http://stackoverflow.com/questions/14677362/sql-update-rowleave-present-value-if-input-empty)の重複の可能性あり –

+0

I '0(整数として0) 'をdbに保存する必要があります – strava1

答えて

0

あなたは配列にのみ、空でない値を含めるとのみを更新するための方法が必要です。

$updateArray = array(); 
$sqlString = "Update `stanje_piva` SET "; 

foreach(['zm' => $zm, 'ck' => $ck, 'gv' => $gv, 'dk' => $dk, 'fk' => $fk] as $key => $value){ 

    // add to updateArray ONLY IF NOT EMPTY 
    if($value != ''){ 
     // add key/value to updateArray 
     array_push($updateArray, $key => $value); 

     // append key/value to sql string 
     switch($key){ 
      case 'zm': 
       $sqlString .= "`zlatni_medvjed`=`zlatni_medvjed`+:zm, "; 
       break; 
      case 'ck': 
       $sqlString .= "`crna_kraljica`=`crna_kraljica`+:ck, "; 
       break; 
      case 'gv': 
       $sqlString .= "`gricka_vjestica`=`gricka_vjestica`+:gv, "; 
       break; 
      case 'dk': 
       $sqlString .= "`dva_klasa`=`dva_klasa`+:dk, "; 
       break; 
      case 'fk': 
       $sqlString .= "`fakin`=`fakin`+:fk, "; 
       break; 
     } 
    } 
} 

// remove last ', ' from sqlQuery 
$sqlQuery = substr($sqlQuery, 0, strlen($sqlQuery)-2); 

// add Where clause 
$sqlQuery .= " WHERE `id`=1"; 

// prepare 
$stmt = $pdo->prepare($sqlQuery); 

// execute 
$stmt->execute($updateArray); 

編集:stmtを準備するのを忘れて、それを加えました。

0
if(!empty($zm) && !empty($ck) && !empty($gv) && !empty($dk) && !empty($fk)) { 
    $stmt->execute(array("zm" => $zm, "ck" => $ck, "gv" => $gv, "dk" => $dk, "fk" => $fk)); 
} 
+3

コードのみの回答はあまり価値がありません。あなたの投稿されたコードが何をしているのか、それがどのように問題を解決するのかについていくつかの説明を付けることを考えてください – Rahul

+0

私は '0(整数として0)'をdbに保存する必要があります – strava1

関連する問題