2017-01-24 3 views
-1
<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
session_start(); 
$username= $_SESSION['username']; 

require "connection.php"; 

// GET THE DATA FROM POST IF IT EXISTS 
$data = isset($_POST['data']) ? $_POST['data'] : false; 

// IF IT IS A VALID ARRAY THEN PROCESS IT 
if (is_array($data)) { 
    // LOOP THOUGH EACH SUBMITTED RECORD 
    foreach($data as $id => $rec) { 

     // START AN UPDATE STRING 
     $updatestr = ''; 

     // ADD FIELD/VALUES TO UPDATE STRING 
     foreach($rec as $fieldname => $value) { 
      if($fieldname == 'id'){ 
       continue; 
      } 
      else{ 
      $updatestr .= "`{$fieldname}` = '{$value}',"; 
      } 
     } 

     // REMOVE THE TRAILING , 
     trim($updatestr, ','); 
     $updatestr = rtrim($updatestr, ','); 


     // CREATE THE UPDATE QUERY USING THE ID OBTAINED FROM 
     // THE KEY OF THIS data ELEMENT 
     $query = "UPDATE `call` SET {$updatestr} WHERE id= '$id'"; 

     // SEND IT TO THE DB 
     $result= mysqli_query($conn, $query); 
    } 
    echo "working"; 
} 
else { 
    echo "not working"; 
} 


?> 

私はこのコードを持っており、それが完璧に動作は、しかし、私は mysqli_real_escape_stringを追加したい。しかし、私はそこに正確な情報がわからないので、どのように私は、各変数にそれを行うことができますか?私はそれがクエリに追加される前にそれを追加する特別な文字が追加されたmysqli_real_escape_string()を動的変数に追加するには?

私はまた、私のIDが変更されないことを、それは常に1つの問題は何と変わらないことに気づいた?

+1

なぜ準備文はありませんか? –

+0

何を意味するのですか@PatrykUszyński – jasy

+1

@ PatrykUszyskが何を意味するのかは、準備されたステートメントを使用することではない理由はありません... – nerdlyist

答えて

1

私は今、私はこれが機能して準備された文であなたを取得する必要があります信じて、私は

<?php 
    error_reporting(E_ALL); 
    ini_set('display_errors', 1); 
    session_start(); 
    $username= $_SESSION['username']; 

    require "connection.php"; 

    // GET THE DATA FROM POST IF IT EXISTS 
    $data = isset($_POST['data']) ? $_POST['data'] : false; 

    // IF IT IS A VALID ARRAY THEN PROCESS IT 
    if (is_array($data)) { 
     // LOOP THOUGH EACH SUBMITTED RECORD 
     foreach($data as $id => $rec) { 

      // START AN UPDATE STRING 
      $updatestr = ''; 

      // ADD FIELD/VALUES TO UPDATE STRING 
      foreach($rec as $fieldname => $value) { 
       if($fieldname == 'id'){ 
        continue; 
       } 
       else{ 
       $updatestr .= "`{$fieldname}` = '{$value}',"; 
       } 
      } 

      // REMOVE THE TRAILING , 
      trim($updatestr, ','); 
      $updatestr = rtrim($updatestr, ','); 
      $updatestr = mysqli_real_escape_string($conn, $updatestr); 

      // CREATE THE UPDATE QUERY USING THE ID OBTAINED FROM 
      // THE KEY OF THIS data ELEMENT 
      $query = "UPDATE `call` SET {$updatestr} WHERE id= '$id'"; 

      // SEND IT TO THE DB 
      $result= mysqli_query($conn, $query); 
     } 
     echo "working"; 
    } 
    else { 
     echo "not working"; 
    } 


    ?> 
+0

私はそれを試してみましたが、私のクエリは\ 'テキスト\'のためもう動作しませんでした。\そこに別の方法がありますか? – jasy

+0

あなたは$ value変数を入れてみることができます:$ value = mysqli_real_escape_string($ conn、$ value); –

+0

はい、うまくいきました!、idについてはどうすればよいのですか? – jasy

1

は、私はPHPへのアクセスを持っていない確かに文字列をesacpeましupdation前に、あなたのコード内でアドオンやりました。

<?php 
    foreach($data as $id => $rec) { 
     // START AN UPDATE STRING 
     $update_fields = array(); 
     $bind_params_types = '' 
     $bind_params_values = array(); 
     // ADD FIELD/VALUES TO UPDATE STRING 
     foreach($rec as $fieldname => $value) { 
      if($fieldname == 'id'){ 
       continue; 
      } 
      else{ 
       $update_fields[] = '{$fieldname} = ?'; 
       $bind_params_types .= 's'; 
       $bind_params_values[] = $value; 
      } 
     } 
     $update_fields = implode(',', $update_fields); 
     $bind_params_values = implode(',', $value); 
     // CREATE THE UPDATE QUERY USING THE ID OBTAINED FROM 
     // THE KEY OF THIS data ELEMENT 
     $query = "UPDATE `call` SET {$update_fields} WHERE id= '$id'"; 
     if($stmt = mysqli_prepare($conn, $query)){ 
      $stmt->bind_param($bind_params_types,$bind_params_values); 
      $stmt->execute(); 
     } else { 
      echo "failed"; 
     } 
    } 
} 
関連する問題