-1

さて、私は自分のサイトにユーザー登録フォームを追加しようとしています。私は何日もこれを修正しようとしてきましたが、私が試したものは何もうまくいかないようです. 現在、登録フォームに入力して送信ボタンを押すと、この警告が表示されます。

警告: mysql_num_rows() は、パラメーター 1 がリソースであると想定し、null は /Applications/XAMPP/xamppfiles/htdocs/tutorials/MySite/index.php の 64 行目に指定されています

データベースと行の構文がスクリプトとphpmyadminで同じであることを確認するためにトリプルチェックを行ったので、本当に迷って、ここから何をすべきかわかりません。phpmyadmin に接続してクエリを実行したり、phpmyadmin から情報を取得したりするのに常に問題があります。

これまでのところ、これは私が持っているものです(コードが多すぎて申し訳ありません):

    <?php

$reg = $_POST['reg'];
// declaring variables to prevent errors

$fn      = ""; //first name
$ln      = ""; //last name
$un      = ""; //username
$em      = ""; //email
$em2     = ""; //email 2
$pswd    = ""; //sign up date
$u_check = ""; //check if username exists

//registration form
$fn    = strip_tags($_POST['fname']);
$ln    = strip_tags($_POST['lname']);
$un    = strip_tags($_POST['username']);
$em    = strip_tags($_POST['email']);
$em2   = strip_tags($_POST['email2']);
$pswd  = strip_tags($_POST['password']);
$pswd2 = strip_tags($_POST['password2']);
$d     = date("Y-m-d"); // year - month - day

if ($reg) {
    if ($em == $em2) { //this block of code is where I'm having the most trouble at.
        // Check if user already exists
        $u_check = mysql_query("'SELECT' username 'FROM' users 'WHERE' username='$un'");
        // Count the amount of rows where username= $un
        $check   = mysql_num_rows($u_check); //<<<<<<<<<<<<<<<<<<<<<<<<LINE 64 
        if ($check == 0) { //maybe this should be $u_check??\\




            //check all of the fileds have been filled in
            if ($fn && $ln && $un && $em && $em2 && $pswd && $pswd2) {
                //check that passwords match
                if ($pswd == $pswd2) {
                    //check the maximum length of username/first name/last name does not exceed 25 characters.
                    if (strlen($un) > 25 || strlen($fn) > 25 || strlen($ln) > 25) {
                        echo "The maximum limit for username/first name/ last name is 25 characters!";

                    } else { //check to see if password is allowable length
                        if (strlen($pswd) > 30 || strlen($pswd) < 5) {
                            echo "Your password must be between 5 and 30 characthers long!";
                        } else {
                            //encrypts password using md5 before sending to database
                            $pswd  = md5($pswd);
                            $pswd2 = md5($pswd2);
                            $query = mysql_query("INSERT INTO users VALUES (' ', '$un', '$fn', '$ln', '$em', '$pswd', '$d', '0')");
                            die("<h2>Welcome to MySite</h2>Login to your account to get started....");
                        }
                    }
                } else {
                    echo "Your passwords don't match!";

                }
            } else {
                echo "Please fill in all fields";
            }
        }
    }
}

?>

繰り返しますが、私はこれを何日も修正しようとしてきましたが、何が起こっているのかまだわかりません.

4

2 に答える 2

1

クエリがカウントするオブジェクトを返さないため、エラーが発生します。失敗しています。

クエリの構文が無効です:

$u_check = mysql_query ("'SELECT' username 'FROM' users 'WHERE' username='$un'");

次のようにする必要があります。

$u_check = mysql_query ("SELECT `username` FROM `users` WHERE `username`='$un'");

そして、人への愛情のために、入力をサニタイズし、 PDOまたはmysqliに切り替えて、mysql_ 関数が非推奨になっていることを確認してください。

これは非常に基本的な PDO の例です。これは、基本的なチュートリアルに従ってデータベースに接続したことを前提としています。

//assumes $db is your PDO connection
$sql = $db->prepare('SELECT `username` FROM `users` WHERE `username`=:username');
$sql->bindParam(':username', $un, PDO::PARAM_STR);
$sql->execute();
于 2013-05-22T02:26:21.860 に答える
1

PDO を使用する

$sql= "SELECT `username` FROM `users` WHERE `username` = :username"; 
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':username', $un, PDO::PARAM_STR); 
$stmt->execute();
于 2013-05-22T02:36:13.997 に答える