Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.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
在HTML表单操作之前运行PHP提交代码以设置会话变量_Php_Html - Fatal编程技术网

在HTML表单操作之前运行PHP提交代码以设置会话变量

在HTML表单操作之前运行PHP提交代码以设置会话变量,php,html,Php,Html,在执行HTML表单的操作并离开页面之前,当用户提交HTML表单以运行将表单数据保存为会话变量所需的PHP代码时,是否有一种方法?当我将表单操作设置为转到下一个页面(session2.php)时,它不会运行与提交按钮关联的php。如果我删除表单操作,那么我需要PHP提交脚本中的JavaScript将用户带到下一页 有没有办法先运行PHP,然后再运行表单操作,还是最好保持原样?我确实有会话_start()作为两个文件中的第1行 session1.php <?php if (isset($_P

在执行HTML表单的操作并离开页面之前,当用户提交HTML表单以运行将表单数据保存为会话变量所需的PHP代码时,是否有一种方法?当我将表单操作设置为转到下一个页面(session2.php)时,它不会运行与提交按钮关联的php。如果我删除表单操作,那么我需要PHP提交脚本中的JavaScript将用户带到下一页

有没有办法先运行PHP,然后再运行表单操作,还是最好保持原样?我确实有会话_start()作为两个文件中的第1行

session1.php

<?php

if (isset($_POST['submit'])) {  

    // Set Global Session Variables from Form's POST Values
    $_SESSION["favcolor"] = $_POST['favcolor'];
    $_SESSION["favanimal"] = $_POST['favanimal'];
    
    // Go To Next Page
    $URL="session2.php";
    echo "<script type='text/javascript'>document.location.href='{$URL}';</script>";
    echo '<META HTTP-EQUIV="refresh" content="0;URL=' . $URL . '">';

}       
?>


<form action="" method="post">
Enter Color: <input type="text" name="favcolor" /><br />
Enter Animal: <input type="text" name="favanimal" /><br />
<input type="submit" value="submit" name="submit" />
</form>
<?php
// Echo session variables that were set on previous page
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
?>

有几种方法可以做到这一点:

  • 使用PHP的
    标题('Location:/page url')

  • 如果设置了
    $\u POST
    ,则呈现不同的内容


  • 在php中执行重定向,而不是使用javascript。查看PRG(post,redirect,get)模式。对于AJAX请求,我建议对此做一些研究。这里有很多关于它的信息。感谢您的详细回复。我希望做一些像选项1中列出的那样的事情。我尝试了header('Location:session2.php);但这导致=>“无法修改标题信息-标题已发送。”这是使用ob_start()的安全解决方案;为了缓冲输出,还是坚持使用标记备份的JavaScript方法更好?@Mike通常在收到错误时会这样做-这意味着已经生成了一些内容。我建议在生成任何html内容之前将其放在PHP文件的顶部,否则使用
    ob_start()
    ob_clean()方法可能会有所帮助。谢谢。我确实试过了,但是当我这么做的时候,我的会话变量似乎不是从POST数据提交中设置的。当我到达session2.php时,没有会话变量。@Mike
    SESSION_start()
    只应调用一次,如果包含文件,则无需再次调用。我不确定这是否发生在您身上,但我会检查以确保您没有调用
    session_start()