suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Bei Verwendung des Fetch-Objekts in PHP kann die While-Schleife nicht verwendet werden, um wirksam zu werden

<p>Ich erstelle eine Anmeldeseite für den Administrator, aber die While-Schleife im PHP-Code funktioniert nicht. Ich lasse den Code hier (Entschuldigung für das Spanisch im Code) </p> <pre class="brush:php;toolbar:false;">//Eine Verbindung erstellen $conn = mysqli_connect($servername, $username, $password, $dbname); // Verbindung prüfen if (!$conn) { echo „Beim Herstellen der Verbindung zum Server ist ein Fehler aufgetreten.“; } $username = $_POST["username"]; if ($username != "") { $password = $_POST["password"]; $accountLevel = $_POST["accountLevel"]; $content = $_POST["content"]; $sql = "SELECT passwort, accountLevel FROM `accounts1` WHERE username='".$username."'"; $result = mysqli_query($conn, $sql); while ($post = $result->fetch_object()) { if ($post->password != $password) { echo „Falsches Passwort“; }else if ($post->accountLevel != $accountLevel) { echo „Fehler: Veröffentlichung nicht möglich. Fehler auf Kontoebene.“; }anders{ $sql = "INSERT INTO `blogposts`(`title`, `contentHTML`, `publishDate`, `commentSection`, `likes`, `dislikes`, `publisher`, `selector`) VALUES ('','". $_POST['content']."','".$_POST['publishDate']."','',0,0,'".$_POST['username']."','')" ; /*$fetchObj = mysqli_fetch_object($QueryResult); var_dump($fetchObj);*/ Echo „gesendet“; } } }anders{ echo „Kein Benutzer angegeben“; }</pre> <ul> <li><p>Gibt es eine Möglichkeit, die while-Schleife durch eine einfachere Zuweisung zu ersetzen (da es sich um eine Anmeldeseite handelt und nur ein Konto überprüft)</p> </li> <li><p>Warum funktioniert die while-Schleife nicht? Ich habe den gleichen Code schon einmal auf einer anderen Seite verwendet und er hat einwandfrei funktioniert und ich habe keine logischen Fehler gesehen. </p> </li> </ul> <p>Dies ist eine Anfrage, die von einem Skript mit einer Funktion gesendet wird, und ich verwende eine Anfrage an eine PHP-Seite. Danach liest es das Echo und zeigt es auf dem Bildschirm an. (Nur für den Fall, dass jemand diese Informationen benötigt)</p>
P粉803444331P粉803444331508 Tage vor579

Antworte allen(1)Ich werde antworten

  • P粉200138510

    P粉2001385102023-08-17 10:39:22

    而不是使用while循环,只需一次捕获fetch_object(),并使用if测试是否得到真值结果。

    您还应该使用预处理语句,我在下面展示了如何做。

    您不应该存储明文密码,应该使用password_hash()password_verify()。我没有在下面显示该代码(它将需要对您的注册脚本进行相应更改)。

    $username = $_POST["username"];
    if ($username != "") {
        $password = $_POST["password"];
        $accountLevel = $_POST["accountLevel"];
        $content = $_POST["content"];
        $sql = "SELECT password, accountLevel FROM `accounts1` WHERE username=?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("s", $username);
        $stmt->execute();
        $result = $stmt->get_result();
        $post = $result->fetch_object();
        if ($post) {
            if ($post->password != $password) {
                echo "Usuario o Contraseña incorrecta";
            }else if ($post->accountLevel != $accountLevel) {
                echo "Error: No se pudo Publicar. Error de nivel de cuenta.";
            }else{
                $sql = "INSERT INTO `blogposts`(`title`, `contentHTML`, `publishDate`, `commentSection`, `likes`, `dislikes`, `publisher`, `selector`) VALUES ('',?,?,'',0,0,?,'')";
                $stmt = $conn->prepare($sql);
                $stmt->bind_param("sss", $content, $_POST['publishDate'], $username);
                $stmt->execute();
                echo "Enviado";
            }
        } else {
            echo "Usuario o Contraseña incorrecta";
        }
    }else{
        echo "Usuario no indicado";
    }

    Antwort
    0
  • StornierenAntwort