我建立了我的网站的登录系统,我需要检查,如果在一个窗体的所有字段填写的方式。 我也有一个错误消息的问题,说我的电子邮件是不正确的格式。
<?php
$con = mysql_connect(localhost, 262096, 9201999);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("262096", $con);
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$username = $_POST['username'];
$password = $_POST['password'];
$passwordconf = $_POST['passwordconf'];
$email = $_POST['email'];
$securityq = $_POST['securityq'];
$qanswer = $_POST['qanswer'];
if(empty($firstname) || empty($lastname) || empty($username) || empty($password) ||
empty($passwordconf) || empty($email) || empty($securityq) || empty($qanswer))
{
echo "You did not fill out the required fields.";
}
$uname = "SELECT * FROM users WHERE username='{$username}'";
$unamequery = mysql_query($uname) or die(mysql_error());
if(mysql_num_rows($unamequery) > 0)
{
echo "The username you entered is already taken";
}
$emailfind = "SELECT * FROM users WHERE email='{$email}'";
$emailquery = mysql_query($emailfind) or die(mysql_error());
if(mysql_num_rows($emailquery) > 0)
{
echo "The email you entered is already registered";
}
if($password != $passwordconf)
{
echo "The passwords you entered do not match";
}
$regex = "/^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+.[a-z]{2,}$/i";
if(!preg_match($regex, $email))
{
echo "The email you entered is not in name@domain format";
}
Answer 1:
当使用大的形式,我建议创建与所述表单字段的数组:
$fields = array('firstname', 'lastname', 'username', 'password', 'passwordconf', 'email', 'securityq', 'qanswer');
$error = false; //No errors yet
foreach($fields AS $fieldname) { //Loop trough each field
if(!isset($_POST[$fieldname]) || empty($_POST[$fieldname])) {
echo 'Field '.$fieldname.' misses!<br />'; //Display error with field
$error = true; //Yup there are errors
}
}
if(!$error) { //Only create queries when no error occurs
//Create queries....
}
Answer 2:
通过查看你的代码看起来正在使用服务器端验证基本验证。
你为什么不使用jQuery尝试客户端验证
http://docs.jquery.com/Plugins/Validation#Options_for_the_validate.28.29_method
Answer 3:
首先使用mysql_real_escape_string()来避免MYSQL注射:
...
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
...
并检查一个字段是为了返回错误或消息只是做这个(简单的例子)空:
if (!(empty($_POST['firstname']))){
execute some code....
}
else {
execute some code...
}
希望帮助
Answer 4:
没有与此代码的多个问题:
- 它是不安全的。
- 你是显示错误消息,但仍代码继续执行,因此即使用户名为空,它将执行你的选择查询。
- 由于原因二,几乎所有下面的查询可能会失败。
所以,你要停在这里
if(empty($firstname) || empty($lastname) || empty($username) || empty($password) || empty($passwordconf) || empty($email) || empty($securityq) || empty($qanswer))
{
echo "You did not fill out the required fields.";
die(); // Note this
}
Answer 5:
使用一个简单的if语句,看看是否有任何用户提交的字段是空的。 例如,要检查如果用户名字段为空:
$username = $_POST['username'];
if ($username == "") {
echo "Username field is empty! <a href='page.php'>Go Back</a>
{
else {
echo "The username field has text in it. It is not empty.";
}
Answer 6:
如果您正在使用一个数据库做任何事情,你应该净化你的输入。 至于检查POST值。 如果你需要的所有页面上的帖子可以完成,你可以尝试通过$ _ POST循环和检查每一个。 如果你是呼应,有一个错误,你也应该停止执行。 请不要听别人说用javascript对于这一点,你需要强大的服务器端验证你担心的JavaScript之前!
foreach($_POST as $key => $value) {
if(empty($value)) {
echo "Error, not all values given.";
die;
}
}
不过,我会建议你检查个别职位更深入地也。 确保他们的用户名和密码有正确的字符..和使用mysql_escape_string($str)
如果你是它查询到数据库。
Answer 7:
ü可能想使用isset()函数和空()函数
//! means NOT so: exists and NOT empty
if(isset($_POST['firstname']) && !empty($_POST['firstname'])) {
$firstname = $_POST['firstname'];
//Do something with $firstname
}
请记住,上面的代码仅仅是一个例子。 它很好的开始,但在实时你将不得不做很多更安全问题。 另外,还要确保让代码终止或跳过查询时验证失败
Answer 8:
if(in_array("",$_POST)){
//this will check the whole post data if any field is empty.
echo 'form is empty';
echo 'some error message';
exit;
}else{
echo "form is not empty";
//some code
}
文章来源: How to check if any fields in a form are empty