Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP验证外部文件中的输入时,如何防止表单重置值_Php_Html - Fatal编程技术网

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$\邮政不会随此转移。。。