iT邦幫忙

1

PHP網頁 錯誤提示顯示不出來

  • 分享至 

  • xImage

如題,我要做帳號密碼註冊的頁面,需檢查兩次帳號密碼是否輸入一致,若不一致出現錯誤提示於輸入格後方,不知道為什麼我按下註冊後上面的HTML都還在但就是不會刷新$errus的值並顯示在頁面上,我問chatpgt也沒有答案求大大幫忙!!感激不盡><
p.s. vardump($errus)有顯示"帳號輸入不一致",但帳號輸入格後方是原本的空白
以下為程式碼

<?php
session_start();
print "hello";
$username='';
$password='';
$username2='';
$password2='';
$errus='';
$errpa='';
$html=<<<EOT
    <form action='login0.php' method='post'>
    <p>請輸入帳號(username):
    <input type='text' name='username' required value=$username>
    <p>請再次輸入帳號(username):
    <input type='text' name='username2' required value=$username2> $errus
    <br><br>
    <p>請輸入密碼(password):
    <input type='password' name='password' required value=$password>
    <p>請再次輸入密碼(password):
    <input type='password' name='password2' required value=$password2> $errpa
    <input type='submit' name='register' value=註冊>
    
    </form>
EOT;
print $html;

mysqli_report(MYSQLI_REPORT_OFF);
if(isset($_POST['register'])&&$link=@mysqli_connect('localhost','root','','users'))
{
    
    if(!empty($_POST['username'])&&!empty($_POST['username2'])&&!empty($_POST['password'])&&!empty($_POST['password2']))
    {
        $username=$_POST['username'];
        $username2=$_POST['username2'];
        $password=$_POST['password'];
        $password2=$_POST['password2'];
        $correct=1;
        
        if($_POST['username']!==$_POST['username2'])
        {
            $errus="<p><font color=red>帳號輸入不一致,請重新輸入!";
            echo $errus;
            //var_dump($errus);
            $correct=0;
            //echo "n";
        }
        if($_POST['password']!==$_POST['password2'])
        {
            $errpa="<p><font color=red>密碼輸入不一致,請重新輸入!";
            echo $errpa;
            $correct=0;
        }
        if($correct)
        {
            echo "a";
            $sql="SELECT username FROM customers WHERE username=?";
            $stmt = mysqli_prepare($link, $sql);
            mysqli_stmt_bind_param($stmt, "s", $username);
            mysqli_stmt_execute($stmt);
            //$result = mysqli_stmt_get_result($stmt);
            //var_dump($result);
            mysqli_stmt_store_result($stmt);  //將結果保存在 stmt 對象中
            $num_rows = mysqli_stmt_num_rows($stmt);  //獲取記錄數
            if($num_rows>0)
            {    $errus="<font color='red'>帳號已被使用,請重新輸入!";               
            }
            else
            {
                
                $sql = "INSERT INTO customers (username, password) VALUES (?, ?)";
                $stmt = mysqli_prepare($link, $sql);
                mysqli_stmt_bind_param($stmt, "ss", $username, $password);
                if (mysqli_stmt_execute($stmt) === TRUE) {
                    //註冊成功後重定向到登錄頁面
                    header("Location: login.php?success=1");
                    //當被重定向到 login1.php 時,URL 中的 ?success=1 會觸發顯示成功訊息。
                    exit();
                }
            }
        }
        
    }

}else print mysqli_connect_error();
?>
hannahyaa iT邦新手 5 級 ‧ 2024-06-15 22:42:07 檢舉
我找到答案了>< 付費的Chatpgt比較聰明是真的!!!!
把HTML的部分放在下面就可以了
Chatgpt:
當用戶提交表單時,瀏覽器發送一個 POST 請求到伺服器。
伺服器上的 PHP 腳本重新執行,這意味著頁面會被刷新,所有 PHP 代碼從頭到尾執行一遍。
PHP 腳本執行順序:
1.PHP 腳本從頭開始執行,首先處理表單提交的數據(檢查和更新錯誤訊息)。
2.然後根據最新的變數狀態生成新的 HTML。
所以原本錯是因為在處理表單提交後,首先顯示了 HTML 表單,其中包含了初始化為空的 $errus 和 $errpa 變數。然後才根據表單提交的數據更新這些變數。這樣會導致在頁面顯示時,這些錯誤訊息變數仍然是空的,因為它們是在 HTML 表單生成後才被更新。
froce iT邦大師 1 級 ‧ 2024-06-17 14:07:32 檢舉
> 需檢查兩次帳號密碼是否輸入一致

這個都要做一次POST也太...
學一下js吧。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答