2013-08-03 21 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)其他的事情我不知道,因为其余的代码没有被发布:-)。除此之外,你发布的内容是正确的。 –