PHP验证外部文件中的输入时,如何防止表单重置值
我有(简化)一个这样的表格:PHP验证外部文件中的输入时,如何防止表单重置值,php,html,Php,Html,我有(简化)一个这样的表格: <form method="post" action="file.php"> <input name="test"> <button>Send</button> </form> <?php session_start(); if(isset($_SESSION['error'])){ echo '<p>'.$_SESSION['error
<form method="post" action="file.php">
<input name="test">
<button>Send</button>
</form>
<?php
session_start();
if(isset($_SESSION['error'])){
echo '<p>'.$_SESSION['error'].'</p>';
unset($_SESSION['error']);
}
?>
但是,当我单击带有空字段的“发送”时,会显示错误,但表单已清除。有没有办法解决这个问题?将$val
(或整个$\u POST
,视情况而定)添加到您的$\u会话中
,如果会话数据在第1页,则以编程方式添加值
因此file.php成为
session_start();
$val = $_POST['test'];
if(!isset($val) || strlen($val) == 0 || empty($val)){
$_SESSION['error'] = 'The "test" field cannot be empty.';
}
$_SESSION['priorPost']=$_POST; // note this change
header("Location: {$_SERVER['HTTP_REFERER']}");
而page1变成这样-
<?php
session_start();
if(isset($_SESSION['error'])){
echo '<p>'.$_SESSION['error'].'</p>';
unset($_SESSION['error']);
}
?>
<form method="post" action="file.php">
<input <?php if(isset($_SESSION['priorPost']['test'])){print("value='".$_SESSION['priorPost']['test']."'");} ?> name="test">
<button>Send</button>
</form>
将$val
(或整个$\u POST
视情况而定)添加到您的$\u会话中
,如果会话数据位于第1页,则以编程方式添加值
因此file.php成为
session_start();
$val = $_POST['test'];
if(!isset($val) || strlen($val) == 0 || empty($val)){
$_SESSION['error'] = 'The "test" field cannot be empty.';
}
$_SESSION['priorPost']=$_POST; // note this change
header("Location: {$_SERVER['HTTP_REFERER']}");
而page1变成这样-
<?php
session_start();
if(isset($_SESSION['error'])){
echo '<p>'.$_SESSION['error'].'</p>';
unset($_SESSION['error']);
}
?>
<form method="post" action="file.php">
<input <?php if(isset($_SESSION['priorPost']['test'])){print("value='".$_SESSION['priorPost']['test']."'");} ?> name="test">
<button>Send</button>
</form>
如果我理解正确,您希望返回时测试输入保持填充状态吗?试试这个:
编辑:
File.php
添加会话以保存输入的输入值
$_SESSION['testValue']=$_POST["test"];
第1页
页面加载检查会话是否有值,是否有,打印它
<input name="test" value="<?php echo isset($_SESSION["testValue"]) ? $_SESSION["testValue"] : '';?>>
如果我理解正确,您希望返回时测试输入保持填充状态吗?试试这个:
编辑:
File.php
添加会话以保存输入的输入值
$_SESSION['testValue']=$_POST["test"];
第1页
页面加载检查会话是否有值,是否有,打印它
<input name="test" value="<?php echo isset($_SESSION["testValue"]) ? $_SESSION["testValue"] : '';?>>
首先,同时使用isset()
和empty()
是没有意义的empty()
的作用与isset()
完全相同,但也会检查其中是否有值。至于你的问题,有几种方法可以解决。您可以使用Ajax,这样用户就不会真正浏览表单,或者您可以将$\u POST['test']
的值发送回表单并将其加载到输入元素中。谢谢!我将尝试下面的解决方案,如果它不能像我预期的那样工作,我将使用Ajax。首先,同时使用isset()
和empty()
是没有意义的empty()
的作用与isset()
完全相同,但也会检查其中是否有值。至于你的问题,有几种方法可以解决。您可以使用Ajax,这样用户就不会真正浏览表单,或者您可以将$\u POST['test']
的值发送回表单并将其加载到输入元素中。谢谢!我会尝试下面的解决方案,如果它不能像我期望的那样工作,我会用Ajax差不多来做,但是页面不会返回到自己。它发送到第二个处理文件,然后发送头重定向回另一个位置。afaik$\u POST不会随之转移……几乎是这样,但页面不会返回到自身。它发送到第二个处理文件,然后发送头重定向回另一个位置。afaik$\邮政不会随此转移。。。