0

mySQLのログインページを設定しましたが、正しくログインします。ログインフォームには電子メールとパスワードがありますが、ログイン時です。ただし、最初に登録すると、mySQLレコードにも名前と名前が入力されます(フィールドは、名前、名前、電子メール、パスワードです)。

問題は、ログインに成功したときに、レコードから他の変数を取得していないことです。彼らが入力したのは、電子メールとパスワードを取得するだけです。すでに持っているデータ(ユーザー名、パスワード)に対応するmySQLの行の他の変数(名、姓)を取得するにはどうすればよいですか?これは一種のmySQL101である可能性があることは理解していますが、この質問を正確にグーグルで検索するのに問題があります。

いくつかのコードを添付しました。これは、すべてを検証する私の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 に答える