2017-12-24 14 views
0

単純な形式のデータベースエントリを編集したいと思います。 各エントリのIDと名前は固定です。POST後の配列の使用

問題:

  1. 形式$ farrayを提出した後にのみ、[3]ではない他のレコードの$配列の編集されたデータが含まれません。
  2. $ farrayには名前とIDは含まれていません(フォームには含まれていません)。クエリのレコードのIDが必要です。

回避策として何が使用できますか?

現在のスクリプト

<?php 
$query = mysql_query("SELECT * FROM database"); 
$array = array(); 
while($row = mysql_fetch_assoc($query)){ 
    $array[] = $row; 
} 

if(isset($_POST['send'])) 
{ 
    $farray = $_POST['farray']; 

    foreach ($farray as $key => $value) { 
     echo('UPDATE database SET ' . $key . ' = "' . $value . '"' . ' WHERE id = ' . $farray['id']); //testing 
    } 
} 
?> 

<form action=" <?=$_SERVER['PHP_SELF']?> " method="POST"> 
<?php 
foreach($array as $key1){ 
    echo $key1["name"] . "<br />"; 
    foreach($key1 as $key => $value){ 
     if ($key != "id" AND $key != "name") { 
      print $key. 
      ' <input type="text" name="farray['.$key.']" value="'.$value.'"><br /><br />'; 
     }  
    } 
} 
?> 
<input type="submit" name="send" value="send"> 
</form> 

例$アレイ

Array 
(
    [0] => Array 
     (
      [id] => 0 
      [name] => name0 
      [1] => 1 
      [2] => 2 
      [3] => 3 
     ) 

    [1] => Array 
     (
      [id] => 1 
      [name] => name1 
      [1] => 1 
      [2] => 2 
      [3] => 3 
     ) 

    [2] => Array 
     (
      [id] => 2 
      [name] => name2 
      [1] => 1 
      [2] => 2 
      [3] => 3 
     ) 

    [3] => Array 
     (
      [id] => 3 
      [name] => name3 
      [1] => 1 
      [2] => 2 
      [3] => 3 
     ) 
) 

例$ farray(編集後、フォームを提出)

Array 
(
    [1] => 10 
    [2] => 20 
    [3] => 30 
) 
+0

データベーステーブルに1,2,3という名前のフィールドが実際にありますか? –

+0

@BrianGottierいいえ、それは例です。 – Remco

+0

私はあなたに答えを残しました。あなたが対処したいと思う重大なセキュリティ問題(SQLインジェクション脆弱性)がありますが、私の答えのポイントはデータの配列を正しく投稿する方法を示すことでした。私の答えは、あなたの実際のコードを修正する方法を明確にする必要があります。 –

答えて

1

OK、テーブルフィールドが1、2、3ではないにもかかわらず、投稿された配列を少し変更するだけで済みます。だから私はあなたに少しの例を作った:

<form method="post"> 
<?php 
// Simulate DB records 
$array = [ 
    [ 
    'id' => 0, 
    'name' => 'name0', 
    '1' => 1, 
    '2' => 2, 
    '3' => 3 
    ], 
    [ 
    'id' => 1, 
    'name' => 'name1', 
    '1' => 1, 
    '2' => 2, 
    '3' => 3 
    ], 
    [ 
    'id' => 2, 
    'name' => 'name2', 
    '1' => 1, 
    '2' => 2, 
    '3' => 3 
    ] 
]; 
// Create the input fields: 
foreach($array as $key1) 
{ 
    echo $key1["name"] . "<br />"; 

    foreach($key1 as $key => $value) 
    { 
     if ($key != "id" AND $key != "name") 
     { 
      echo $key. 
      ' <input type="text" name="farray[' . $key1['id'] . ']['.$key.']" value="'.$value.'"><br /><br />'; 
     }  
    } 
} 
?> 
<button type="submit">Submit</button> 
</form> 

<pre> 
<?php 
if(isset($_POST['farray'])) 
{ 
    print_r($_POST); 

    foreach($_POST['farray'] as $id => $values) 
    { 
    foreach($values as $k => $v) 
    { 
     echo('UPDATE database SET ' . $k . ' = "' . $v . '"' . ' WHERE id = ' . $id) . '<br />'; 
    } 
    } 
} 
?> 
</pre> 

私はこれをテストしました、そして、あなたが期待するように動作すると思います。

関連する問題