0

我已经为 mySQL 设置了一个登录页面,它可以正确登录。登录表单有电子邮件和密码,但是当他们登录时。但是,当他们第一次注册时,他们的 mySQL 记录也会填充他们的名字和姓氏(字段是名字、姓氏、电子邮件、密码)。

问题是当我成功登录时,它并没有从记录中获取其他变量。它只是抓取电子邮件和密码,因为那是他们输入的内容。如何获取与我已经拥有的数据(用户名、密码)相对应的 mySQL 中一行的其他变量(名字、姓氏)?我知道这可能有点像 mySQL 101,但我在谷歌搜索这个问题时遇到了麻烦。

我附上了一些代码。这是我验证所有内容的 checklogin.php 页面。现在我明白底部的变量不是我获取名字和姓氏的方式,因为它们不是由表单发布的(正如我所提到的,表单只有电子邮件和密码):

<?php
$mysqli = mysqli_connect("mysql_name","user_name","password", "db_name");
if (!$mysqli)
  {
  die('Could not connect: ' . mysqli_error($mysqli));
  }

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

$sql="SELECT * FROM tbl_name WHERE email='$email' and password='$password'";
$result = $mysqli->query($sql);

if(is_object($result) && $result->num_rows == 1){
  // Register variables and redirect to file "profile.php"
  session_start();
  $_SESSION['firstname']=$_POST['firstname'];
  $_SESSION['lastname']=$_POST['lastname'];
  $_SESSION['email']=$_POST['email'];
  $_SESSION['password']=$_POST['password'];
  header('location:profile.php');
} else {
  echo "Wrong Username or Password";
}
?>

我的假设是在我开始会话后重定向到的 profile.php 页面上调用了变量。问题是 $_SESSION['firstname'] 和 $_SESSION['lastname'] 不起作用,因为我想它们还没有被声明。任何帮助(甚至只是朝着正确方向轻推)将不胜感激。谢谢!

4

3 回答 3

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

这是错误的..
$_POST 没有这些变量的值。
你必须从数据库中获取它。

于 2012-10-30T04:44:26.173 回答
1

这部分不好:

if(is_object($result) && $result->num_rows == 1){

  $_SESSION['firstname']=$_POST['firstname'];
  $_SESSION['lastname']=$_POST['lastname'];
  $_SESSION['email']=$_POST['email'];
  $_SESSION['password']=$_POST['password'];
}

您应该阅读结果中返回的行并将它们分配给会话变量。

$_POST变量是指通过 POST 请求发送到您的页面的变量。在这种情况下,只有电子邮件和密码。

你可以试试这段代码:

if(is_object($result) && $result->num_rows == 1){
  $row = $result->fetch_assoc()
  $_SESSION['firstname'] = $row['firstname'];
  $_SESSION['lastname'] = $row['lastname'];
  $_SESSION['email'] = $row['email'];
  $_SESSION['password'] = $row['password'];
}
于 2012-10-30T04:54:40.497 回答
1
Try This if you have all the information in the same table:    


<?php
    $mysqli = mysqli_connect("localhost","root","", "login");
    if (!$mysqli)
      {
      die('Could not connect: ' . mysqli_error($mysqli));
      }

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

    $sql="SELECT * FROM tbl_name WHERE email='$email' and password='$password'";
    $result = $mysqli->query($sql);

    if(is_object($result) && $result->num_rows == 1){
      // Register variables and redirect to file "profile.php"
      session_start();
      $num=$result->fetch_array(MYSQLI_ASSOC);
      $_SESSION['firstname']=$num['firstname'];
      $_SESSION['lastname']=$num['lastname'];
      $_SESSION['email']=$num['email'];
      $_SESSION['password']=$num['password'];
      //redirect('profile.php');
      header('location:profile.php');
    } else {
      echo "Wrong Username or Password";
    }

    ?>
于 2012-10-30T04:56:25.303 回答