2016-05-30 15 views
0

ユーザが入力したデータが既にユーザのデータベースに入っているかどうかをチェックする関数を作成しました。この関数は、テスト環境で動作します(ただし、ページが開いたときに実行されます)。何らかの理由で、クエリの結果に関係なく$ username関数にユーザー入力を割り当てます。私はそれをAJAXにしなければならないかもしれないと思うが、私はどのようにわからない。PHPクエリがデータベースのユーザ名を確認できません

<?php 

    function checkIfEntered($data, $conn) 
    { 
    $query = "SELECT * FROM users 
     WHERE username= '" . $data . "'"; 

     if ($result = mysqli_query($conn, $query)) { 

     /* determine number of rows result set */ 
     $row_cnt = mysqli_num_rows($result); 

     /* close result set */ 
     mysqli_free_result($result); 

    } 

    if (($row_cnt) >= 1) 
    { 
     return TRUE; 
    } 

    if (($row_cnt) == 0) 
    { 
     return FALSE; 
    } 
    } 

    error_reporting(E_ALL); 
    ini_set('display_errors',1); 
    // define variables and set to empty values 
    $servername = "localhost"; $username = "root"; 
    $password = "root"; 
    $dbname = "MyDatabase"; 

    // Create connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    $email = ''; 
    $emailErr = ''; 
    $usernameErr = ''; 
    $UserPasswordErr = ''; 
    $username = ''; 
    $UserPassword = ''; 
    $confirm = ''; 
    $confirmErr = ''; 
    function test_input($data) 
    { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
    } 
    if ($_SERVER["REQUEST_METHOD"] == "POST") 
    { 
    if (empty($_POST["username"])) 
    { 
     $usernameErr = "username is required"; 
    } 
    else 
    { 
     if (checkIfEntered($username, $conn)) 
    { 
     $usernameErr = "There is already a user with the username: " . $username; 
    } 
    else 
    { 
     $username = test_input($_POST["username"]); 
    } 
    } 

答えて

0

「checkIfEntered」関数を呼び出すことさえありません。代わりに、あなたは "isEnteredUsername"関数を呼び出していますが、私はここでそれを見ません。したがって、コードは常にelseに入り、$ usernameにPOST値を代入します。 なぜAJAXingを使って問題を解決できるのか分かりませんが、AJAXコールをドキュメントの準備や、この$ .ajax({...})のようなイベントで使用することができます。レコードの http://api.jquery.com/jquery.ajax/

+0

これは実際にスタックオーバーフローするコードを転送するときに私が作った間違いでした。私の主な文書で私はこの間違いをしない。私はポストでそれを修正しましたが、それを指摘してくれてありがとう。 –

0

あなたが忘れてしまっているリターンnumが、この機能は

<?php 
function checkIfEntered($data, $conn) 
{ 
    $query = "SELECT * FROM users 
    WHERE username= '" . $data . "'"; 

    if ($result = mysqli_query($conn, $query)) { 

    /* determine number of rows result set */ 
    $row_cnt = mysqli_num_rows($result); 

    /* close result set */ 
    mysqli_free_result($result); 
    return $row_cnt; 
    } 

    if (($row_cnt) >= 1) 
    { 
    return TRUE; 
    } 

    if (($row_cnt) == 0) 
    { 
    return FALSE; 
    } 
} 

error_reporting(E_ALL); 
ini_set('display_errors',1); 
// define variables and set to empty values 
$servername = "localhost"; $username = "root"; 
$password = "root"; 
$dbname = "MyDatabase"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$email = ''; 
$emailErr = ''; 
$usernameErr = ''; 
$UserPasswordErr = ''; 
$username = ''; 
$UserPassword = ''; 
$confirm = ''; 
$confirmErr = ''; 
function test_input($data) 
{ 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
    if (empty($_POST["username"])) 
    { 
    $usernameErr = "username is required"; 
    } 
    else 
    { 
    if (checkIfEntered(test_input($_POST["username"]), $conn)) 
    { 
     $usernameErr = "There is already a user with the username: " . $username; 
    } 
    else 
    { 
     $username = test_input($_POST["username"]); 
    } 
    } 
?> 
+0

これは実際問題ではありません。私はタイムアウトの問題があると信じています。 –

+0

あなたはphp: ini_set( 'max_execution_time'、300)のためにtineを追加します。 // 300秒= 5分 ini_set( 'max_execution_time'、0); // 0 = NOLIMIT –

+0

私はこの関数を使用したときに$ usernameが設定されていないというアクラエルエラーが発生しました。 –

0

このコードの問題は、あなたが$usernameパラメータを渡すときに割り当てられていないため、機能checkIfEntered()がfalseまで来ている「checkIfEntered」 。それは間違っていると思います。

コード:

if (checkIfEntered(test_input($_POST["username"]), $conn)) 
{ 
    $usernameErr = "There is already a user with the username: " . $username; 
} 
else 
{ 
    $username = test_input($_POST["username"]); 
} 

修正

$username = test_input($_POST["username"]); 

    if (checkIfEntered(test_input($_POST["username"]), $conn)) 
{ 
    $usernameErr = "There is already a user with the username: " . $username; 
    $username = ''; 
    //set username back to nothing to avoid more errors. 
} 
else 
{ 
    $username = test_input($_POST["username"]); 
} 
関連する問題