1
<?php
$con = mysqli_connect('localhost','root','[mypassword]','dbhwsource');

if(isset($_GET['username'])){
$username = $con->real_escape_string($_GET['username']);
$test = $con->query("SELECT username FROM users WHERE username='$username'");
if($test!=false) die("usererror");
}

if(isset($_GET['email'])){
$email = $con->real_escape_string($_GET['email']);
$test = $con->query("select * from users where email='$email'");
if($test!=false) die("emailerror");
}

$con->close();
echo "ok";
?>

だから私はユーザー名/電子メールが利用可能かどうかを確認しようとしていますが、入力されたユーザー名が何であっても、私が得るのは「usererror」だけです!私はただイライラしていて、どこでもサンプルコードを検索しましたが、コードには何の問題もないようです。私は何が間違っているのですか?

編集:

$test = $test->fetch_assoc();
if(!empty($test)) die("usererror");

これはうまくいきました!

4

5 に答える 5

2

クエリが true を返すため、この行if($test!=false) die("usererror");が実行され、次のようになります。

$test = $con->query("SELECT username FROM users WHERE username='$username'");
$row_cnt = $test->num_rows;
if( $row_cnt > 0 ) { 
  //you already have user with this name, do something 
}
于 2013-02-10T08:01:06.507 に答える
1

$con->queryクエリが成功した場合、結果オブジェクトを返します。これは、見つかった行の数やクエリが何かに一致したかどうかについては何も言いません。クエリが正常に実行されたことを意味するだけです。したがって、あなたのテストは常に$test!=false成功します。データベース エラーの場合にのみ失敗します。

としてクエリを実行しSELECT COUNT(*) FROM ...、結果の最初の行をフェッチして、カウントが であるかどうかを確認します> 0

于 2013-02-10T08:00:17.477 に答える
0

私は最近、Androidアプリでこのようなことをしました。あなたは本当にこのサイトをチェックアウトする必要があります. とても助かりました。これは、アプリケーション用の PHP API を使用する詳細な例です。具体的にはログイン。

ただし、具体的には、PHP のページのスニペットを次に示します。

/*
 * Check user is existed or not
 */
public function isUserExisted($email) {
    $result = mysql_query("SELECT email from users WHERE email = '$email'");
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows > 0) {
        // user existed
        return true;
    } else {
        // user not existed
        return false;
    }
}
于 2013-02-10T08:03:12.203 に答える
0

これは私のために働いた:

$test = $test->fetch_assoc();
if(!empty($test)) die("usererror");
于 2013-02-10T20:22:16.657 に答える
-1

あなたのコードは本当に安全ではなく、最適化されていないため、コードにSQLインジェクションを使用して誰でもログインできます。

thar (test != false) をチェックしているため、コードは正しいことを意味します。これは、コード og usererror が実行されている理由です。

ここにいくつかのヒントがあり、セキュリティと最適化のために常にこのスタイルを使用してください

$email についても同じことを行います

クエリを実行した後の3番目は、それが真か偽かをチェックしませんが、クエリの後に再度チェックします

if($test->username === $_GET['username']) { do something }

なぜ私がこれをしたのか、GoogleでSQLインジェクションをチェックしてください

于 2013-02-10T08:05:03.530 に答える