0

データベースからの動的行があります。各行には順序フィールドがあります。各行の横に表示されるテキスト ボックスに順序を入力して、ユーザーが順序を変更できるようにしたいと考えています。ユーザーが [保存] をクリックすると、各行が新しい順序で更新されます。

私の問題は、このコードを書いたときです:

    <table>
    <?
    foreach($results as $p)
    {
        echo '
            <tr>
            <td>'.$p['page_title'].'</td>
            <td><input type="text" size="2" id="'.$p['page_id'].'" name="s[]" value="'.$p['menu_order'].'"></td>
        </tr>';
    }
    ?>
    <tr><td colspan="2"><input type="submit" value="Save Order"></td></tr>
    </table>

フォームを投稿した後、すべてのダイナミック テキスト ボックスが新しい順序を与えることがわかりますが、質問は、この順序をどの行に知ることができるかです。

画像で詳しく説明します。[保存] をクリックすると、s配列は次のようになります。

配列 ( [0] => 2 1 => 3 [2] => 1 )

しかし、更新したいページがわからない!! ここに画像の説明を入力

4

1 に答える 1

2

あなたが求めているのは、割り当てられた番号でフィールドを並べ替える方法だと思います。それが目的であり、MySQL を使用してこのデータを保存している場合は、その順序で取得できます。例えば:

SELECT * FROM mytable ORDER BY menu_order ASC

編集:あなたの質問を読み直したので、その順序を各行に割り当てる方法も尋ねているかもしれません。フィールドに名前が付けられていることに気付きました。s[]名前を付けて$p['page_id']、それに応じて更新できます。

 <?
    foreach($results as $p)
    {
        echo '
            <tr>
            <td>'.$p['page_title'].'</td>
            <td><input type="text" size="2" id="'.$p['page_id'].'" name="s['.$p['page_id'].']" value="'.$p['menu_order'].'"></td>
        </tr>';
    }
    ?>

その後

foreach($_POST['s'] as $key => $value) {
    // Update each $key with $value
    // Where $key is the ID and $value is the order
}
于 2012-06-22T07:02:32.650 に答える