无法保存表单的多个值[重复]
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】:在开始之前您需要研究几个问题:
-
左侧参数正常工作,所以你的表单方法等很好。请确认您的右侧在
<form>
标签内。如果不是,当然,那里的字段将不会随请求一起发送。
右侧没有可用的输入:
您需要将项目文本与输入相关联。现在,它只是打印到 DOM。考虑:<input type='hidden' name='itemname[]' value='<?php echo $row['prodname']; ?>'/>
这会将名称放入索引数组中。
在数量方面,使用类似的name=quantity[]
。方括号是给你数组的东西。没有括号,您将永远无法单独保存它们。
当你在请求端处理它时,你可以用类似的东西把它拼凑起来:
$i = 0;
while($i < count($itemname))
$name = $itemname[$i];
$quant = $quantity[$i];
$i++;
这是粗略的代码 - 保证不会复制粘贴安全
【讨论】:
右侧肯定在<form>
标签内?
是的,我也用表单标签更新了帖子
这个页面有链接吗?
如果更新的代码来自您的工作文档,您需要将输入更改为<input type="text" name="quantity[]" />
,以便您的脚本可以使用所有数量字段。
它是你给的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,但是如果您查看源代码,它会以更清晰的方式排列。
您应该始终一点一点地测试您的代码,以了解其形成的内容。进行调试也非常适合诊断此类问题。
希望这会有所帮助!
【讨论】:
以上是关于无法保存表单的多个值[重复]的主要内容,如果未能解决你的问题,请参考以下文章