3

他のフォーム (フォーム内、動的) を含むフォームを渡そうとしましたが、「スクリプト ハンドラー」(php) に送信されたデータが不完全なデータであることを確認しました。どこかでバッファが上書きされているか何かだと思います。コードは次のとおりです。

<?php
if(isset($_POST['submit_num']))
{
    $number=$_POST['sky'];

    if($number== 0)
    {
        header('Location: /ceid_coffee/user_order_form.php');
    }
    else
    {   
        $_SESSION['number'] = $number;
        echo '<form action="user_order_form.php" method="POST">'; 
        for($i=0;$i<$number;$i++)
        {
                $item = $_SESSION['item'];

                echo $item;
                $rec_query = "SELECT * FROM ylika";
                $rec_result= mysql_query($rec_query) or die("my eroors");
                while($row_rec = mysql_fetch_array($rec_result))
                {
                    echo '<br>';    
                    echo '<input type="checkbox" name="yliko[][$i]" value='.$row_rec['onoma'].'> '.$row_rec['onoma'].'';//<~~~~this line is form's data
                }
                echo '<br>';


        }
        echo '<input type="submit" name="submit" value="FINAL_ORDER">';

        echo '</form>';
    }
}

?>

そして、これは処理スクリプトです:

<?php
if (isset($_POST['submit']))
{   
    $number= $_SESSION['number'];
    $item = $_SESSION['item'];
    $max_id = "SELECT MAX(id_order) FROM id_of_orders";
    $x=mysql_query($max_id) or die("my eroors");
    $id= mysql_fetch_array($x);
    $xyz = $id['MAX(id_order)'];
    for($i=0;$i<$number;$i++)
    {
        $temp = $_POST['yliko'][$i]; // <~~~~ this line is the form's data
        $temp2 = implode("," , $temp);
        $inserts = ("INSERT INTO orders (order_id,product,ulika) VALUES ('$xyz' , '$item','$temp2')");
        $inc_prod=("UPDATE proion SET Counter = Counter + 1 WHERE proion.onomasia='$item'");
        mysql_query($inserts) or die(mysql_error());
        mysql_query($inc_prod) or die(mysql_error());
    }
}
?>

この行には各フォームのデータが含まれていますが、それらをエコー ($temp2) したところ、それらが不完全であることがわかりました。$temp = $_POST['yliko'][$i];

各項目 ($i) に対して複数のチェックボックスを選択すると、チェックボックスから 1 つの値のみが SQL に取得されます。私が何か見逃しているかどうかわかりますか?

4

2 に答える 2

1

OK、エラーが見つかりました。この行を置き換えます:

echo '<input type="checkbox" name="yliko[][$i]" value='.$row_rec['onoma'].'> '.$row_rec['onoma'].'';//<~~~~this line is form's data

この行で:

echo '<input type="checkbox" name="yliko['.$i.'][]" value='.$row_rec['onoma'].'> '.$row_rec['onoma'].'';

方法はわかりませんが(私はphpが初めてです)、うまくいきました。

于 2013-08-11T09:01:22.557 に答える
-1

$i の値を各フォームに割り当てているため、フォームごとに 1 つの値しか得られません。

echo '<input type="checkbox" name="yliko[][$i]" value='.  etc.

あなたの問題行です。

コードが生成する HTML (ほとんどのブラウザーでは ctrl-u) を見てみると、間違った答えが得られる理由がわかります。すべてのチェックボックスに一意の名前を付ける必要があります。

各チェックボックスに、それらが描画されたデータベースの行に関連する名前を割り当てることでそれを行います。

name="checkbox_"'.$row['ylikaprimarykey']."etc.

これにより、かなり迅速に起動して実行できます。テーブル キーの ID は攻撃者にサイトに関する情報を提供する可能性があるため、なんらかの方法でそれらを難読化することをお勧めします。ネット上には、これを行う無料の優れたクラスが多数あります。

各フォームに個別のデータチャンクとしてあったものを本当に処理する必要がある場合は、次のようにチェックボックスの名前を簡単に変更できます。

name="checkbox_$formnumber_$obfuscatedkeynumber"

次に、処理ページでネストされたループを使用してそれらをループします。

于 2013-08-11T00:02:25.753 に答える