好的,我的问题是这样的:
我有一个要求姓名,姓氏和城市的表格。用户单击“提交”,然后信息将显示在此表中:
<p>You entered the following data:</p>
<form action="1.php" method="post">
<input type="hidden" name="action" value="update">
<input type="hidden" name="city" value="<?php echo $user->get_city(); ?>">
<table>
<tr>
<th>First Name:</th>
<td><?php echo $user->get_fname(); ?></td>
<td><input type="button" id="edit_fname" value="Edit"></td>
<td><input type="text" id="fname" name="fname" size="20"></td>
<td><input type="hidden" id="valf" name="val" value="fname">
<input type="hidden" id="lnf" name="lname" value="<?php echo $user->get_lname(); ?>">
<input type="submit" id="subfn" value="Submit"></td>
</tr>
<tr>
<th>Last Name:</th>
<td><?php echo $user->get_lname(); ?></td>
<td><input type="button" id="edit_lname" value="Edit"></td>
<td><input type="text" id="lname" name="lname" size="20"></td>
<td><input type="hidden" id="vall" name="val" value="lname">
<input type="hidden" id="fnf" name="fname" value="<?php echo $user->get_fname(); ?>">
<input type="submit" id="subln" value="Submit"></td>
</tr>
<tr>
<th align="right">City:</th>
<td><?php echo $user->get_city(); ?></td>
<td> </td>
</tr>
</table>
</form>
因此,当用户单击编辑按钮时,会显示一个文本框和一个提交按钮,并且根据它是名字编辑还是姓氏编辑,我有正确的隐藏值与表单一起发送。唯一的问题是,无论如何,即使您单击第一个名称字段的“提交”按钮,隐藏的输入“val”也会设置为“lname”。
这是jquery:
$().ready = function() {
$('#fname').hide();
$('#lname').hide();
$('#subfn').hide(); // submit button for first name
$('#subln').hide(); // submit button for last name
$('#valf').hide(); // hidden value for fname so we know to post lname
$('#vall').hide(); // hidden value for lname so we know to post fname
$('#lnf').hide(); // hidden value to post last name when first name edit submit
$('#fnf').hide(); // hidden value to post first name when last name edit submit
$("#edit_fname").click(function() {
$('#fname').show();
$('#subfn').show();
$('#valf').show();
$('#lnf').show();
if ($('#lname').show) { // if last name edit is showing, hide it
$('#lname').hide();
$('#subln').hide();
$('#vall').hide();
$('#fnf').hide();
}
});
$("#edit_lname").click(function() {
$('#lname').show();
$('#subln').show();
$('#vall').show();
$('#fnf').show();
if ($('#fname').show()) { // if first name edit is showing, hide it
$('#fname').hide();
$('#subfn').hide();
$('#valf').hide();
$('#lnf').hide();
}
});
}();
这是用于点击“提交”按钮并将“操作”更改为“更新”的PHP:
case 'update':
$val = $_POST['val'];
if ($val == 'fname') {
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$city = $_POST['city'];
$user = new User($fname, $lname, $city);
break;
}
else if ($val == 'lname') {
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$city = $_POST['city'];
$user = new User($fname, $lname, $city);
break;
}
我测试过看看$ val是什么,无论如何它似乎都被卡在'lname'上。所以,我认为我的jQuery代码存在问题,或者问题是无论发生了什么,都应该发送姓氏'val'值,这不应该是因为我将ID隐藏起来单击名字按钮。
这是帮助我学习OOP的所有实验。显然这根本不是生产代码。我目前是我的应用科学学士学位的一年级学生,还有很多年,直到我获得计算机科学学士学位。这甚至不是课程的一部分......我只是觉得无聊而且非常喜欢编程。
那么,想想有人可以提供帮助吗?抱歉这么长的帖子!
答案 0 :(得分:2)
这就是原因。请参阅以下两行代码
<td><input type="hidden" id="valf" name="val" value="fname">
.....
<td><input type="hidden" id="vall" name="val" value="lname">
首先使用值fname定义名为 val 的隐藏字段,然后使用值lname。即使你给他们不同的ID,他们的名字仍然是相同的。你的jquery代码中没有任何地方你改变 val 的值,这就是为什么它总是 lname 。
你必须根据你的逻辑改变那个值。您可以使用以下jQuery选择器
$("input[type='hidden'][name='val']")
修改强>
所以不是这个
$('#valf').show();
你可以写
$("input[type='hidden'][name='val']").val("fname");
而不是这个
$('#vall').show();
你可以写
$("input[type='hidden'][name='val']").val("lname");
答案 1 :(得分:1)
您在同一表单中有两个不同的字段name="val"
。 PHP按顺序读取每一个,第二个值blobbers(覆盖)第一个,只留下$_GET
数组元素中的最后一个值。
您可以通过在其末尾指定带有[]
的变量名称,以相同的名称提交多个值。这告诉PHP它是一个数组元素,就像在普通代码中使用$array[] = "new element";
向数组中添加一个元素一样。
即使使用数组语法也无法帮助您,因为每次提交表单时都会将这两个值传递给服务器。如果您只想提交一个部分或另一部分,那么它们需要是单独的表格。