iT邦幫忙

0

PHP後端資料驗證

各位大大好,小弟是剛開始接觸程式的新手然後這是我註冊畫面,我雖然有用AJAX驗證過了,但是我故意輸入錯誤的帳號跟開通碼還是會顯示註冊成功但是不會新增到後端的資料庫但是我按下送出按鈕後照樣會跳轉我做的登入頁然後會寫註冊成功,我現在想要寫一個判斷式去驗證帳號跟開通碼輸入正不正確,如果不正確會跳轉回註冊頁,我試過很多方法也去網路上找資料但還是寫不太出來,請問各位大大我該怎麼辦?
這是register.php

    <script>
        $(function() {
            function registerChk(){
                $('.registerChk').remove()
                $.ajax({
                    url:'registerChk.php',
                    type:'post',
                    data:{'account':$('#account').val()},
                    error:function(){
                        alert('ajax err')
                    },
                    success:function(count){
                        if(count==0){
                            $('#account').parent().append('<span class="msg info registerChk">帳號可使用</span>')
                        }else{
                            $('#account').parent().append('<span class="msg err registerChk">此帳號已被申請過囉!!!</span>')
                        }
                    }
                })
            }
            $('#account').keyup(registerChk)
            
            function qrcodeChk(){
                $('.qrcodeChk').remove()
                $.ajax({
                    url:'qrcodeChk.php',
                    type:'post',
                    data:{'qrcode':$('#qrcode').val()},
                    error:function(){
                        alert('ajax err')
                    },
                    success:function(count){
                        if(count==0){
                            $('#qrcode').parent().append('<span class="msg info qrcodeChk">開通碼輸入錯誤!!</span>')
                        }else{
                            $('#qrcode').parent().append('<span class="msg err qrcodeChk">開通碼輸入正確</span>')
                        }
                    }
                })
            }
            $('#qrcode').keyup(qrcodeChk)
            
            
            
            function passwdChk(){
                $('.passwdChk').remove()
                var passwd=$('#passwd').val()
                var passwd2=$('#passwd2').val()
                
                if(passwd!=passwd2){
                    $('#passwd2').parent().append('<span class="msg err passwdChk">密碼不符</span>')
                }
            }
            $('#passwd,#passwd2').keyup(passwdChk)
            
            $('#register').submit(function(){
                $('.err').remove()
                
                registerChk()
                passwdChk()
                
                if($('[name="m_sex"]:checked').val()==undefined){
                    $('[name="m_sex"]').parent().append('<span class="msg err">請選取性別!!</span>')
                }
                
                
                if($('.err').length>0){
                    return false
                }
                
            })
            
        })
    </script>
    <form id="register" name="form" class="dataForm" action="registerQ.php" method="post">
        <h3>加入會員</h3>
        <p>
            <label for="teacher">教師姓名:</label>
            <input type="text" id="teacher" name="teacher" required>
        </p>
        <p>
            <label for="account">帳號:</label>
            <input type="text" id="account" name="account" pattern="(?=^[A-Za-z0-9]{6,12}$)((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))^.*$" title="密碼:6~12英數字組合,至少有一個大寫、小寫英文字母及數字,如 As1234" required><br>
        </p>
        <p>
            <label for="passwd">密碼:</label>
            <input type="password" id="passwd" name="passwd" pattern="(?=^[A-Za-z0-9]{6,12}$)((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))^.*$" title="密碼:6~12英數字組合,至少有一個大寫、小寫英文字母及數字,如 As1234" required><br>
        </p>
        <p>
            <label for="passwd2">確認密碼:</label>
            <input type="password" id="passwd2" name="passwd2" pattern="(?=^[A-Za-z0-9]{6,12}$)((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))^.*$" title="密碼:6~12英數字組合,至少有一個大寫、小寫英文字母及數字,如 As1234" required>
        </p>
        <p>
            <label for="email">eamil:</label>
            <input type="email" t="email" id="email" name="email" required><br>
            <label>正確格式:123@gmail.com</label><br>
        </p>
        <p>
            <label for="cellphone">手機:</label>
            <input type="mobile" id="mobile" name="mobile" maxlength="15" required>
        </p>
        <p>
            <label for="qrcode">開通碼:</label>
            <input type="text" id="qrcode" name="qrcode" maxlength="10"  required><br>
            <label>請輸入10碼開通碼</label>
        </p>
        <p class="formBtn">
            <input type="submit" id="submit" name="register" value="送出">
            <input type="reset" id="reset" value="重填">
        </p>
    </form>
</main>

這是registerQ.php

<?php include_once("SCconnect_db.php"); 

$teacher=$_POST['teacher'];
$account=$_POST['account'];
$passwd=$_POST['passwd'];
$email=$_POST['email'];
$mobile=$_POST['mobile'];
$qrocde=$_POST['qrocde'];

$qry="UPDATE sc_d SET teacher='$teacher',account='$account',passwd='$passwd',email='$email',mobile='$mobile' WHERE qrcode='$qrcode'";

if(mysqli_query($dbc,$qry)){
    header('location:login.php?sign=1');
}else{
    header('location:login.php?signErr=1');
}

mysqli_close($dbc);

?>

這是registerChk.php

<?php
include_once('SCconnect_db.php');

$account=$_POST['account'];

$qry="SELECT COUNT* FROM sc_d WHERE account='$account'";

$userCount=mysqli_num_rows(mysqli_query($dbc,$qry));

echo $userCount;

?>
看更多先前的討論...收起先前的討論...
淺水員 iT邦新手 2 級 ‧ 2019-02-20 00:15:27 檢舉
主要是 registerQ.php 這檔案的問題吧
淺水員您好,我也覺得是 registerQ.php這邊有問題,但是我試過很多方法都不行,我想要的樣子是如果帳號重複跟開通碼輸入錯誤的話不能讓他跳轉到下一頁,我目前是想直接用PHP的if判斷式但是我昨天試著打結果也不行,這苦惱我好久
淺水員 iT邦新手 2 級 ‧ 2019-02-20 09:42:10 檢舉
先搜尋「PHP SESSION」,用 SESSION 處理使用者是否登入的判斷。
淺水員您好不太懂您意思先搜尋PHP SESSION怎麼搜尋?
淺水員 iT邦新手 2 級 ‧ 2019-02-20 10:18:50 檢舉
用搜尋引擎搜尋,因為網路是無狀態的。在我們跟伺服器拿完網頁之後,彼此就不記得誰是誰了。當表單提交時又是另一個新的相遇。為了解決記不住誰是誰的問題,會用到 session 。因為也有自己的事情在做,所以想說你先自己找相關資料看一下。
HI~ 我覺得你參考的教學文件都有點舊了 這個系列文你參考看看
https://ithelp.ithome.com.tw/users/20107394/ironman/1332

應該會對你很有幫助
hijapan1234 您好你貼的網址真的滿有幫助的,謝謝您!!
jackabula23 我也是小菜鳥一個 一起加油!!

2 個回答

0
程式狗
iT邦新手 4 級 ‧ 2019-02-20 08:52:23
最佳解答

以驗證帳號做說明,registerChk.php檔案內容如下,用這方式就可以得到最基本的驗證帳號是否存在。

<?php
    $account = $_POST['account'];
    
    $sql = 'SELECT COUNT(*) FROM talbe WHERE account = ' . $account . ' LIMIT 1';
    $count = $db->getOne($sql); // 請使用你的取得sql資料方式
    
    // 帳號已存在
    if ($count > 0) {
        
    // 帳號不存在
    } else {
        
    }
    
    echo $count;
看更多先前的回應...收起先前的回應...

Aka程式狗您好registerChk.php這個檔案我已經附在上面,我現在已經有AJAX幫我驗證帳號跟開通碼有沒有重複,但是我現在不管有沒有輸入錯誤都會註冊成功跳轉到下一頁,我是想要輸入錯誤不要讓他跳轉到下一頁直到使用者輸入正確,我有想過用JS的funcion函式跟PHP的if判斷式,都試過沒有成功,不知道可不可以從這句再多家一具跳轉回原頁的程式,還是表單那邊要再寫一些點擊事件if(count==0){ $('#qrcode').parent().append('<span class="msg info qrcodeChk">開通碼輸入錯誤!!</span>'),再麻煩您指點迷津了,感恩

程式狗 iT邦新手 4 級 ‧ 2019-02-20 16:30:38 檢舉

ajax的驗證出發點是給使用者方便,但你的registerQ.php卻沒有寫任何的資料驗證,再來我也不曉得你的qrcode是怎麼產生,為何在WHERE加上qrcode作為更新條件?一步一步除錯,先拿掉你的ajax驗證,穩穩的用傳統form submit()到registerQ.php,我想你就會知道錯在哪裡了。

Aka程式狗 您好這幾天研究後我已經把問題解決了也知道問題在哪裡了,感謝您!

程式狗 iT邦新手 4 級 ‧ 2019-02-25 14:50:02 檢舉

好的。

0
浩瀚星空
iT邦大師 1 級 ‧ 2019-02-20 10:45:41

那個,說真的,這真的不知道要從何教起才行。

講明白一點,目前你的程式碥看起來。就像是一種組裝錯誤的玩具。
該有的都有,就是裝錯地方了。

說真的,要教你改你目前的應用方式。
我還真不知道該從何改起。

先不考量淺水員跟你說的session或cookie的問題。
一個認証發送兩次ajax。就是一個大錯誤了。(瀏覽器可是有最大並發量)
為何不要一次送進去處理就好。非得要一次的一個?

其實我明白,你因為東抄西抄,只看到一組一組送的demo方式。但並不了解其應用。
所以只會依樣劃葫蘆。再copy一個出來改。

所以,這就是我不知道該從何教起的原因。
我是強烈建議你。先全打掉,將你目前所學到的,先當成知識。
再找一篇重新來過吧。

我要發表回答

立即登入回答