这是我上一期的延续。我把代码做得很简单,怀疑问题出在提交第二张表格上。
这是代码结构:
- 一个表单
(form1
),有两个输入字段用于名称和地点 - 表单提交后,(仅当在两个字段中,用户输入数据时)创建另一个具有
text area
的表单(form2)
,以显示上一个表单的php echo
和另外两个提交按钮 - 实际上,我使用第二个表单的提交按钮来保存文本和发送电子邮件(在这里,我只是用一个简单的文本区域回声来代替它,使它变得简单)
代码:
<html>
<body>
<div class="emcsaninfo-symcli-main">
<form id="form1" name="form1" action=" " method="post" >
<div class="input">Your Name</div>
<div class="response"><span><input class="textbox" id="myname" name="myname" type="text" value="" /></span> </div>
<div class="input">Your Place</div>
<div class="response"><span><input class="textbox" id="myplace" name="myplace" type="text" value="" /></span> </div>
<div class="submit">
<input id="first_submit" type="submit" name="first_submit" value="first_submit" />
</div>
</form>
<?php
if(!empty($_POST['myname']) && !empty($_POST['myplace']) )
{
$myname = $_POST['myname'];
$myplace = $_POST['myplace'];
?>
<form id="form2" name="form2" action=" " method="post" >
<textarea onclick="this.select()" name="output_textarea" id="output_textarea" cols="100" rows="25" readonly>
<?php
echo "My name is $myname and I am from $myplace";
?>
</textarea>
<input id="submit1" type="submit" name="name_field" value="submit1" />
<input id="submit2" type="submit" name="place_field" value="submit2" />
</form>
<?php
function name()
{
echo $_POST["output_textarea"];
}
if(isset($_POST['name_field']))
{
name();
}
function place()
{
echo $_POST["output_textarea"];
}
if(isset($_POST['place_field']))
{
place();
}
}
?>
</div>
</html>
</body>
问题:form1
提交的第一个表单运行良好。它将使用另外两个提交按钮submit1
和submit2
创建输出文本区域。但是,当我使用这两个按钮提交第二个表单form2
时,表单没有正确提交,它只是用初始代码刷新html。
我的要求是,当我按下第二个表单提交按钮时,它必须在保持第一个表单文本区域的位置后,再次回显文本区域的输出。
PHP FIDDLE:
我已经设置了一个php fiddle来理解这个问题php fiddle MAINPHP FIDDLE执行结果-
您需要测试提交的表单。最好检查提交字段而不是输入字段。
if(isset($_POST['first_submit'])) )
{
// Do stuff with first form
}
if (isset($_POST['submit1'], $_POST['submit2']))
{
// Do stuff with second form
}
要保持表单值的填写状态,可以使用post值进行填写。在第一种形式中,将输入更改为:
<input class="textbox" id="myname" name="myname" type="text" value="<?php if(isset($_POST['myname']) echo $_POST['myname']; ?>" />
在第二种形式中,添加复制值的隐藏输入:
<input id="myname_hidden" name="myname" type="hidden" value="<?php if(isset($_POST['myname']) echo $_POST['myname']; ?>" />
注意,我更改了ID,添加了_hidden
,因为不能有两个具有相同ID的元素。我删除了类,因为CSS与隐藏字段无关。
您的if
条件只包含第一个形式。用替换if
条件
if(!empty($_POST['myname']) && !empty($_POST['myplace']) || !empty($_POST['output_textarea']))
用hidden input
保存form1数据,如下所示:
<form id="form2" name="form2" action="" method="post">
.....
<input type="hidden" name="myname" value="$myname" />
<input type="hidden" name="myplace" value="$myplace" />
</form>