【问题标题】:Cant get variable from MySQL using PHP无法使用 PHP 从 MySQL 获取变量
【发布时间】:2018-11-16 17:56:04
【问题描述】:

我需要从 MySQL DB(它肯定存在)中获取一些数据来继续分析它。所以,我的代码中有什么:

  if (count($errors) == 0)  
$password = md5($password); 
$query = "SELECT username, password, email FROM trackowners WHERE username='$username' AND password='$password'"; 
$results = mysqli_query($db, $query); 
if (mysqli_num_rows($results) == 1) {
  ///////////
  $_SESSION['username'] = $username;
  $_SESSION['success'] = "You are now logged in";
  $_SESSION['email'] = $email;
  header('location: index.php');
}else {
  array_push($errors, "Wrong username/password combination");
} }

然后我尝试使用变量 $_SESSION['username'] 并通过电子邮件发送:

<?php  if (isset($_SESSION['username'])) : ?>
    <p>Welcome <strong><?php echo $_SESSION['username']; ?></strong> // Here are your profile settings.</p>

    <p> <a href="index.php?logout='1'" style="color: red;">logout</a> </p>
<?php endif ?>

  <?php  if (isset($_SESSION['username'])) : ?>
  <p>Your e-mail<strong><?php echo $_SESSION['email']; ?></strong> //</p>
<?php endif ?>

在这里我得到了用户名变量,但我无法从电子邮件变量中得到任何东西。有什么问题?

提前致谢!

【问题讨论】:

标签: php mysql session md5


【解决方案1】:

我对您的代码有很多疑问(不要使用 MD5 进行密码散列,而是使用 PHP build in hashing method)。但是继续@Nicolas的帖子

编辑以遵循 Jay Blanchard 的建议

// Make sure your session is started
session_start();    

if (count($errors) == 0){
    // Make sure to store your passwords with the same function
    $password = password_hash($password, PASSWORD_DEFAULT ); 
    // Prepare your query with placeholders
    $query = $pdo->prepare('SELECT username, password, email FROM trackowners WHERE username=? AND password=?');
    // Execute your query
    if($query->execute(array($username, $password)))
    {
        // Loop through result set
        while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
            $_SESSION['username'] = $row['username'];
            $_SESSION['email'] = $row['email'];
            $_SESSION['success'] = "You are now logged in";     
        }
        header('location: index.php');  
    }
    else
    {
        array_push($errors, "Wrong username/password combination"); 
    }
}

正如@Nicolas 提到的,阅读了Prepared statements 以防止 sql 注入。

【讨论】:

  • 是的,是的,我知道这种加密技术。我现在不打算这样做,因为我没有足够的知识。关于这段代码:现在我无法访问 index.php 页面,因为“错误的用户名组合”错误
  • 这就是我假设的全部目的?用户名和/或密码不正确时无法到达一页?
  • 不,它工作得很好(关于不访问)。在 index.php 上,我想显示“电子邮件”变量。顺便说一句,即使我使用正确的组合,我也无法访问该页面
  • PHP 返回什么错误?您是否创建了 PDO 对象:$pdo = @new PDO('mysql:host=host_name;dbname=' . Config::database_name;charset=utf8', database_user, database_password, array(PDO::ATTR_PERSISTENT =&gt; true));
  • 我收到一个错误:致命错误:在第 77 行的 /home/begosolu/public_html/moofta/php/server.php 中的非对象上调用成员函数 prepare()跨度>
猜你喜欢
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多