我在php和mysql中有一个用户注册表,如下所示。 我需要在用户移动到下一个字段之前验证每个输入字段并且不提交按钮。用户必须在填写完所有字段后提交表单,否则应在填写字段中提示错误? 我怎么能这样做。
例如: - 我需要在填充后验证NIC编号,并且在移动到“名称”字段之后和提交表单之前,应显示格式是否有任何错误。
<form action='register.php' method='post'>
NIC Number : <select class='drdwn1' name='idtype'>
<option value="old">Old</option>
<option value="new">New</option>
</select>
<input type='text' name='nic'/>
Name with Initials : <select class='drdwn1' name='saluation'>
<option value="Mr.">Mr.</option>
<option value="Ms.">Ms.</option>
</select>
<input type='text' name='name' />
Address : <input type='text' name='address' />
Occupation : <input type='text' name='occupation' />
Contact Number : <input type='text' name='contactno'/>
Email Address : <input type='text' name='email' placeholder=''/>
Password : <input type='password' name='password' ></br>
Confirm Password : <input type='password' name='password1' />
<input type='submit' name='submit' value='Submit' >
</form>
<?
php
if (isset($_POST['submit'])){
$Idtype=$_POST['idtype'];
$Nic=$_POST['nic'];
$Saluation=$_POST['saluation'];
$Name=$_POST['name'];
$Address=$_POST['address'];
$Occupation=$_POST['occupation'];
$Contactno=$_POST['contactno'];
$Email=$_POST['email'];
$Username=$_POST['nic'];
$Password=$_POST['password'];
$Password1=$_POST['password1'];
$email = filter_var($Email, FILTER_SANITIZE_EMAIL);
$check=mysqli_query($conn,"select * from user.admin WHERE username='$Username'");
$checkrows=mysqli_num_rows($check);
// Check if User exist
if($checkrows>0) {
echo "<p class='msgp1'>Your username already exist!</p>";
}
// Check if User exist
// Check Manditory fields
else if(empty($_POST['nic'] AND $_POST['email'] AND $_POST['password'])){
echo "<p class='msgp1'>Please fill the mandetory fields!</p>";
}
// Check Manditory fields
// Validate Email
else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo("<p class='msgp1'>$email is not a valid email address!</p>");
}
// Validate Email
//if old ID and and not filled V
else if (strlen($Nic) == '10' AND !preg_match("/^[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[0-9]+[V,X]$/i", $Nic)){
echo "<p class='msgp1'>Should have the letter V or X at the end!</p>";
}
//Validate ID Number
// Validate Password
else if(($_POST['password'] !== $_POST['password1'])){
echo "<p class='msgp1'>Password must mach!</p>";
}
// Validate Password
else{
$sql = "INSERT INTO user.admin (nic, saluation, name, address, city, bday, occupation, contactno, email, username, password) VALUES ('$Nic','$Saluation','$Name','$Address','$Occupation','$Contactno','$Email','$Username','$Password')";
if ($conn->query($sql) === TRUE) {
Echo "Success!";
}
}
}
?>
答案 0 :(得分:0)
使用Javascript!功能强大,可以解决这个问题。 假设你有一个功能 function validateNIC(param){...}
您可以按如下方式使用:
<input type='text' name='nic' onblur="validateNIC(this.value)"/>
我用过&#34; onblur&#34;事件,但您可以根据自己的需要进行自定义。
当然,这只是一种句法控制。如果您想执行诸如数据库查询之类的操作或通常是服务器端控件,则不应该这样做:您应该使用(例如)Ajax技术,与服务器进行异步通信而不提交表单数据。
答案 1 :(得分:0)
您可以使用带有keyup事件的Javascript来执行此操作。
$('input').keyup(function() {
//code...
});
你可以把你想要的所有要求设置在那里。
答案 2 :(得分:0)
首先,表格验证是互联网上许多教程和文档中涵盖的主题,我没有必要重新发明轮子。有趣的是,我无法在Stack Overflow上找到一个完全重复的问题,所以我会给你一个粗略的轮廓,基于this fantastic article on form validation from the MDN(或备份) - 去读它,它会教你一切。
现在有three possible ways of validating a form:
重要的是要了解所有客户端验证都可以被用户轻松禁用或规避,这意味着您绝对必须进行服务器端验证。客户端验证只是额外的便利。
如果要执行客户端验证,最简单的方法是利用现代浏览器的内置功能。这可以通过required
,maxlength
或甚至pattern
等属性来实现,这些属性可以用来形成输入元素。
如果内置解决方案不足以满足您的特定用例,则可以使用JavaScript(或jQuery)解决方案。那里有plenty of options。
答案 3 :(得分:-1)
使用onfocusout
进行客户端验证example
答案 4 :(得分:-1)