PHP重定向后检索$ _SESSION值

时间:2012-10-27 06:28:17

标签: php mysql session session-state

这应该是一个简单的PHP mySQL问题(我假设它有点像PHP和mySQL 101,但我找不到答案)...

我已经创建了一个注册表单,填写表单并将其提交到register_user.php页面。该页面上的代码是:

<?php
$con = mysql_connect("my_host","my_username","my_password");
if (!$con)
{
  die('Could not connect: ' . mysql_error());
}

mysql_select_db("my_db", $con);

// username and password sent from form
//NEVER Remove the mysql_real_escape_string. Else there could be an Sql-Injection!
$firstname=mysql_real_escape_string($_POST['firstname']);
$lastname=mysql_real_escape_string($_POST['lastname']);
$email=mysql_real_escape_string($_POST['email']);
$password=mysql_real_escape_string($_POST['password']);

$sql="INSERT INTO my_table (firstName, lastName, email, password)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[email]', '$_POST[password]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }

  session_start();
  // Register $myusername, $mypassword and redirect to file "profile.php"
  $_SESSION['firstname']='$_POST[firstname]';
  $_SESSION['lastname']='$_POST[lastname]';
  $_SESSION['email']='$_POST[email]';
  $_SESSION['password']='$_POST[password]';
  header("location:profile.php");
?>

如您所见,它会重定向到名为profile.php的页面。在profile.php上,我试图通过说:

来回显会话变量
<?php echo "Hello". $_SESSION['firstname']; ?>

我假设变量在从register_user.php重定向到profile.php时丢失了它的值(至少这是我迄今为止从我的研究中收集到的)。我想我必须在profile.php上使用session_start();来再次声明变量,但我不知道如何将变量设置为适当的值。在register_user.php中,我能够使用上一页表单中的post值,但是当它重定向到profile.php时我就不能再这样做了。

有人可以解释我如何在profile.php上检索这些值吗? (我又有一种感觉,这是一个非常基本的问题,但我还在学习,所以要温柔哈哈:))

3 个答案:

答案 0 :(得分:1)

您在$_POST周围使用单引号,因此您的值不会应用于$_SESSION,并且您在

中缺少引号
$_POST['value']
-------^-----^

$_SESSION['firstname'] = $_POST['firstname'];

并始终在页面顶部声明session_start();,并且在回显会话值之前,您需要在另一页上声明session_start();

此外,请使用mysqli_()代替mysql_()

答案 1 :(得分:0)

你根本没有使用转义数据,哈哈。尝试使用PDO(或mysqli&lt; - i在最后)使用预准备语句来避免SQL注入。

答案 2 :(得分:0)

我会把你的注册表格中的session_start()命令放在页面顶部导致我的感觉(我自己是初学者,所以请耐心等待)是因为它实际上没有考虑到任何注册过程。

我一直被告知会话启动命令本身应始终发生在页面的开头,因此在您开始注册表单代码之前。然后在下一页上,您将重定向到您,也应该从页面顶部的session_start开始。