【问题标题】:How to print all mysql rows如何打印所有mysql行
【发布时间】:2015-01-13 15:46:23
【问题描述】:
 require('db.php');


  $query = 'SELECT username,password FROM users';

  $result = mysql_query($query, $db);

  $text = mysql_fetch_assoc($risultato);


   if($text['username'] == $_POST['user'] && $text['password'] == $_POST['pass']) {

    echo  $text['username'];;
}
else {

    echo 'NO!';
}

我是一名年轻的意大利开发人员: 这个 mysql 选择结果只是表的第一行,我正在编写 login.php 页面的代码。 我应该使用 WHERE 吗?如何? 我还有一个 id 字段(BIG INT(20) NOT NULL AUTO INCREMENT)

【问题讨论】:

  • 似乎您只获得了结果数组中的第一个条目。另外, $text 正在获取不同变量的关联? $testo 是什么?此外,您当前的代码存在严重的安全问题(mysql php 函数和纯文本密码,但可以学习)
  • 开始一个(while)循环
  • 您的代码存在很多安全问题。 mysql_* 已弃用。请改用 mysqli_* 或 PDF。据说,您需要使用 while ($text = mysql_fetch_array($result, MYSQL_NUM)) { // 完成您的工作 } 循环 $text
  • 您在 $text = mysql_fetch_assoc($risultato); 中使用了错误的变量,它应该是 $text = mysql_fetch_assoc($result); - 但是,在将行与用户名和密码。
  • 实际上,您应该查看daveismyname.com/login-and-registration-system-with-php-bp - 它使用带有准备好的语句的 PDO 和 password_hash(),它们更安全。

标签: php mysql forms select login


【解决方案1】:

mysql_fetch_assoc 从结果集中获取下一行,只要有一个,或者false 如果结果集已用完 - 所以你可以循环它:

while ($text = mysql_fetch_assoc($risultato)) {
    if($text['username'] == $_POST['user'] && $testo['password'] == $_POST['pass']) {
        echo  $text['username'] . '<br/>';
    }
}

关于密码存储

您似乎正在以纯文本形式存储密码。如果是这种情况,强烈建议不要这样做。

建议您使用CRYPT_BLOWFISH 或PHP 5.5 的password_hash() 函数。
对于 PHP password_hash() compatibility pack

【讨论】:

  • -1 不要提供允许人们编写不安全的 Web 应用程序的代码。
  • @siride 我已经修改了答案以适应多种方式;)
猜你喜欢
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 2023-01-04
  • 2015-11-27
  • 2021-12-13
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
相关资源
最近更新 更多