0

さて、ここで何かがうまくいかない。DBに存在するユーザー名とパスワードを入力します。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;

        }
    ?>

login.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>

クエリのPSテキストは正常に機能します。mysqlで確認しました。ここで「」の代わりに「」と入力すると、PHPコードで

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

が表示されます

「クエリできませんでした:」

もの

elseifそして、私は物事を試しelse ifたので、問題はないと思います

4

4 に答える 4

6

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
于 2012-10-13T17:08:21.003 に答える
1

クエリでテーブル/フィールド名の前後を使用'すると、それらは文字列に変換され、フィールド/テーブル名として扱われなくなります。そのため、キーワードであるようなフィールド/テーブル名をエスケープするためのバックティックがあります。フィールド/テーブル名をエスケープする必要があるのは、それらが予約語である場合のみです。

つまり...

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

完全に間違っています。固定文字列をカウントし、提供されたユーザー名を、値が。の文字列と比較し、。の場合はusername同上ですactive

于 2012-10-13T17:08:51.043 に答える
1

ユーザーの存在を確認するためのクエリは、おそらく問題の1つです。

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

そのクエリでは、列名に一重引用符を使用しています。その結果、2つの文字列が比較されusername、という名前のユーザー名がない限り、常に。が返され0ます。`charで列をエスケープします。

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

または何も使用しないでください

$query = mysql_query("SELECT COUNT(user_id) FROM `users` WHERE username = '$username'");
于 2012-10-13T17:09:37.057 に答える
1

ユーザー名をセッションに登録し、後で取得することを覚えていますか?

$username = $_SESSION['username'];
于 2012-10-13T17:10:19.730 に答える