【问题标题】:php form not recognizing username fro sql db [closed]php表单无法识别来自sql db的用户名[关闭]
【发布时间】:2013-03-30 12:36:58
【问题描述】:

我的问题是:

 <?php
 function user_exists($username) {
$username = sanitize($username);
return (mysql_result(mysql_query("SELECT_COUNT('user_id') FROM `user` WHERE `username` = '$username'"), 0) == 1) ? true : false;
 }
 ?>

如您所见,我已包含正确的数据库名称并且用户确实存在,这就是我调用它从 sql 中提取的位置:

<?php
include 'core/init.php';

if (user_exists('dan') === true) {
echo 'exists';
} 

 die();

if (empty($_POST) === false) {
$username = $_POST['username'];
$password = $_POST['password'];

if(empty($username) === true || empty($password) === true {

    $errors[] = 'You need to enter a username and password';
} else if (user_exists($username) === false) {
    $errors[] = 'Sorry this user does not exist';
}
}
?>

我不知道为什么我得到一个空白页面并且它显示的是用户存在的消息?

【问题讨论】:

  • 不鼓励在 PHP 中使用 mysql_* 函数,而建议使用 PDOMySQLi (find out why)
  • 什么是 die();在公开场合做什么? ;)
  • @dbf - 这个功能现在已经被取消了,但我仍然得到空白页

标签: php mysql sql forms login


【解决方案1】:

除了查询中的那个愚蠢的错字之外,您使用 mysql API 的方式确实很糟糕。
需要注意的一些严重缺陷

  • 无论用于构建查询的“清理”函数都应在返回值周围添加引号。否则会起不到任何作用,导致您被注射。
  • 你没有检查 mysql 错误
  • 您将代码写在一行中,因此极难阅读。

至少应该是什么

function user_exists($username) {
    $username = sanitize($username); // remember it should add the quotes
    $sql = "SELECT COUNT(1) FROM `user` WHERE `username` = $username";
    $res = mysql_query($sql) or trigger_error(mysql_error().$sql);
    $row = mysql_fetch_row($res);
    return !empty($row[0]);
 }

我不确定为什么会出现空白页。

很可能是由一些 PHP 错误引起的。
要么告诉 PHP 在屏幕上显示它们,要么查看服务器错误日志以阅读错误消息

或者数据库中没有这样的用户。

所以,让你的代码像这样

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

echo "testing<br>";

include 'core/init.php';

if (user_exists('dan')) {
   echo 'exists';
} else {
   echo 'not found';
}

【讨论】:

  • 好的,谢谢你指出问题,我知道那里有一些安全问题,但感谢更新代码,但问题仍然存在?
  • 他很可能因为die();而得到一个空白页。
  • 我已经取出die();但是空白页面不断返回并且没有说明用户存在​​,现在数据库已连接,因为如果更改密码它会返回错误
  • @Your Common Sense - 您现在提供的代码确实显示了测试,但无论我在表单中输入了什么。
  • 你知道我已经包含了我的 ini.php 文件,如果有帮助的话,这里是其中的代码...
【解决方案2】:

这可能是您无法触发的语法错误

(mysql_result(mysql_query("SELECT_COUNT('user_id') FROM `user` WHERE `username` = '$username'"), 0) == 1) ? true : false;

SELECT COUNT之间留出空格,去掉下划线“_”,因为它会给你mysql错误

【讨论】:

    【解决方案3】:

    问题来了

     SELECT_COUNT('user_id')
           ^ 
    

    应该是

     SELECT COUNT('user_id')
    

    【讨论】:

    • 去掉下划线后问题依然存在...
    • 我已经仔细检查过它是从正确的表名中获取的,并且用户名是我在用户名下填充了一个名为 dan 的用户的字段
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2022-12-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多