0

私はMySqlの使用に非常に慣れておらず、データベースから値を取得するのに問題があります。私はそれを正しい方法で行っているという印象を受けましたが、私のエコーステートメントは何も出力しません。

助けていただければ幸いです。私のコードは以下の通りです。ユーザー入力のサニタイズなど、後でセキュリティを追加する必要があることはわかっています。

<?php
            $email = $_POST['email'];
            $password = $_POST['password'];
            $hashedPass = sha1($password);

            if ((!isset($email)) || (!isset($password))) {
                //Visitor needs to enter a name and password
                echo "Data not provided";
            } else {
                echo "Received details $email and $password <br/>";
                // connect to mysql
                $mysql = mysqli_connect("localhost", "root", "root");
                if(!$mysql) {
                echo "Cannot connect to PHPMyAdmin.";
                exit;
                } else {
                echo "Connected to phpmyadmin <br/>";
                }
            }
            // select the appropriate database
            $selected = mysqli_select_db($mysql, "languageapp");
            if(!$selected) {
                echo "Cannot select database.";
                exit;
            } else {
                echo "DB Selected"; 
            }
            // query the database to see if there is a record which matches
            $query = "select count(*) from user where email = '".$email."' and password = '".$hashedPass."'";
            $result = mysqli_query($mysql, $query);
            if(!$result) {
                echo "Cannot run query.";
                exit;
            }

            $row = mysqli_fetch_row($result);
            $count = $row[0];

            $userdata = mysqli_fetch_array($result, MYSQLI_BOTH);
            echo $userdata[3];
            echo $userdata['firstName'];

            if ($count > 0) {   
                echo "<h1>Login successful!</h1>";
                echo "<p>Welcome.</p>";
                echo "<p>This page is only visible when the correct details are provided.</p>";
            } else {
                // visitor's name and password combination are not correct
                echo "<h1>Login unsuccessful!</h1>";
                echo "<p>You are not authorized to access this system.</p>";
            }
            ?>
4

1 に答える 1

1

問題は、* fetch *ファミリ関数を2回呼び出すと、$userdataが空になることだと思います。

ドキュメントから、mysql_fetch_rowは次の行をフェッチし、内部データポインタを先に移動します。したがって、mysqli_fetch_array($ result、MYSQLI_BOTH)を呼び出し、ユーザー/パスワードが一意であるとすると、取得するものは何もありません。また、あなたが行ったもう1つの間違いは、SELECTが実際のユーザーデータを取得せず、ユーザーとパスワードの組み合わせのカウント数だけを取得することです。したがって、データを正しくフェッチしたとしても、ユーザーデータは常に正しくありません。

したがって、クエリを次のようなものに変更します。

 $query = "select * from user where email = '".$email."' and password = '".$hashedPass."' LIMIT 1";

次に、mysql_fetch_arrayを使用してエントリが存在するかどうかを確認してから、ユーザーデータを取得します。

于 2012-07-01T14:33:30.150 に答える