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

好的,我发现了错误。我替换这一行:

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 的值分配给每个表单:

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 回答