Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php html动态表单,通过post和insert mysql传递多个值_Php_Mysql_Post_Foreach_Form Submit - Fatal编程技术网

Php html动态表单,通过post和insert mysql传递多个值

Php html动态表单,通过post和insert mysql传递多个值,php,mysql,post,foreach,form-submit,Php,Mysql,Post,Foreach,Form Submit,我有这个数据库 这个表单是从数据库动态生成的 <table border="1" cellspacing="0" cellpadding="6"> <tr bgcolor="#CCCCCC"> <td><strong>product id</strong></td> <td><strong>product name</strong></td

我有这个数据库

这个表单是从数据库动态生成的

<table border="1" cellspacing="0" cellpadding="6">
      <tr bgcolor="#CCCCCC">
        <td><strong>product id</strong></td>
        <td><strong>product name</strong></td>
        <td><strong>product price</strong></td>
        <td><strong>quantity</strong></td>
      </tr>

    <form method="post" action="insert.php">

    <?php

        $query = $dbh->query('SELECT * FROM products');
        $results = $query->fetchAll(PDO::FETCH_ASSOC);

        foreach ($results as $row)
        {

    ?>

    <tr>
        <td><?php echo $row['product_id']; ?></td>
        <td><?php echo $row['product_name']; ?></td>
        <td><?php echo $row['product_price']; ?></td>
        <td><input name="quantity" type="text" value="0"></td>
    </tr>
    </form>

    <?php } ?>

    </table>
    <br>
    <input type="submit" value="Add Records">

产品id
产品名称
产品价格
数量

表单中的数量是一个文本框,因此我可以修改它。 我想输入数量并按下按钮在order_products表中插入值(包括数量)

1) 如何通过post将所有数量和产品id(以及其他)传递到下一页?(直到现在我才知道如何传递单个值)

2) 有没有更好的方法来实现它

3) insert语句应该在同一页中,还是在我获取post变量的页面中

db方案

谢谢

Rob

1)首先,您必须将
封装在一个表单中(将
标记移动到
之后,现在的方式是在第一次迭代时关闭
标记),然后通过HTTP POST方法提交。然后,根据您的模式,除了
数量
之外,您必须插入的唯一字段是
产品id
,您可以在隐藏字段内指定该值,如:

<?php
echo "<input type='hidden' name='pid_$row['product_id']' value='$row['product_id']'>";
echo $row['product_id'];
?>
2)这取决于您的发展重点。有一些框架可以简化您的流程。我建议您将所有DB查询和连接数据保存在一个DB helper类中,并在需要时
require
it


3)既然您使用的是PDO,我假设您有一个OOP设计,这意味着在DB helper类中这样做。接收HTTP请求的页面必须
要求
您的助手并处理
$\u POST
对其查询方法的参数进行解析。别忘了。

我建议将产品id放在一个隐藏的表单元素中,如下所示:

<tr>
    <input type='hidden' name='product_id' value='<?php echo $row['product_id']; ?>'/>

    <td><?php echo $row['product_id']; ?></td>
    <td><?php echo $row['product_name']; ?></td>
    <td><?php echo $row['product_price']; ?></td>
    <td><input name="quantity" type="text" value="0"></td>
</tr>

然后,在插入代码中,您必须查找$\u POST中键以“quantity”开头的所有项目,如果这些项目不为零,则在键前缀“quantity”后获取整数NNN,并获取相应的产品id NNN值以进行插入。

使用隐藏元素,您可以将数据发布到第二页。使用计数器变量,您可以添加动态表单元素并将其发布到第二页

<form method="post" action="test2.php">
<table border="1" cellspacing="0" cellpadding="6">
    <tr bgcolor="#CCCCCC">
        <td><strong>product id</strong></td>
        <td><strong>product name</strong></td>
        <td><strong>product price</strong></td>
        <td><strong>quantity</strong></td>
    </tr>

    <?php
    $query = $con->query('SELECT * FROM product'); //your query goes here
    $results = $query->fetchAll(PDO::FETCH_ASSOC);
    $i=0; //counter variable
    foreach ($results as $row)
    {
        ?>
        <tr>
            <td>
                <?php echo $row['prod_id']; ?>
                <input type="hidden" name="prod_id<?php echo $i; ?>" value="<?php echo $row['prod_id']; ?>" />
            </td>
            <td>
                <?php echo $row['prodname']; ?>
                <input type="hidden" name="name<?php echo $i; ?>" value="<?php echo $row['prodname']; ?>" />
            </td>
            <td>
                <?php echo $row['price']; ?>
                <input type="hidden" name="price<?php echo $i; ?>" value="<?php echo $row['price']; ?>" />
            </td>
            <td><input name="quantity<?php echo $i; ?>" type="text" value="0"></td>
        </tr>
        <?php 
        $i++; //increment counter variable
    } 
    ?>
    <input type="hidden" name="rows" id="rows" value="<?php echo $i; ?>" />
</table>
<br>
<input type="submit" value="Add Records">
</form>

产品id
产品名称
产品价格
数量

第二点和第三点很清楚。关于第1点)我知道我必须更改名称(quantity1、quantity2等),但我的问题是如何将所有这些值传递到post以及插入到数据库后。如果您的值被分配到隐藏字段,则您的
$\u post
将与
数量
字段一起接收它们!然后,在action php页面上,您所要做的就是迭代
$\u POST
,并将其值作为绑定参数传递给您准备好的语句(我假设您知道如何做,如果不知道,将对此进行研究,因为它在php.net和其他教程站点上有很好的文档记录)在DB Helper上构建一个函数,该函数使用提供的值数组作为参数来准备INSERT语句。搜索
绑定参数
,它将出现在您的面前。您的代码易受SQL注入攻击。此外,OP希望插入到order_产品中,而不是产品中。若用户试图使用恶意sql字符串通过http post外部输入验证,则可能会使其数据库崩溃。
$i = 1;
foreach ($results as $row)
{
    $product_id_name = 'product_id_'.$i;
    $quantity_name = 'quantity_'.$i;

    ... echo your table row, using $product_id_name in the hidden element, and $quantity_name in your text input

    $i++;
}
<form method="post" action="test2.php">
<table border="1" cellspacing="0" cellpadding="6">
    <tr bgcolor="#CCCCCC">
        <td><strong>product id</strong></td>
        <td><strong>product name</strong></td>
        <td><strong>product price</strong></td>
        <td><strong>quantity</strong></td>
    </tr>

    <?php
    $query = $con->query('SELECT * FROM product'); //your query goes here
    $results = $query->fetchAll(PDO::FETCH_ASSOC);
    $i=0; //counter variable
    foreach ($results as $row)
    {
        ?>
        <tr>
            <td>
                <?php echo $row['prod_id']; ?>
                <input type="hidden" name="prod_id<?php echo $i; ?>" value="<?php echo $row['prod_id']; ?>" />
            </td>
            <td>
                <?php echo $row['prodname']; ?>
                <input type="hidden" name="name<?php echo $i; ?>" value="<?php echo $row['prodname']; ?>" />
            </td>
            <td>
                <?php echo $row['price']; ?>
                <input type="hidden" name="price<?php echo $i; ?>" value="<?php echo $row['price']; ?>" />
            </td>
            <td><input name="quantity<?php echo $i; ?>" type="text" value="0"></td>
        </tr>
        <?php 
        $i++; //increment counter variable
    } 
    ?>
    <input type="hidden" name="rows" id="rows" value="<?php echo $i; ?>" />
</table>
<br>
<input type="submit" value="Add Records">
</form>
for($i=0;$i<=$_POST['rows'];$i++)
{
    $prodid = $_POST['prod_id'.$i];
    $pname = $_POST['name'.$i];
    $pprice = $_POST['price'.$i];

    $con ->exec("insert into product(prod_id,prodname,price)values('$prodid', '$pname','$pprice' )" );

}