Здравствуйте. Вот что то поковырял, начинаю вникать что к чему) Посмотрите пожалуйста, если не трудно, все вроде работает... Хотелось бы критики =) Код (PHP): <?php //Проверка введеных данных пользователем if (!$_POST['name']) { echo "Вы не заполнили форму имя!"; exit(); } else { $name = filter_input(INPUT_POST, 'name',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW); } echo "<br>"; if (!$_POST['email']) { echo "Вы не заполнели форму E-mail"; exit(); } else { $email= filter_input(INPUT_POST,'email', FILTER_VALIDATE_EMAIL); } //Проверка корректности эл.почты if($_POST["email"]&& !preg_match("/^[a-z0-9\._-]+@(.{1,}\.)*[a-z0-9]+[a-z0-9-]*[a-z0-9]+\.[a-z]{2,6}$/i",$_POST["email"])) { echo "Введите корректный формат электронной почты"; exit(); } if(!$_POST['pass']) { echo "Вы не заполнили форму Пароль"; exit(); } else { $pass = filter_input(INPUT_POST, 'pass',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW); echo "<br>"; } if(!$_POST['age']) { echo "Вы не заполнили форму возраст"; exit(); } else { $age =filter_input(INPUT_POST, 'age',FILTER_VALIDATE_INT, array('options'=>array('min_range'=>10,'max_range'=>80))); echo "<br>"; } if(!$_POST['sex']) { echo "Вы не заполнили форму пол"; exit(); } else { $sex = filter_input(INPUT_POST, 'sex',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW); echo "<br>"; } if(!$_POST['vopros1']) { echo "Вы не заполнили форму vopros1"; exit(); } else { $vopros1 =filter_input(INPUT_POST, 'vopros1',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW); } echo "<br>"; if(!$_POST['vopros2']) { echo "Вы не заполнили форму vopros2"; } else { $vopros2 =filter_input(INPUT_POST, 'vopros2',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW); } echo "<br>"; if(!$_POST['vopros3']) { echo "Вы не заполнили форму vopros3"; } else { $vopros3 = filter_input(INPUT_POST, 'vopros3',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW); } echo "<br>"; if(!$_POST['vopros4']) { echo "Вы не заполнили форму vopros4"; } else { $vopros4 =filter_input(INPUT_POST, 'vopros4',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW); } echo "<br>"; if(!$_POST['vopros5']) { echo "Вы не заполнили форму vopros5"; } else { $vopros5 =filter_input(INPUT_POST, 'vopros5',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW); } echo "<br>"; // Конец проверки данных // Подключаем конфиг include ('config.php'); // Запрос на проверку уникального адреса почты $query = mysql_query("SELECT * FROM `USERS` WHERE `email`='{$email}' "); if(mysql_num_rows($query) >= 1){ echo "Адрес $email уже зарегистрирован"; } else{ //Устанавливаем кодировку utf-8 по умолчанию mysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER SET 'utf8'"); //Если все вышеописанные проверки прошли успешно, добавляем пользователя в нашу БД $result = mysql_query("INSERT INTO USERS (name,email,pass,age,sex,vopros1,vopros2,vopros3,vopros4,vopros5) VALUES ('$name','$email','$pass','$age','$sex','$vopros1','$vopros2','$vopros3','$vopros4','$vopros5')") ; //Проверяем заполнились ли введенные данные в БД if ($result == 'true') { //Выводим сообщение после регистрации echo "Спасибо регистрация прошла успешно!"; require 'mail.php'; } else { echo "<b><font color=red>Извините произошла ошибка при добавлении БД!</b><br>"; } // Отправляем рандомный код на мыло. } // Закрываем соединение с mysql mysql_close(); ?>
1. Удалить лишние пустые строки, перенесите { на строку выше, где начинается блок - читать тяжко такой код. Так лучше смотрится, не правда ли? Код (PHP): <?php if(!$_POST['vopros2']) { echo "Вы не заполнили форму vopros2"; } else { $vopros2 =filter_input(INPUT_POST, 'vopros2',FILTER_SANITIZE_STRING,FILTER_FLAG_ENICODE_LOW); } echo "<br>";?> 2. Блоки с проверкой 5-ти вопросов можно оформить в цикле for от 1 до 5. 3. Проверку переменных на непустоту лучше делать хотя бы с помощью !empty либо isset. И зачем для почты $_POST['email'] Вы 2 раза проверяете непустоту переменной?
isset() не поможет проверить на пустоту. Если используешь !empty() не забудь убрать пробелы Код (Text): $str = ' '; var_dump(empty($str)); // false
1) наверное не нужно после каждой проверки обрывать работу скрипта exit(); можешь например предупреждение об ошибке введенных данных вносить в какой нибудь массив и потом вывести его. 2) Код (Text): //Устанавливаем кодировку utf-8 по умолчанию mysql_query("SET NAMES 'utf8'"); mysql_query("SET CHARACTER SET 'utf8'"); это достаточно прописать при подключении к базе данных, нет необходимости писать при каждом запросе к базе 3) стоит отделить данные пользователя, от вопросов заданых ему, пусть они будут в разных таблицах, сейчас у тебя все в куче в одной таблице
Код (PHP): if (!$_POST['name']) { echo "Вы не заполнили форму имя!"; exit(); гавно! Добавлено спустя 1 минуту 1 секунду: ладно, намекну: тут на трёх строках есть три говняшки. Какие - озвучь свои предположения.
Я уже в скрипте и сессиями уже "поднасрал" :-D Говняшки наверное в том что их вообще быть не должно, и как В этом? =)
в этих трёх строках три косяка. два важных, один этический. найди сам. наморщи лоб, чего стесняешься?
Код (PHP): if (!$_POST['name']) { exit("Вы не заполнили форму имя!"); } ??? Да время уже много, я через 10 минут и по Русски писать не смогу))
Код (PHP): if (!$_POST["name"]) { echo 'Вы не заполнили форму имя!'; exit(); من خسته، بخواب!فردا صبح در مورد آن فکر می کنم، و پس از آن PPC جوش گلدان نیست.
короче вот тебе домашнее задание на ночь для спящего мозга и подсознательного сознания: - разберись чо за херня! =) Код (PHP): if (!$_POST["name"]) //прямая ошибка { //не считается за строчку вобще echo 'Вы не заполнили форму имя!'; //идеологическая ошибка, хотя направление правильное exit(); // херня криворукая! пороть за такое надо. почему?
Всю ночь уснуть не мог. =) У меня конечно есть мысли, но бредовые. Это смешно наверное, но в чем ошибка я пока еще не понимаю. Добавлено спустя 1 минуту 45 секунд: То что не считается за строку, я понял. Идеологическая ошибка, наверное стояло print_r вызвать? wxit(); херня, но не понимаю почему.
Код (PHP): $connect=false; if(!$connect=mysql_connect('','','')) { exit(mysql_error().' <> '.mysql_errno()); } else if(!mysql_select_db('',$connect)) { exit(mysql_error().' <> '.mysql_errno()); } else { mysql_set_charset('utf8',$connect); } Код (PHP): function injects($value,$bool=false) { global $connect; if($connect && !$bool && ''!=$value) { if(isset($_POST[$value])) { return mysql_real_escape_string($_POST[$value],$connect); } } return false; } Код (PHP): function query($query) { global $connect; if($connect && ''!=$query) { return mysql_query($query,$connect); } return false; } Код (PHP): if(intval($_POST['form'])) { if(!isset($_POST['name'])) { $error='Заполните поле имени!'; } else if(!isset($_POST['email'])) { $error='Заполните поле e-mail!'; } else if(!preg_match('/^[a-z0-9\._-]+@(.{1,}\.)*[a-z0-9]+[a-z0-9-]*[a-z0-9]+\.[a-z]{2,6}$/i',$_POST['email'])) { $error='E-mail: ('.$_POST['email'].') введен не корректно!'; } else if(mysql_num_rows(query("SELECT `email` FROM `users` WHERE `email`='".injects('email')."' LIMIT 0,1"))) { $error='E-mail: ('.$_POST['email'].') уже существует!'; } else if(!isset($_POST['pass'])) { $error='Заполните поле пароля!'; } else if(3>strlen($_POST['pass']) || 16<strlen($_POST['pass'])) { $error='Пароль не может быть меньше 3-х символов и больше 16.'; } else if(query("INSERT INTO `users` SET `name`='".injects('name')."',`email`='".injects('email')."',`pass`='".md5(injects('pass'))."'")) { $error='Регистрация прошла успешно!'; require_once('mail.php'); } else { exit('Ошибка: '.mysql_error().' <> '.mysql_errno()); } } mysql_close($connect); Код (PHP): <div class="form"> <div class="error"> <?=$error?> </div> <form id="form" method="post"> <input type="hidden" name="form" value="1"> <input type="text" name="name" value=""> <input type="text" name="email" value=""> <input type="text" name="pass" value=""> <input type="submit" value="Отправить"> </form> </div> Тут вариантов можно сделать много... Можно вообще разделить, можно массивами, можно частями... Смотря вообще для каких целей и что требуется, ну и соответственно как желаете вы, так и делайте. =)
потенциально тут обращение к несуществующей переменной. Нотис. На деле, не знание функций empty() или isset(). Добавлено спустя 3 минуты 34 секунды: Эхо черти куда, никак не обращающее на себя внимание. Нужно выводить сообщение, подсвечивать красненьким поле, и лучше всего делать это на стороне клиента до. Тем не менее, сообщеньку выводить всё равно нужно, ибо мало ли у кого js откажет. При этом сообщенька должна быть стандартизованная, задизайненая и красивая. Добавлено спустя 1 минуту 17 секунд: выходить из скрипта нужно только в крайне редких случаях, а ты тупо завершил скрипт, не дав человеку заполнить недостающую инфу. Заставлять человека заполнять заново всю форму - садизм!
Код (PHP): $name = $_POST['name']; if (isset($name) { echo "Понятно"; exit(); // То есть лучше строить if через весь скрипт? или есть какие либо еще вариантов? }
ты ничего не изменил =) обращение к несуществующей переменной бессмысленная проверка, которая всегда true есть, копить ошибки в массив, т.е. ифы будут такими же короткими. Зато потом можешь отрисовать сообщеньки и пояснения в нужных местах.
Понятно. А что значит само понятие несуществующей переменной? Код (PHP): (!$_POST['name'];) Условие то Код (PHP): if(!$_POST['name'];) То есть если пользователь не введет данные, то условие будет выполнено?! А если введет то не будет.
этого члена массива не существует. любое обращение к нему - косяк. чтобы узнать есть ли переменная, можно юзать функцию isset() или сразу empty() - она тоже отработает корректно.