-2

嗨,这是我在这里的第一篇文章,我迫切需要帮助。我正在为基于会员的旅游和度假公司开发一个网站,在用户成功登录后重定向到 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

我们不会为您编写代码,但为了帮助您一点,您的代码有什么问题:

  1. 不要SELECT *,选择你需要的,仅此而已。
  2. 不要存储密码,而是使用哈希值。
  3. 使用PDOmysqli代替 mysql。
  4. 如果用户的密码中有斜杠怎么办?
  5. 如果你真的得到报酬来做这项工作,请先获得更多的知识。了解如何创建一个体面的 Web 应用程序。自学MVC等概念。像你这样的代码给 PHP 和 Web 开发带来了坏名声。
  6. 进行正确和故障安全的错误处理。

祝你学习 PHP 好运!

于 2013-07-02T10:27:36.823 回答
0

对用户进行身份验证后,您需要persist为此用户会话生成一个唯一密钥。

$_SESSION['key] = 'aksbh7823b5iubsvd874bosidhvjbi3i4btv';

通常,这将是一个唯一的字符串,您可以将其与用户身份(主键)一起存储在会话表中。

$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上面的使用(以及缺少值转义)被认为是非常不安全的,我强烈建议使用PDOormysqli库来避免 SQL 注入。

于 2013-07-02T10:33:23.617 回答
0

session_register 已弃用....

改用 $_SESSION[] ;)

就像是:

$_SESSION['username'] = $myusername;

然后......如果你管理好会话,在我的帐户中你可以使用 $_SESSION 和登录的值......

于 2013-07-02T10:20:12.250 回答