2017-05-23 15 views
0

データベースに同じ名前の複数の値を更新する際に問題が発生しました。
配列データをループ内のデータベースに更新する

//while loop 
{ 
<input name="exists[]" value='$row1[Status_Name]'></input> 
} 

怒鳴るが、私は私の$row1[Status_Name]は、テーブル内のすべてのstatus_nameが表示されます

if (isset($_POST["updsts"])) 
{ 
    $gid = $_POST["id"]; 

    $sqlq = "SELECT * FROM orderstatus WHERE Status_Group = '$gid'"; 

    $result = mysqli_query($conn, $sqlq); 

    $rowcount = mysqli_num_rows($result); 

    if ($rowcount == 0) 
    echo "No records found";   
    else 
    { 
     $x = '0'; 

     while($x<$rowcount) 
     { 
      $stsname = $_POST["exists[$x]"]; 

      $sqlu = "UPDATE orderstatus SET 
      Status_Name = '$stsname' 
      WHERE Status_Group = '$gid'"; 

      $x++; 
     } 
} 

データベースにデータを更新する方法です。

+0

(1)コードを揃えてください。 (2) 'php'タグを付けてください。 –

+0

Status_GroupとStatus_Nameに1対多の関係があると言っていますか?例えばgid = 'A'と言うことができます。 Status_Nameにはgid = 'A'を使用できます。 –

+0

はい、あなたは正しいです。 –

答えて

0

することはできpost配列キーに対してループ:

foreach ($_POST['exists'] as $val) { 
    // Do your updates here 
} 

また、このコードは、あなたが知っておくべきその他の重大な問題をたくさん持っています。

  • HTMLのコンテキストで使用されるデータはエスケープしていません。 HTMLに連結している任意のデータの周りにhtmlspecialchars()を使用してください。これがなければ、不正なHTMLや注入されたスクリプトによる潜在的なセキュリティ問題が発生する危険性があります。
  • あなたのクエリで使用されているデータはエスケープしていません。現状では、データベースデータを使用して誰でも自由に行うことができます。自動化されたボットは、この種のスクリプトをヒットし、常にそれらを悪用します。常にパラメータ化されたクエリを使用します。データをクエリのコンテキストに連結しないでください!
  • この選択と更新ループの必要はありません。ただ1つの更新を使用してください。
+0

を思い出させていただきありがとうございます。このコードの使用方法はあまり明確ではありません。さらに説明してください。ありがとう –

関連する問題