2013-08-03 23 views
0

我想用PHP和Javascript警報框創建一個註冊驗證系統(以確保註冊用戶具有有效信息)。每次用戶沒有正確執行字段時,我都希望他得到一個警告框,說明它不正確。因此,它是:在PHP中註冊驗證,使用Javascript警報框

代碼#1 - 用於在PHP中生成警報(這是針對按鈕中的事件)。

function alert($string) 
{ 
    echo "javascript:alert('$string');"; 
} 

代碼#2 - PHP放在onclick=""屬性中提交按鈕。

if (!isset($fname) || empty($fname)) 
{ 
alert('Please enter your first name!'); 
} 

elseif (!isset($lname) || empty($lname)) 
{ 
    alert('Please enter your last name!'); 
} 


elseif (!isset($gender) || empty($gender)) 
{ 
    alert('Please specify your gender!'); 
} 

elseif (!isset($phone) || empty($phone) || strlen($phone) != 10) 
{ 
    alert('Please enter your correct Phone Number!'); 
} 

elseif (!isset($user) || empty($user) || strlen($user) > 10 || strlen($user) < 5) 
{ 
    alert('Please enter a Username that is 5-10 characters long!'); 
} 

elseif (!isset($pass) || empty($pass) || strlen($pass) > 10 || strlen($pass) < 5) 
{ 
    alert('Please enter a Password that is 5-10 characters long!'); 
} 

elseif (!isset($repass) || empty($repass) || $pass != $repass) 
{ 
    alert('Please repeat your Password'); 
} 

    else 
    { 
     $query = mysql_query($query_send_form); 
     query_error($query); 
    } 

正如你可能已經意識到,這些變量實際上是等於字段的形式$_POST值。

所以問題是,按鈕的onclick總是等於onclick=" javascript:alert('Please enter your first name!');"它不會改變。

請不要給我一個完整的JavaScript替代系統,我想現在學習PHP。

感謝您的幫助提前。

編輯#1

我忘了提一個重要的事情是,表格的目標僅僅是在同一頁上的iframe,使內容而被顯示的錯誤,他的用戶輸入住宿。

<form method="post" target="frame" action="register.php">

register.php是相同的頁面裏的HTML表單和驗證PHP是。

EDIT#2

的數據被張貼。以下是聲明的可變因素:

@$fname = $_POST['fname']; 
@$lname = $_POST['lname']; 
@$gender = $_POST['gender']; 
@$phone = $_POST['phone']; 
@$user = $_POST['user']; 
@$pass = $_POST['pass']; 
@$repass = $_POST['repass']; 
+0

你確定數據正在'POST'ed嗎? – DevlshOne

+1

我知道你正在嘗試學習PHP,但這不是通常的做法。 PHP在服務器端工作,所以爲了使它工作,它在表單提交後接收數據,然後將錯誤作爲點擊事件插入。與此相關的一個問題是用戶在嘗試再次提交表單之前不會看到錯誤。其次,在關閉警報框之後,無論如何都要提交表單,然後纔有機會更改任何內容,因爲您需要通過onclick事件返回FALSE。 –

回答

1

你真的不應該做這種驗證這樣的...因爲邏輯規則,它是用JavaScript在正面做了你要告訴用戶什麼

隨時都可以是無效的。這裏有一些用jQuery或JavaScript編寫的很好的插件。你也可以自己做一些簡單的事情。這有助於用戶,因爲他們不必提交頁面以發現他們的密碼不夠長。

由於sql注入,您仍然需要在POST之後以及在將數據放入數據庫之前進行驗證。這種驗證有點不同,因爲你只是在尋找有害的東西。

這個例子是獨立的。郵件轉到div而不是警報。

<?php 
$message = ""; 
$submit = (isset($_POST['submit'])) ? $_POST['submit'] : ''; 
if (!empty($submit)) { 
    $message = "thanks for submitting the form!"; 
} 
?><div id="errors"><?php echo $message ?></div> 
<form id="my_form" name="my_form" action="" method="post"> 
    <div style="display:inline-block;">Name<br/> 
     <input name="first_name" type="text" size=8 class="required"/> 
     <input name="last_name" type="text" size=16 class="required"/> 
    </div> 
    <div style="display:inline-block;">Gender<br/> 
     <select name="gender" class="required"> 
      <option value=''></option> 
      <option value='M'>M</option> 
      <option value='F'>F</option> 
     </select> 
    </div> 
    <div style="display:inline-block;">Phone Number<br/><input name="phone" type="text" class="required"/></div><br/> 
    <div style="display:inline-block;">Username<br/><input name="username" type="text" class="required"/></div><br/> 
    <div style="display:inline-block;">Password<br/><input name="password" type="password" class="required"/></div> 
    <div style="display:inline-block;">Repeat Password<br/><input name="repeat_password" type="password" class="required"/></div><br/> 
    <div style="display:inline-block;">Description<br/><textarea name="description"></textarea></div><br/> 
    <button type="submit">Submit</button> 
    <input type="hidden" name="submit" value="submit"/> 
</form> 

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 

<style> .invalid {border-color:red}</style> 

<script> 

$(document).ready(function(){ 

    $("#my_form").submit(function(e){ 
     var messages = perform_validation(); 
     if (messages.length!==0) { 
     $("#errors").empty(); 
     $.each(messages,function(i,msg){ 
      $("#errors").append(msg+"<br/>"); 
     }); 
     e.preventDefault(); 
     return false; 
     } 
     // else continue to submit form normally 
    }); 

    function perform_validation() 
    { 
     var messages = []; 

     $("#my_form :input.required").removeClass("invalid"); 

     $("#my_form :input.required").each(function(){ 
     if ($(this).val().length===0) { 
      $(this).addClass("invalid"); 
      var name = $(this).attr('name').replace('_',' '); 
      messages.push("Please provide a "+name+"."); 
     } 
     }); 
     var password = $("input[name='password']").val(); 

     if (!(password.length>=5 && password.length<=10)) { 
     messages.push("Password length must be between 5 and 10 characters."); 
     } 
     else { 
     if (password!=$("input[name='repeat_password']").val()) { 
      messages.push("Repeat password doesn't match first password."); 
     } 
     } 
     return messages; 
    } 

}); 
</script> 
0

除非你有魔術引號打開(我希望你不這樣做),你的價值觀如$fname將永遠是不確定的。你可能想用$_POST['fname']替換那些。

請注意,如果未設置該值,則只能使用empty()而不使用!isset(),因爲empty()將返回FALSE

+0

是的,但我在PHP之前有這樣的代碼補丁: '@ $ fname = $ _POST ['fname']; \t @ $ lname = $ _POST ['lname']; \t @ $ gender = $ _POST ['gender']; \t @ $ phone = $ _POST ['phone']; \t @ $ user = $ _POST ['user']; \t @ $ pass = $ _POST ['pass']; \t @ $ repass = $ _POST ['repass'];' –

+0

這有什麼問題嗎? –

+0

嗯,我建議刪除'@'錯誤抑制。如果出現錯誤,您需要了解它。但除此之外,沒有。有沒有其他的代碼,你沒有發佈?有兩種可能性:1)值不會被髮布('print_r()'頂部的$ _POST變量來驗證你是否獲得了值),2)某物正在改變'$ fname的值'在你的代碼中的其他地方,3)其他的事情我不知道,因爲其餘的代碼沒有被髮布:-)。除此之外,你發佈的內容是正確的。 –