1

这是我上一期的延续。我使代码变得简单,并且怀疑问题在于第二个表单提交。

这是代码结构:

  1. 一个表格(form1) 有两个输入字段的名称和地点
  2. 提交表单后,(并且仅当用户在两个字段中输入数据时)创建另一个表单(form2),其中text area显示php echo来自上一个表单和另外两个提交按钮
  3. 实际上,我使用第二个表单的提交按钮进行文本保存和电子邮件(这里我只是用一个简单的 textarea 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提交工作正常。它将使用另外两个提交按钮submit1submit2. 但是当我使用这两个按钮提交第二个表单时form2,表单没有正确提交,它只是用初始代码刷新了 html。

我的要求是当我按下第二个表单提交按钮时,它必须在将第一个表单 textarea 保持在其位置之后再次回显来自 textarea 的输出。

PHP 小提琴:

我已经设置了一个 php fiddle 来了解问题PHP FIDDLE MAIN PHP FIDDLE执行结果-

4

2 回答 2

1

您的if情况仅包含第一种形式。将您的if条件替换为

if(!empty($_POST['myname']) && !empty($_POST['myplace']) || !empty($_POST['output_textarea']))

像这样保存 form1 数据hidden input

<form id="form2" name="form2" action="" method="post">

   .....
   <input type="hidden" name="myname" value="$myname" />
   <input type="hidden" name="myplace" value="$myplace" />
</form>
于 2013-08-22T14:33:16.287 回答
1

您需要测试提交了哪个表单。最好通过检查提交字段而不是输入字段来做到这一点。

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 与隐藏字段无关。

于 2013-08-22T14:39:07.823 回答