簡體   English   中英

檢查用戶名可用性 php

[英]Check for username availability php

<?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");

這有效!

由於您的查詢返回 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 
}

如果查詢成功, $con->query返回一個結果對象 這並沒有說明找到了多少行或查詢是否匹配任何內容,它只是意味着查詢執行成功。 因此您的$test!=false測試總是成功; 只有在數據庫錯誤的情況下才會失敗。

執行查詢SELECT COUNT(*) FROM ... ,然后獲取結果的第一行並查看計數是否> 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;
    }
}

這對我有用:

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

你的代碼真的不安全沒有優化任何人都可以在你的代碼中使用 sql 注入登錄。

並且您的代碼是正確的,因為您正在檢查 thar (test != false) 這意味着它是正確的,這就是您的代碼 og usererror 正在執行的原因

這里有一些提示,始終使用這種風格來保證安全和優化

對 $email 做同樣的事情

第三次運行查詢后不檢查它是真還是假,而是在查詢后再次檢查

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

檢查 Google 上的 sql 注入為什么我這樣做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM