管理者用のログインページを作成していますが、PHP コードの while ループが機能しません。コードをここに残しておきます (コードにスペイン語が含まれていて申し訳ありません)
//接続を作成する $conn = mysqli_connect($servername, $username, $password, $dbname); // 接続を確認する if (!$conn) { echo "サーバーへの接続中にエラーが発生しました。"; } $ユーザー名 = $_POST["ユーザー名"]; if ($ユーザー名 != "") { $パスワード = $_POST["パスワード"]; $accountLevel = $_POST["accountLevel"]; $content = $_POST["コンテンツ"]; $sql = "SELECT パスワード、アカウントレベル FROM `accounts1` WHERE username='".$username."'"; $result = mysqli_query($conn, $sql); while ($post = $result->fetch_object()) { if ($post->パスワード != $パスワード) { エコー「パスワードが間違っています」; }else if ($post->accountLevel != $accountLevel) { echo "エラー: 公開できません。アカウント レベルのエラーです。"; }それ以外{ $sql = "INSERT INTO `blogposts`(`title`, `contentHTML`, `publishDate`, `commentSection`, `likes`, `dislikes`, `publisher`, `selector`) VALUES ('','". $_POST['コンテンツ']."','".$_POST['公開日']."','',0,0,'".$_POST['ユーザー名']."','')" ; /*$fetchObj = mysqli_fetch_object($QueryResult); var_dump($fetchObj);*/ エコー「送信済み」; } } }それ以外{ echo "ユーザーが指定されていません"; }
while ループをより単純な割り当てに置き換える方法はありますか (これはログイン ページであり、1 つのアカウントのみをチェックするため)
while ループが機能しないのはなぜですか?以前に別のページで同じコードを使用したことがありますが、まったく問題なく動作し、論理エラーは見られませんでした。
これは関数を含むスクリプトから送信されたリクエストであり、Php ページへのリクエストを使用しています。その後、エコーを読み取り、画面に表示します。 (この情報が必要な方がいる場合に備えて)
while
ループを使用する代わりに、fetch_object()
を一度キャプチャし、if
を使用して真の結果が得られるかどうかをテストします。プリペアドステートメントも使用する必要があります。その方法を以下に示します。
クリアテキストのパスワードを保存せず、
リーリーpassword_hash()
とpassword_verify()
を使用する必要があります。以下ではそのコードは示しません (登録スクリプトに対応する変更が必要になります)。