【问题标题】:if (isset($_POST["submit"]))if (isset($_POST["submit"]))
【发布时间】:2015-08-28 12:10:47
【问题描述】:

我是一个全新的程序员,我正在尝试用 php 开发一个网站。我在这部分代码中要做的就是“读取”用户的输入并将它们保存为会话变量,以便在另一个子页面中执行/计算其他内容。为了查看是否一切正常,我添加了 echo "Welcome ",$_SESSION["firstname"]; echo "ok" 行,但它不起作用。你能帮助我吗? 这是我的代码:

<!DOCTYPE html>
<html>
<body>
<form method="post" action="">
        <b>First Name:</b> <input name="firstname" type="text" value=""></br></br>
        <b>Last Name:</b>  <input name="lastname" type="text" value=""></br></br>
        <b>Age:</b> <input name="age" type="number" min="0" value=""></br></br>
        <b>Number of people in household:</b> <input name="numberofpeopleinhousehold" type="number" min="1"value=""></br></br>

        </br></br>
        <input type="submit" name="submit" value="Submit">
</form

<?php
session_start();
if (isset($_POST["submit"])){
$_SESSION["firstname"]= $_POST["firstname"];
$_SESSION["lastname"]= $_POST["lastname"];
$_SESSION["age"]= $_POST["age"];
$_SESSION["numberofpeopleinhousehold"]= $_POST["numberofpeopleinhousehold"];
}
echo "Welcome ".$_SESSION["firstname"];//here is....
echo "ok"
?>

</body>
</html>

【问题讨论】:

  • session_start();之前启用error_reporting(E_ALL);
  • 将 session_start() 放在文件中的任何内容之前。它需要设置标题,所以它必须在任何输出之前。
  • 你的错误是什么??
  • 首先你的文件名是什么?你的输出是什么??

标签: php session post


【解决方案1】:

session_start() 的作用是在将 cookie 提供给浏览器时在页眉中发送一个 cookie。如果您已经向浏览器发送了一些数据,例如您的表单,那么 PHP 将无法启动会话。您需要将session_atart() 移动到文档的最顶部、表单或任何echos 上方。此外,正如其他人所指出的,您缺少分号。另外,您需要正确关闭您的&lt;form&gt; 标签。

【讨论】:

  • 虽然这可能不是 OP 正在寻找的确切答案,但我将 session_start 移到了最顶部,并且成功了! (是的,其他答案是这样说的,但是这个只有这个解决方案)&lt;?php session_start(); ?&gt;&lt;!DOCTYPE html&gt;
【解决方案2】:

这确实有效。如果您查看源代码,您会看到您的名字被呼应出来。

一个问题是您在表单标签的末尾缺少一个大于号。

</form

应该是

</form>

此外,您需要在任何 html 之前启动会话。试试这个...

<?php
session_start();
if (isset($_POST["submit"])){
$_SESSION["firstname"]= $_POST["firstname"];
$_SESSION["lastname"]= $_POST["lastname"];
$_SESSION["age"]= $_POST["age"];
$_SESSION["numberofpeopleinhousehold"]= $_POST["numberofpeopleinhousehold"];
}
?>
<!DOCTYPE html>
<html>
<body>
<form method="post" action="">
        <b>First Name:</b> <input name="firstname" type="text" value=""></br></br>
        <b>Last Name:</b>  <input name="lastname" type="text" value=""></br></br>
        <b>Age:</b> <input name="age" type="number" min="0" value=""></br></br>
        <b>Number of people in household:</b> <input name="numberofpeopleinhousehold" type="number" min="1"value=""></br></br>

        </br></br>
        <input type="submit" name="submit" value="Submit">
</form>

<?php
if ($_SESSION["firstname"] != ""){
    echo "Welcome ",$_SESSION["firstname"];
    echo "ok";
}
?>

</body>
</html>

【讨论】:

  • 它可能看起来正在工作,但会话不是从它所在的 seession_start 调用开始的。
【解决方案3】:

如果,delcare 会话从顶部开始,则在内部回显输出,经过测试并且可以 100% 工作。注意-在顶部添加 php 代码并关闭表单标签

<?php
session_start();  //session start must be first line

if (isset($_POST["submit"])){
    $_SESSION["firstname"]= $_POST["firstname"];
    $_SESSION["lastname"]= $_POST["lastname"];
    $_SESSION["age"]= $_POST["age"];
    $_SESSION["numberofpeopleinhousehold"]=  $_POST["numberofpeopleinhousehold"];
    echo "Welcome ".$_SESSION["firstname"];  //inside if condition
    echo "ok";
}
?>
<!DOCTYPE html>
<html>
<body>
<form method="post" action="#">
    <b>First Name:</b> <input name="firstname" type="text" value=""/></br></br>
    <b>Last Name:</b>  <input name="lastname" type="text" value=""/></br></br>
    <b>Age:</b> <input name="age" type="number" min="0" value=""/></br></br>
    <b>Number of people in household:</b> <input name="numberofpeopleinhousehold" type="number" min="1"value=""/></br></br>

    </br></br>
    <input type="submit" name="submit" value="Submit"/>
</form>  <!-- close form tag -->

</body>
</html>

【讨论】:

  • [![&lt;?php 这是新的。
  • 你能解释一下超全局名称和它的数组键 ID 括号之间的斜杠背后的作用吗?
  • 仅供参考,session_start() 不必是您代码的第一行,它必须在任何其他 非标头之前运行> 输出到浏览器。
猜你喜欢
  • 1970-01-01
  • 2014-07-04
  • 2015-03-05
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多