Maison  >  Questions et réponses  >  le corps du texte

Lors de l'utilisation de l'objet fetch en PHP, la boucle while ne peut pas être utilisée pour prendre effet

<p>Je crée une page de connexion pour l'administrateur, mais la boucle while dans le code php ne fonctionne pas. Je vais laisser le code ici (désolé pour l'espagnol dans le code) </p> <pre class="brush:php;toolbar:false;">//Créer une connexion $conn = mysqli_connect ($ nom du serveur, $ nom d'utilisateur, $ mot de passe, $ nom de base de données); // Vérifier la connexion si ($conn) { echo "Une erreur s'est produite lors de la connexion au serveur."; } $nom d'utilisateur = $_POST["nom d'utilisateur"]; si ($nom d'utilisateur != "") { $mot de passe = $_POST["mot de passe"]; $accountLevel = $_POST["accountLevel"]; $contenu = $_POST["contenu"]; $sql = "SELECT mot de passe, accountLevel FROM `accounts1` WHERE username='".$username."'"; $result = mysqli_query($conn, $sql); while ($post = $result->fetch_object()) { if ($post->mot de passe != $mot de passe) { echo "Mauvais mot de passe" ; }else if ($post->accountLevel != $accountLevel) { echo "Erreur : publication impossible. Erreur au niveau du compte."; }autre{ $sql = "INSÉRER DANS `blogposts`(`title`, `contentHTML`, `publishDate`, `commentSection`, `likes`, `dislikes`, `publisher`, `selector`) VALEURS ('','". $_POST['content']."','".$_POST['publishDate']."','',0,0,'".$_POST['username']."','')" ; /*$fetchObj = mysqli_fetch_object($QueryResult); var_dump($fetchObj);*/ echo "envoyé" ; } } }autre{ echo "Aucun utilisateur spécifié" ; }</pré> <ul> <li><p>Existe-t-il un moyen de remplacer la boucle while par une affectation plus simple (puisqu'il s'agit d'une page de connexion et qu'elle ne vérifie qu'un seul compte)</p> ≪/li> <li><p>Pourquoi la boucle while ne fonctionne-t-elle pas ? J'ai déjà utilisé le même code sur une autre page et cela a parfaitement fonctionné et je n'ai vu aucune erreur logique. </p> ≪/li> </ul> <p>Il s'agit d'une requête envoyée à partir d'un script avec une fonction et j'utilise une requête vers une page Php. Après cela, il lit l'écho et l'affiche à l'écran. (Juste au cas où quelqu'un aurait besoin de ces informations)</p>
P粉803444331P粉803444331453 Il y a quelques jours539

répondre à tous(1)je répondrai

  • P粉200138510

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

    Au lieu d'utiliser while循环,只需一次捕获fetch_object(),并使用if pour tester si vous obtenez un vrai résultat.

    Vous devez également utiliser des instructions préparées, je montre comment procéder ci-dessous.

    Vous ne devez pas stocker de mots de passe en texte clair, vous devez utiliser password_hash()password_verify(). Je ne montre pas ce code ci-dessous (cela nécessitera des modifications correspondantes dans votre script d'inscription).

    $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";
    }

    répondre
    0
  • Annulerrépondre