2016-04-18 9 views
-1

私はそれを動作させるのに苦労しています。 delete_flag(INT(11))ここで、0 - -delete_flagカラムが更新されない

私はローンコル名前のデータベースを持って削除され、削除されず、1。 ex。

+----+-------------+-------------+ 
| id | loan  | delete_flag | 
+----+-------------+-------------+ 
| 1 | John  | 0   | this one is visible 
+----+-------------+-------------+ 
| 2 | Meresa  | 1   | this one is not visible to user 
+----+-------------+-------------+ 

したがって、もう存在しないすべてのローンは1に設定されます。 テーブルのための私の行IDは、AJAXを介して送信されているネットワークタブでは、それらの結果が IDSのような正しい行-IDを示しています。「11」

私のPHPコードを削除するか、私はアップデートに値を持つdelete_flagのCOLを言います= 1は次のようになります。

<?php 
    session_start(); 

$con = new mysqli($server,$username,$password,$database); 

    if(isset($_POST['ids'])){ 
     $ids = $_POST['ids']; 
     $id_count = count($_POST['ids']); // count array 

     for($i=0; $i < $id_count; $i++) 
     { 
     $id = $ids[$i]; 

      //mysqli_query($con,"DELETE1 FROM k_loans WHERE loan_id=".$id);// this works perfectly ,permanently deleting the record in database . 

      $result= mysqli_query($con,"UPDATE k_loans set delete_flag = 1 WHERE loan_id='.$id'"); 

      var_dump($result); 
      echo "successful delete"; 
     } 

    } 
?> 

をここで、次のコードを使用する場合 -

`mysqli_query($con,"DELETE1 FROM k_loans WHERE loan_id=".$id);` 

は、AJAX呼び出しを介して送信され、受信したIDからレコードを削除します。以下のネットワークタブのショーでは、以下のための

$result= mysqli_query($con,"UPDATE k_loans set delete_flag = 1 WHERE loan_id='.$id'"); 

結果:私は、データベースのレコードを維持したいが、ユーザーから隠されているので

しかし、私はこのコードを使用しています

bool(true)が正常に削除されました。

しかし、妙に何のレコードが更新されません。 phpmyadminで同じクエリを使用すると、スクリプトでは動作しますが動作しません。本当に私が問題を解決する手助けをすることができる人は誰でも手の込んだ。ありがとう。

+0

引用符を削除しようとしましたか? $ result = mysqli_query($ con、 "UPDATE k_loans set delete_flag = 1 WHERE loan_id ="。$ id); – Arno

+0

'mysqli_query( "loan_id = k_loans FROM DELETE1 '" $詐欺、 "" $番号。。');'が、私は強く、準備された文/バインド変数を使用してお勧めします....特にこのシステムには金銭的なローンが含まれているため、 –

+0

@Arnoはうまくいきました。提案されたことはありませんでした。まだBoolを返しています。 – phpnewbie

答えて

1

あなたは本当にバインド変数をプリペアドステートメントを使用する必要があります。元のステートメントの問題は、$id値の前後の引用符にあります。バインド変数を使用した場合は、欠落しているか誤っている引用符を心配する必要はなく、プリペアド・ステートメントがこれを処理するため、SQLインジェクションを防ぐために値をエスケープする必要はありません。

$query = "UPDATE k_loans set delete_flag = 1 WHERE loan_id=?"; 
$stmt = mysqli_prepare($con, $query); 
mysqli_stmt_bind_param($stmt, "i", $id); 
mysqli_stmt_execute($stmt); 

EDIT

も注意してください、あなたは別のID値と同じクエリを複数回使用されている場合、あなたは一度だけ文を準備する必要があります。ループ内でバインド/実行を繰り返すだけで済みます

$query = "UPDATE k_loans set delete_flag = 1 WHERE loan_id=?"; 
$stmt = mysqli_prepare($con, $query); 
for($i=0; $i < $id_count; $i++) { 
    $id = $ids[$i]; 
    mysqli_stmt_bind_param($stmt, "i", $id); 
    mysqli_stmt_execute($stmt); 
} 
+0

ありがとう@間違いを指摘し正しい方法を示してくれたマーク。 – phpnewbie

+0

[prepared statementとそのメリットについてはこちら](http://php.net/manual/en/pdo.prepared-statements.php) –

0

あなたのUPDATE文の構文に誤りがあります。

試してみてください。

より良い解決策は、SQLインジェクションを防ぐために準備されたステートメントを使用することであろう。チェック:http://php.net/manual/fr/mysqli.prepare.php

+0

が動作していません。今すぐ試しました.. Bool(false)を返す – phpnewbie

関連する問題