0

エラーが発生しました:有効なユーザー名またはパスワードを試しても、常に「申し訳ありませんが、ユーザー名は既に存在します」と表示されます。私のロジック、特にこのコードブロックに何か問題があります:

 $q = $conn->query("SELECT uname FROM Student WHERE uname= $aRegUsr ");
    $stmt = $conn->prepare($q);
    $stmt->fetch($q);
    if($stmt > 0){ #if there are 1 or more users with enter username, deny.

dbcred.php

<?php
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'databasename';

?>

PHP:

<?php
#Login Details
require_once('dbcred.php');
$conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass);

$aRegUsr = $_POST['regduser']; 

#Check for Existing User
$q = $conn->query("SELECT uname FROM Student WHERE uname= $aRegUsr ");
$stmt = $conn->prepare($q);
$stmt->fetch($q);
if($stmt > 0){ #if find that username in use, deny ability to register, else{ALLOW}
echo "Sorry, username already exists";
}
else{
echo "Success";
}

?>

HTML

<form action="inc/check_regUsr.php" method="post" id="userLogon">
    <div class="field required">
        Username: <input type="text" name="regduser" tabindex="1" /><br />
        </div>
        <div class="field required">
        Password: <input type="password" name="regdpass" tabindex="2" /><br />
        </div>
        <input type="submit" name="submitUser" />
</form>

DBテーブル:Student img1

4

3 に答える 3

2

ユーザー登録またはユーザー認証スクリプトを作成しようとしていますか? 効果的なソリューションを提供するために、実際の目的が明確に概説されているとは思いません。

「有効なユーザー名またはパスワードを試すかどうか」はユーザー認証を示しますが、「if($stmt > 0){ #ユーザー名を入力したユーザーが 1 人以上いる場合は拒否します。」ユーザー登録を示します。

編集:更新された要件に基づいて、展開のセキュリティによっては、ユーザー認証が少し複雑になる可能性があります。以下に含まれているのは、基本コードに基づいたサンプル コードです。事前に作成されたスクリプトを見つけて、必要に応じて変更することをお勧めします。これは目的により適している場合があります。

<?php #Login Details 
require_once('dbcred.php'); 

#Variables
$error = '';
$auth = 0;
$aRegUsr = $_POST['regduser'];   #Check for Existing User 
$aRegPass = $_POST['regdpass'];   #Check for Existing User 

#DB stuff
$conn = new PDO("mysql:host=$host;dbname=$db", $user, $pass); 
$sql = "SELECT uname,password FROM Student WHERE uname= $aRegUsr ";

#Dataset stuff
foreach($conn->query($sql) as $row){ 
    if($row['password'] != $aRegPass){
        $error = 'Invalid Password';
        $auth = 0; #If $auth = 0 then user is logged in
    }else{
        $auth = 1; #If $auth = 1 then user is logged in
    }
}
$conn = null;
?>
于 2011-08-04T21:37:16.147 に答える
0

コードが正しくありません。あなたのロジックはif ($stmt > 0)、その名前のユーザーが既に存在するかどうかをテストすることだと思います。

代わりにこれを使用してください -

<?php 

#Check for Existing User
$q = $conn->query("SELECT uname FROM Student WHERE uname= $aRegUsr ");
$stmt = $conn->prepare($q);
$rows = $stmt->fetchAll();
if ($rows > 1) { # The username already exists
    #... rest  of your code
于 2011-08-04T21:45:50.180 に答える
0

私はこの機能を使用したことがないのでわかりませんが、ここから理解したことから: http://php.net/manual/en/pdostatement.fetch.php fetch は結果を返すので、実際にカウントを確認する必要がありますfetchAll http://php.net/manual/en/pdostatement.fetchall.phpを確認すると、次のようになります。

$results = $stmt->fetchAll();
if(count($results)>0)
{
...
于 2011-08-04T21:43:48.663 に答える