Валидация формы авторизации.
Здравствуйте помогите пожалуйста правильно собрать валидацию формы из двух разных скриптов:
1 скрипт: $(document).ready(function(){ $("#formlogin").validate({ // правила для полей с именем и паролем rules:{ email:{ required: true, // поле обязательное для заполнения }, password:{ required: true, // поле обязательное для заполнения }, }, // сообщение для поля с именем и пароля, если что-то было не по правилам messages:{ email:{ required: "<p class='err'>Это поле обязательно для заполнения!</p>", }, password:{ required: "<p class='err'> Это поле обязательно для заполнения!</p>", }, } }); }); 2 скрипт: // Email $("#email").change(function(){ email = $("#email").val(); $.ajax({ url: "testingLoginEmail.php", type: "POST", data: "email=" + email, cache: false, success: function(response){ if(response == "no"){ $("#email").next().hide().text("Пользователь с такой электронной почтой не зарегистрирован!").fadeIn(400); $("#email").removeClass().addClass("inputRed"); }else{ $("#email").removeClass().addClass("inputGreen"); $("#email").next().text(""); } } }); }); <?php include_once "conectbd.php"; if(isset($_POST['email'])){ $email = addslashes($_POST['email']); $email = htmlspecialchars($_POST['email']); $email = mysql_real_escape_string(trim($_POST['email'])); $result = $mysqli->query("SELECT `email` FROM `users` WHERE `email` = '$email'"); $myrow = mysqli_fetch_array($result); if(!$email == $myrow['email']) { echo "no"; } else { echo"yes"; } } ?> |
$email = addslashes($_POST['email']);
$email = htmlspecialchars($_POST['email']); Зачем? if(!$email == $myrow['email']) - это как понять? И если, пусть бы было здесь все Ок, то наличие пароля не волнует? |
htmlspecialchars- Преобразует специальные символы в HTML-сущности. addslashes- Экранирует строку с помощью слешей. вы считаете что это лишнее? этот ajx запрос маила на наличие его в базу работает я проверял, конечно было бы хорошо и пароль проверить к этому маилу. |
Я знаю, что делают данные функции, я спрашиваю для чего они в данном случае? Поясните.
|
я добавил один код внутри другого работает нормально сообщения об ошибках сплывают, только при сообщении о том что данный логин не существует при нажатии кнопки отправить данные все равно уходят на сервер.
$(document).ready(function(){ $("#formlogin").validate({ // правила для полей с именем и паролем rules:{ email:{ required: true, // поле обязательное для заполнения }, password:{ required: true, // поле обязательное для заполнения }, }, // сообщение для поля с именем и пароля, если что-то было не по правилам messages:{ email:{ required: "<p class='err'>Это поле обязательно для заполнения!</p>", }, password:{ required: "<p class='err'> Это поле обязательно для заполнения!</p>", }, } }); // Email $("#email").change(function(){ email = $("#email").val(); $.ajax({ url: "testingLoginEmail.php", type: "POST", data: "email=" + email, cache: false, success: function(response){ if(response == "no"){ $("#email").next().hide().text("Пользователь с такой электронной почтой не зарегистрирован!").fadeIn(400); $("#email").removeClass().addClass("inputRed"); }else{ $("#email").removeClass().addClass("inputGreen"); $("#email").next().text(""); } } }); }); }); |
как я понимаю эти функции зашита от всяких sql injection.
|
Вы считаете, что в первую очередь для вас важен клиент? Это при том, что на сервере бардак:
$email = addslashes($_POST['email']); - бесполезная операция, куда более полезнее удалять слеши расставленные пользователем. $email = htmlspecialchars($_POST['email']); - это что означает, что в базу данные записываются исключительно после htmlspecialchars? Если да, то это не понимание назначения данной функции, и полная бессмыслица. А если нет, то как можно найти совпадения не преобразованных с преобразованными? То есть это тоже бесполезная и вредная в данном случае операция. $email = mysql_real_escape_string(trim($_POST['email'])); - это да, экранировать параметры запроса необходимо. Но с чего вдруг mysql_real_escape_string когда необходимо mysqli_real_escape_string, и почему так, а не использование средства самого драйвера: подготовленные запросы и метки? $result = $mysqli->query("SELECT `email` FROM `users` WHERE `email` = '$email'"); - это с таким же успехом может проверить и так: "SELECT 1 FROM `users` WHERE `email` = ?" это запрос с учетом подготовленных запросов. Ну а далее можно просто проверить количество возвращенных записей (что не принципиально, конечно). Но !$email == $myrow['email'] не дает ответа на вопрос заполнено ли вообще поле адреса, а ведь оно обязательно для заполнения. По логике, проверка адреса и пароля, тут неизвестно чего вам хочется. Например, можно проверять адрес (есть/нет такой) по кнопке Проверить, при потере фокуса или иначе. Но при приеме формы придется опять его проверять, а также корректность его, также проверять пароль, его наличие и желательно чтобы он были 123 и т.п. У вас же в общем то нет ни проверки, ни диалога. |
mysql_real_escape_string когда необходимо mysqli_real_escape_string.
спасибо не обратил внимания, при регистрации все 3 обработки включены: $email = addslashes($_POST['email']); $email = htmlspecialchars($_POST['email']); $email = mysql_real_escape_string(trim($_POST['email'])); и этот php код только для проверки наличия маила. при потери фокуса как вы и сказали. а далее после нажатии отправить форма идет на другой скрипт: <?php session_start(); include_once "../conectbd.php"; if (isset($_POST['submit'])){ $email = addslashes($_POST['email']); $email = htmlspecialchars($_POST['email']); $email = mysqli_real_escape_string(trim($_POST['email'])); $password = htmlspecialchars (trim(md5(md5($_POST['password'])))); } $result = $mysqli->query("SELECT * FROM `users` WHERE `email` = '$email'"); $myrow = mysqli_fetch_array($result); if ($email == $myrow['email']){ if($password == $myrow['password']){ $_SESSION['status'] = "openstatus"; $_SESSION['surname'] = $myrow['surname']; $_SESSION['name'] = $myrow['name']; $_SESSION['patronymic'] = $myrow['patronymic']; header("Location:../index.php"); exit(); } else{ header("Location:../index.php"); echo $_SESSION["mesage2"]="<p class='mesage' style='color:red; text-align:center;font-size:11pt;'>Логин или Пароль введен неверно!</p>"; } } else{ header("Location:../index.php"); echo $_SESSION["mesage2"]="<p class='mesage' style='color:red; text-align:center;font-size:11pt;>Логин или Пароль введен неверно!</p>"; } ?> |
Цитата:
$a = ''; var_dump(!$a == null); Есть надобность пояснять еще, что вся ваша проверка пустое? |
так на пустоту стоит required
|
Часовой пояс GMT +3, время: 19:53. |