这应该是一个简单的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上检索这些值吗? (我又有一种感觉,这是一个非常基本的问题,但我还在学习,所以要温柔哈哈:))
答案 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开始。