<p>管理者用のログインページを作成していますが、PHP コードの while ループが機能しません。コードをここに残しておきます (コードにスペイン語が含まれていて申し訳ありません) </p>
<pre class="brush:php;toolbar:false;">//接続を作成する
$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 "ユーザーが指定されていません";
}</pre>
<li><p>while ループをより単純な割り当てに置き換える方法はありますか (これはログイン ページであり、1 つのアカウントのみをチェックするため)</p>
</li>
<li><p>while ループが機能しないのはなぜですか?以前に別のページで同じコードを使用したことがありますが、まったく問題なく動作し、論理エラーは見られませんでした。 </p>
</li>
</ul>
<p>これは関数を含むスクリプトから送信されたリクエストであり、Php ページへのリクエストを使用しています。その後、エコーを読み取り、画面に表示します。 (この情報が必要な方がいる場合に備えて)</p>
while
ループを使用する代わりに、fetch_object()
を一度キャプチャし、if
を使用して真の結果が得られるかどうかをテストします。プリペアドステートメントも使用する必要があります。その方法を以下に示します。
クリアテキストのパスワードを保存せず、
リーリーpassword_hash()
とpassword_verify()
を使用する必要があります。以下ではそのコードは示しません (登録スクリプトに対応する変更が必要になります)。