无法保存表单的多个值[重复]

Posted

技术标签:

【中文标题】无法保存表单的多个值[重复]【英文标题】: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);
    

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

【问题讨论】:

【参考方案1】:

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

    左侧参数正常工作,所以你的表单方法等很好。请确认您的右侧在&lt;form&gt; 标签内。如果不是,当然,那里的字段将不会随请求一起发送。 右侧没有可用的输入: 您需要将项目文本与输入相关联。现在,它只是打印到 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,但是如果您查看源代码,它会以更清晰的方式排列。

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

希望这会有所帮助!

【讨论】:

以上是关于无法保存表单的多个值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用php保存html表单时出现错误未定义变量和所有值在sql db中保存为0 [重复]

如何在表单域中保存和恢复多个值(仅使用前端逻辑)

将表单数据传递给.NET中的多个操作[重复]

jquery表单插件将重复条目保存到mysql表

在 Web SQL 数据库中保存表单值

sharepoint 服务器此时无法保存表单。请再试一次