2012-03-10 12 views
-2

私はphpフォームから来るデータでデータベースを更新するために作成した次のコードを持っています。 $_POST['variables']は異なる配列です。 私が抱えている問題は、$updaterフィールドステータスとフィールド表示値が正しい順序でない場合です。たとえば、チェックボックス3をチェックすると、結果の最初の行で有効になっている値が返されます。任意の提案は、あなたがHTMLでそれを強制しない限り、あなたは、所望の順序であなたの配列を取得する保証はありませんフォームから来るデータを更新するためのループphp mysql html

//update data 

$priority = $_POST['priority']; // this will be an array 
$enable = $_POST['enable']; 
$height = $_POST['height']; 
$position = $_POST['position']; 
$widgetid = $_POST['widgetid']; 
$display = $_POST['display']; 

$i = -1; 
foreach($priority as $priori) 
{ 
    ++$i; 
    $row_enable = $enable[$i]; 
    $row_height = $height[$i]; 
    $row_prio = $priority[$i]; 
    $positio = $position[$i]; 
    $disp  = $display[$i]; 
    $widgeti = $widgetid[$i]; 

    if (isset($enable[$i])) 
     $enables ="y"; 
    else 
     $enables ="n"; 

    if (isset($display[$i])) 
     $displ = "y"; 
    else 
     $displ = "n"; 

    //DO THIS FOR THE REST AND THEN YOUR UPDATE QUERY 
    $updater = "UPDATE hpoptions SET position='$positio', height='$row_height', status='$enables', display='$displ', priority='$row_prio' WHERE userid='$ud' and widgetid='$widgeti'"; 

    echo $updater."<br>"; 

} // ends here 

enter image description here

答えて

2

ありがとう役立つだろう。

<input type="text" name="position[]"> 
<input type="text" name="height[]"> ... 
<input type="hidden" name="widgetid[]" value="w1"> 
    ... 
<input type="text" name="position[]"> 
<input type="text" name="height[]"> ... 
<input type="hidden" name="widgetid[]" value="w2"> 
    ... 

フィールド名にエンコードされた配列に余分なディメンションを追加する必要があります。各フィールドグループに固有のIDが必要です。私はあなたのwidgetidがまさにそうだと思いますよね?だから、行うことができます:IDは、すべてのフィールド名にエンコードされますので、あなたも、もうwidgetidというフィールドを必要としない

<input type="text" name="data[w1][position]"> 
<input type="text" name="data[w1][height]"> ... 
... 
<input type="text" name="data[w2][position]"> 
<input type="text" name="data[w2][height]"> ... 
... 

お知らせ。 PHPでは、結果をループするためにこれを行います:

foreach($_POST['data'] as $widgetid => $data) { 
    // Make sure to check if the values won't make your SQL query vulnerable to injection! 
    // http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain 
    $widgetid = mysql_real_escape_string($widgetid); 
    $position = is_numeric($data['position']) ? $data['position'] : 0; 
    // ... 
    // Build your update query here 
} 
+0

EDIT:最初のバージョンが間違っていました。 – bfavaretto

+0

今、それを試していただきありがとうございます。フォームフィールドはmysqlから生成されています...私はw1 w2などの名前をつけることはできません... – cppit

+0

エイリアスを使用して名前を付けることができます。 –

関連する問題