Я создаю систему входа для моего сайта, и мне нужен способ проверить, заполнены ли все поля в форме. У меня также есть проблема с сообщением об ошибке: мой адрес электронной почты не в правильном формате.
<?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]+)*)+.[az]{2,}$/i"; if(!preg_match($regex, $email)) { echo "The email you entered is not in name@domain format"; }
При использовании больших форм я рекомендую создать массив с полями формы:
$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.... }
Посмотрев на свой код, похоже, вы используете проверку на стороне сервера для основных валидаций.
почему бы вам не попробовать проверку на стороне клиента с помощью JQuery
http://docs.jquery.com/Plugins/Validation#Options_for_the_validate.28.29_method
Прежде всего используйте 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... }
надеюсь, это поможет
С этим кодом возникает несколько проблем:
Итак, вы должны остановиться здесь
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 }
Используйте простой оператор 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."; }
Если вы делаете что-либо с базой данных, вы должны дезинформировать свой вход. Что касается проверки значений POST. Если вам нужно, чтобы все сообщения на этой странице были заполнены, вы можете попробовать выполнить цикл через $ _POST и проверить каждый. Вы также должны остановить выполнение, если вы повторяете, что произошла ошибка. И ПОЖАЛУЙСТА, не слушайте людей, которые говорят, что используют javascript для этого, вам нужна сильная проверка на стороне сервера, прежде чем вы будете беспокоиться о javascript!
foreach($_POST as $key => $value) { if(empty($value)) { echo "Error, not all values given."; die; } }
Но я бы посоветовал вам также проверять отдельные сообщения более подробно. Убедитесь, что их имя пользователя и пароль имеют правильные символы .. и используйте mysql_escape_string($str)
если вы запрашиваете его в базе данных.
U может захотеть использовать функции isset () и empty ()
//! means NOT so: exists and NOT empty if(isset($_POST['firstname']) && !empty($_POST['firstname'])) { $firstname = $_POST['firstname']; //Do something with $firstname }
Имейте в виду, что приведенный выше код является лишь примером. С этим приятно начать, но в режиме реального времени вам придется больше уделять больше внимания безопасности. Также не забудьте, чтобы код убивал или пропускал запросы при неудачной проверке
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 }