【问题标题】:php code works wrongphp代码工作错误
【发布时间】:2012-10-13 17:04:37
【问题描述】:

嗯,这里出了点问题。我输入我的数据库中存在的用户名和密码。在这种情况下应该echo这个字符串

需要激活

但它与此相呼应

你需要注册

init.php

<?php
    //error_reporting(0);
    session_start();

    require 'dbconnect.php';//this works okay so i wouldn't post this file code
    require 'users.php';

    $errors = array();
?>

users.php

        <?php

        function user_exists($username){
            $username = mysql_real_escape_string($username);

            $query = mysql_query("SELECT COUNT('user_id') FROM `users` WHERE 'username' = '$username'");

            if (!$query) {
                die('Could not query:' . mysql_error());
            }

            return (mysql_result($query, 0) == 1) ? true : false;

        }

        function user_active($username){

            $username = mysql_real_escape_string($username);

            $querytoo = mysql_query("SELECT COUNT('user_id') FROM `users` WHERE 'username' = '$username' AND 'active' = 1");

            if (!$querytoo) {
                die('Could not query:' . mysql_error());
            }

            return (mysql_result($querytoo , 0) == 1) ? true : false;

        }
    ?>

登录.php

<?php
include 'init.php';


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';
    } 
    elseif(user_exists($username) === false){
        $errors[]='You need to reg';
    } 
    elseif(user_active($username) === false){
        $errors[]='need to activate';
    } 
    else {
    //
    }

    print_r($errors);
}



?>

部分html

<form action="login.php" method = "post">
                    <ul id="login">
                        <li>
                            username:<br>
                            <input type="text" name="username" size="30" value=""/></li>
                        <li>password:<br>
                            <input type="password" name="password" size="30" value=""/></li>
                        <li><input type = "submit" value ="Log in"></li>
                        <li>
                            <a href="register.php"> Register</a>
                        </li>
                    </ul>

附: 查询文本工作正常,我在 mysql 中检查了它。在 php 代码中,当我在这里键入 `` 而不是 '' 时

SELECT COUNT('user_id') FROM users WHERE 'username' = '$username' AND '活跃' = 1

出现

'无法查询:'

东西

我尝试了elseifelse if 的东西,所以我认为不存在问题

【问题讨论】:

标签: php mysql


【解决方案1】:

您的 SQL 错误。您正在将静态字符串与您的值进行比较,而不是列名:

    SELECT COUNT('user_id') FROM users WHERE 'username' = '$username' AND 'active' = 1

应该是

SELECT COUNT(user_id) FROM users WHERE username = '$username' AND active = 1

请注意,我从列名中删除了 '。使用反引号也是有效的:

SELECT COUNT(`user_id`) FROM users WHERE `username` = '$username' AND `active` = 1

【讨论】:

  • 它说>无法查询:'字段列表'中的未知列'user_id'
  • 但列 user_id 存在我检查了它
  • 你能运行SHOW CREATE TABLE users吗?
  • weel,如果我没听错的话,我在函数 user_exists 中输入了 echo mysql_query("SHOW CREATE TABLE users");,现在显示资源 id #6 无法查询:'字段列表'中的未知列 'user_id'
  • 哦,该死的家伙,这是用 sql 的 smth 我只是 reebot 它,现在它工作正常
【解决方案2】:

在查询中在表/字段名称周围使用' 会将它们转换为字符串,并且它们将不再被视为字段/表名称。这就是为什么有反引号,用于转义这些恰好是关键字的字段/表名称。唯一需要对字段/表名进行转义的情况是它们是保留字。

这意味着...

SELECT COUNT('user_id')
             ^-      ^-
FROM `users`
WHERE 'username' = '$username' AND 'active' = 1");
      ^--      ^--                 ^-     ^-

完全错误。您正在计算一个固定字符串,您正在将提供的用户名与值为 username 的字符串进行比较,active 也是如此。

【讨论】:

    【解决方案3】:

    您检查用户是否存在的查询可能是您的问题之一:

    $query = mysql_query("SELECT COUNT('user_id') FROM `users` WHERE 'username' = '$username'");
    

    在该查询中,您在列名上使用了单引号。这会导致比较两个字符串,除非您有一个名为username 的用户名,否则它将始终返回0。使用 ` 字符转义列。

    $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
    

    或者不使用任何东西

    $query = mysql_query("SELECT COUNT(user_id) FROM `users` WHERE username = '$username'");
    

    【讨论】:

    • 此处相同无法查询:“字段列表”中的未知列“user_id”
    • 我刚刚使用了你写的 (user_id)。不过,我很高兴您重新启动后它可以正常工作了。
    • 谢谢!现在是 apache 粉碎gyazo.com/a3e65d30d251d5dd94608893c73d3c59 我想我应该重新安装 Denwer。再次。哦。
    【解决方案4】:

    您是否记得将用户名注册到会话中,并在之后获取?

    $username = $_SESSION['username'];
    

    【讨论】:

    • 那么 $username 变量来自哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多