Rumah  >  Soal Jawab  >  teks badan

Apabila menggunakan objek ambil dalam PHP, gelung while tidak boleh digunakan untuk berkuat kuasa

<p>Saya sedang membuat halaman log masuk untuk pentadbir, tetapi gelung while dalam kod php tidak berfungsi. Saya akan meninggalkan kod di sini (maaf untuk bahasa Sepanyol dalam kod) </p> <pre class="brush:php;toolbar:false;">//Buat sambungan $conn = mysqli_connect($nama pelayan, $nama pengguna, $kata laluan, $dbname); // Semak sambungan jika (!$conn) { echo "Ralat berlaku semasa menyambung ke pelayan."; } $nama pengguna = $_POST["nama pengguna"]; jika ($nama pengguna != "") { $kata laluan = $_POST["kata laluan"]; $accountLevel = $_POST["accountLevel"]; $kandungan = $_POST["kandungan"]; $sql = "PILIH kata laluan, Tahap akaun DARI `accounts1` WHERE nama pengguna='".$nama pengguna."'"; $result = mysqli_query($conn, $sql); manakala ($post = $result->fetch_object()) { if ($post->password != $password) { echo "Kata laluan salah"; }lain jika ($post->accountLevel != $accountLevel) { echo "Ralat: Tidak dapat diterbitkan. Ralat peringkat akaun."; }lain{ $sql = "MASUKKAN KE DALAM `blogposts`(`title`, `contentHTML`, `publishDate`, `commentSection`, `likes`, `dislikes`, `publisher`, `selector`) NILAI ('','". $_POST['kandungan']."','".$_POST['publishDate']."','',0,0,'".$_POST['username']."','')" ; /*$fetchObj = mysqli_fetch_object($QueryResult); var_dump($fetchObj);*/ gema "dihantar"; } } }lain{ echo "Tiada pengguna dinyatakan"; }</pre> <ul> <li><p>Adakah terdapat cara untuk menggantikan gelung while dengan tugasan yang lebih mudah (memandangkan ia adalah halaman log masuk dan hanya menyemak satu akaun)</p> </li> <li><p>Mengapa gelung while tidak berfungsi? Saya telah menggunakan kod yang sama sebelum ini pada halaman lain dan ia berfungsi dengan baik dan saya tidak melihat sebarang ralat logik. </p> </li> </ul> <p>Ini ialah permintaan yang dihantar daripada skrip dengan fungsi dan saya menggunakan permintaan ke halaman Php. Selepas itu ia membaca gema dan memaparkannya pada skrin. (Sekiranya sesiapa memerlukan maklumat ini)</p>
P粉803444331P粉803444331403 hari yang lalu466

membalas semua(1)saya akan balas

  • P粉200138510

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

    Daripada menggunakan while循环,只需一次捕获fetch_object(),并使用if untuk menguji sama ada anda mendapat hasil yang benar.

    Anda juga harus menggunakan pernyataan yang disediakan, saya tunjukkan cara melakukannya di bawah.

    Anda tidak boleh menyimpan kata laluan teks yang jelas, anda harus menggunakan password_hash()password_verify(). Saya tidak menunjukkan kod itu di bawah (ia memerlukan perubahan yang sepadan dengan skrip pendaftaran anda).

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

    balas
    0
  • Batalbalas