【问题标题】:not able to save multiple values of form [duplicate]无法保存表单的多个值[重复]
【发布时间】:2015-12-03 14:59:42
【问题描述】:

我有一个表格,我需要从该表格中获取用户的 i/p。表格分为左右两部分

在左侧,值将从用户那里获取,就像任何正常的形式一样 右侧部分将具有从数据库动态生成的项目列表,每个项目还将具有 + 按钮,用于添加放置在其前面的特定产品的数量 视图如下

如您所见,整个页面有一个提交按钮,所以我希望用户填写整个页面(填写左侧字段,右侧输入任意数量产品的数量),然后单击提交按钮将整个值保存在数据库中。

<form method="post" action"save.php">
<!--Front end code for left part-->
    <label>Name:</label>
        <input type="text" name="name" value="" />
    </div>

    <div class="span3" style="margin-left:-10px;">
        <label>Number:</label>
        <input type="text" name="number" value="" />
    </div>

    <div class="span6">
        <div class="span3" >
        <label>Address:</label>
        <textarea name="address"></textarea>
        </div>
    </div>


<!--Front end code for right part-->

    <table class="table table-striped table-bordered">
        <tbody>
        <?php
            $sql=" SELECT * from menu";
            $result = mysqli_query($con, $sql);
            if(mysqli_num_rows($result)>0)
                {
                    while($row = mysqli_fetch_assoc($result))
                    {?>
                        <tr>
                            <td> <? echo $row['dish']; ?></td>
                            <td class="td-actions">
                                <input type="text" name="quantity[]" />
                                <input type='hidden' name='itemname[]' value='<?php echo $row['dish']; ?>'/>

                                Add
                            </td>
                        </tr>
                  <?}
                }?>
        </tbody>
    </table>
<button name="submit" value="submit" >Submit</button>
</form>

我可以通过这段代码保存左侧的值

$name = mysqli_real_escape_string($con, $_POST['name']);
$number = mysqli_real_escape_string($con, $_POST['number']);
$address = mysqli_real_escape_string($con, $_POST['address']);

$sql= "INSERT INTO cart (name,number, address) VALUES ('$name','$number','$address')";
if(!mysqli_query($con,$sql))
    {
        echo "Error: " . $sql . "<br>" . mysqli_error($con);
    }

但我无法一键存储整个页面的值,谁能告诉我如何做到这一点

【问题讨论】:

    标签: javascript php jquery html forms


    【解决方案1】:

    在开始之前您需要研究几个问题:

    1. 左侧参数正常工作,所以你的表单方法等很好。请确认您的右侧在&lt;form&gt; 标签内。如果不是,当然,那里的字段将不会随请求一起发送。
    2. 右侧没有可用的输入:
      • 您需要将项目文本与输入相关联。现在,它只是打印到 DOM。考虑:
        &lt;input type='hidden' name='itemname[]' value='&lt;?php echo $row['prodname']; ?&gt;'/&gt;
        这会将名称放入索引数组中。
      • 在数量方面,使用类似的name=quantity[]。方括号是给你数组的东西。没有括号,您将永远无法单独保存它们。
      • 当你在请求端处理它时,你可以用类似的东西把它拼凑起来:
        $i = 0; while($i < count($itemname)){ $name = $itemname[$i]; $quant = $quantity[$i]; $i++; } 这是粗略的代码 - 保证不会复制粘贴安全

    【讨论】:

    • 右侧肯定&lt;form&gt;标签内?
    • 是的,我也用表单标签更新了帖子
    • 这个页面有链接吗?
    • 如果更新的代码来自您的工作文档,您需要将输入更改为&lt;input type="text" name="quantity[]" /&gt;,以便您的脚本可以使用所有数量字段。
    • 它是你给的while循环,我得到了那些我还没有添加数量的产品的值,但我只需要那些已经添加数量的产品
    【解决方案2】:

    是的,为此您必须为左侧部分创建 2 个功能,另一个用于您的右侧部分,因为您可以保存左侧部分的数据,名称、地址等类似地为右侧部分创建更新功能

    fucntion update()
    {
        $new = $_POST['update_qty']  // or use a count variable for quantity update 
        $sql = "UPDATE TABLE_NAME SET num_of_widgets = :$new (or $count) WHERE username = :_SESSION['username'] ";
        $st= $conn->prepare($sql);
        $st->bindValue(":username",$_SESSION['username'],PDO::PARAM_STR);
        $st->bindValue(":new",$_SESSION['$new'],PDO::PARAM_STR);
        $st->execute();
        $row = $st->fetch();
        foreach($row as $update_qty)
          {
             echo "update_qty['quantity']";
           }
    

    现在使用........

    if(isset($_POST['submit']))
       { 
         update();
        }
    

    【讨论】:

      【解决方案3】:

      修改右边部分的代码如下

        <input type="text" name="quantity[]" />
      

      现在您将能够以数组的形式获取数量,并且可以迭代该数组并一一保存。

      【讨论】:

      • 我将数量作为数组,但是我将如何将数量与产品匹配,如果用户在第 2 和第 4 个产品前面输入数量,那么我们将如何在数组中区分哪个数量是用于什么产品??
      • 以产品也为数组,数量[0]属于产品[0]。
      • 我也将那些数量未添加的产品放入数组中,而我希望只存储那些数量已给定的产品
      • 你可以从服务器端做,只要检查数量是否为0然后插入
      【解决方案4】:

      1) 通过 js 或 jquery 创建一个对象并在更新时更改您的值(单击添加按钮)

      2) 当用户单击提交按钮时,您应该通过 Ajax 方法(通过 js 或 jquery)将对象传递给外部 php 文件

      3) 在获取该对象并将其保存到变量后的 php 文件中,您应该使用 json_decode() 函数将其解码为数组

      4)现在您可以将它们中的每一个插入到您的数据库中

      【讨论】:

        【解决方案5】:

        更改此代码:

        <input type="text" name="quantity[]">
        

        使用这个 [],您将获得数组中的所有数量。

        【讨论】:

          【解决方案6】:

          一个好的做法是用户 print_r();看看你的帖子数组是什么样子的。

          打印($_POST);

          这应该让您了解发布的内容和未发布的内容,或者以您未曾预料到的方式发布内容。

          在这种情况下,我会做以下事情

          <?
          print_r($_POST);
          ?>
          
          <form action='' method='post'>
              <table>
                  <lable>Firstname: </lable>
                  <input type='text' name='firstname' value=''> </input>
                  <lable>Lastname: </lable>
              <input type='text' name='lastname' value=''> </input>
          </table>
          
          <table>
              <lable>Items: </lable>
              <input type='number' name='Items[]' value=''> </input>
          </table>
          
          <input type='submit'> </input>
          </form>
          

          您可以在页面顶部放置 print_r($_POST);这是“漂亮的打印”,只是在显示视图中它可能显示为一个blob,但是如果您查看源代码,它会以更清晰的方式排列。

          您应该始终一点一点地测试您的代码,以了解其形成的内容。进行调试也非常适合诊断此类问题。

          希望这会有所帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-08-16
            • 2021-04-26
            • 2019-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多