PHP中使用fetch物件時,無法使用while循環生效
P粉803444331
P粉803444331 2023-08-16 11:49:58
0
1
533
<p>我正在為管理員製作一個登入頁面,但是php程式碼中的while循環不起作用。我將在這裡留下代碼(對於代碼中的西班牙語我很抱歉)</p> <pre class="brush:php;toolbar:false;">// 建立連接 $conn = mysqli_connect($servername, $username, $password, $dbname); // 檢查連接 if (!$conn) { echo "連接伺服器時發生錯誤。"; } $username = $_POST["username"]; if ($username != "") { $password = $_POST["password"]; $accountLevel = $_POST["accountLevel"]; $content = $_POST["content"]; $sql = "SELECT password, accountLevel FROM `accounts1` WHERE 用戶name='".$username."'"; $result = mysqli_query($conn, $sql); while ($post = $result->fetch_object()) { if ($post->password != $password) { echo "密碼錯誤"; }else if ($post->accountLevel != $accountLevel) { echo "錯誤:無法發佈。帳戶層級錯誤。"; }else{ $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 "已發送"; } } }else{ echo "未指定使用者"; }</pre> <ul> <li><p>有沒有辦法用更簡單的賦值方式取代while循環(因為它是登錄頁面,只檢查一個帳戶)</p> </li> <li><p>為什麼while循環不起作用?我之前在另一個頁面使用過相同的程式碼,它完全正常工作,而且我沒有看到任何邏輯錯誤。 </p> </li> </ul> <p>這是一個從帶有函數的腳本發送的請求,並且我使用請求到Php頁面。之後它會讀取echo並在螢幕上顯示。 (只是為了防止有人需要這些資訊)</p>
P粉803444331
P粉803444331

全部回覆(1)
P粉200138510

而不是使用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";
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!