-2

こんにちは、これは私の最初の投稿であり、助けが切実に必要です。メンバーベースの旅行および休暇会社の Web サイトを開発しています。ユーザーが正常にログインした後、search-flights.php にリダイレクトされます。ログインの詳細を使用して my-account.php にユーザーの詳細を表示し、特定の mysql 行。どうすればこれを行うことができますか?私はこれを長い間研究してきましたが、私がしなければならないことに近い解決策は見つかりませんでした。これが私のコードの一部です。私はphpとmysqlにかなり慣れていないことに注意してください

    <form method="POST" id="login-form" action="./Scripts/checklogin.php">
  <fieldset class="userdata">
    <p id="form-login-username">
      <label for="modlgn-username">User Name</label>
      <input id="modlgn-username" name="myusername" class="inputbox" size="18" type="text">
      <p id="form-login-password">
        <label for="modlgn-passwd">Password</label>
        <input id="modlgn-passwd" name="mypassword" class="inputbox" size="18" type="password">
        </p>
    <p id="form-login-remember">
      <label for="modlgn-remember">Remember Me</label>
      <input id="modlgn-remember" name="remember" class="inputbox" value="yes" type="checkbox">
      </p>
    <input type="image" class="move" value="Login" src="images/Login.png" alt="Log in Button" title="Log in" />
    <input name="option" value="com_users" type="hidden">
    <input name="task" value="user.login" type="hidden">
    <input name="return" value="aW5kZXgucGhwP0l0ZW1pZD00MzU=" type="hidden">
    <input name="e4b8befc8354bc2ee27d826c9dcc850f" value="1" type="hidden"> </fieldset>        
  </form>   



     <?php
// check-login.php
$host="localhost"; // Host name
$username="********"; // Mysql username
$password="********"; // Mysql password
$db_name="choliday_members"; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:../members/search-flights.php");
}
else {
echo "Wrong Username or Password";
}
?>
4

3 に答える 3

0

session_register は非推奨です....

代わりに $_SESSION[] を使用してください ;)

何かのようなもの:

$_SESSION['username'] = $myusername;

そして...セッションをうまく管理すれば、my-accountで$_SESSIONをloginの値とともに使用できます...

于 2013-07-02T10:20:12.250 に答える
0

persistユーザーを認証した後、このユーザー セッションの一意のキーを生成する必要があります。

$_SESSION['key] = 'aksbh7823b5iubsvd874bosidhvjbi3i4btv';

通常、これは一意の文字列であり、ユーザー ID (主キー) と共にセッション テーブルに格納できます。

$sql = "INSERT INTO sessions (`key`, `user_id`) VALUES ('$_SESSION['key']', '$userId');

この一意のキーをグローバル$_SESSIONスコープに配置することで、セッションがまだ存在していれば、別のリクエストからこの値をフェッチできるようになります。

<?php
  session_start();

  $key = $_SESSION['key'];
  $sql = "
    SELECT b.* FROM sessions AS a
    INNER JOIN users AS b ON b.id = a.user_id
    WHERE key = '" . $key ."'
  ";
  $result = mysql_query($sql);
?>

上記の使用mysql_query(および値のエスケープの欠如) は非常に安全ではないと考えられていることに注意してください。SQL インジェクションを回避するためにPDOまたはmysqliライブラリを使用することを強くお勧めします。

于 2013-07-02T10:33:23.617 に答える