0

我想使用 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=" javascript:alert('Please enter your first name!');"它不会改变。

请不要给我一个完整的 javascript 替代系统,我现在想学习 PHP。

提前感谢您的帮助。

编辑#1

我忘记提到的一件重要的事情是表单目标只是同一页面上的 iframe,因此用户输入的内容会在显示错误时保留。

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

register.php是表单 HTML 和验证 PHP 所在的同一页面。

编辑#2

正在发布数据。以下是声明的变量:

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

2 回答 2

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>
于 2013-11-06T04:54:24.490 回答
0

除非您打开了魔术引号(我希望您没有打开),否则您的值$fname将始终未定义。您可能想用$_POST['fname'].

附带说明一下,如果未设置该值,您可以使用 just empty()without !isset()since empty()will return 。FALSE

于 2013-08-03T19:11:55.193 回答