Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.05.2017, 14:58
Аспирант
Отправить личное сообщение для daimon0482 Посмотреть профиль Найти все сообщения от daimon0482
 
Регистрация: 14.05.2017
Сообщений: 61

Валидация формы авторизации.
Здравствуйте помогите пожалуйста правильно собрать валидацию формы из двух разных скриптов:
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"; 
} 
} 

?>

Последний раз редактировалось daimon0482, 14.05.2017 в 15:01.
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2017, 15:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

$email = addslashes($_POST['email']);
$email = htmlspecialchars($_POST['email']);

Зачем?

if(!$email == $myrow['email']) - это как понять? И если, пусть бы было здесь все Ок, то наличие пароля не волнует?
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2017, 16:11
Аспирант
Отправить личное сообщение для daimon0482 Посмотреть профиль Найти все сообщения от daimon0482
 
Регистрация: 14.05.2017
Сообщений: 61

htmlspecialchars
- Преобразует специальные символы в HTML-сущности.
addslashes
- Экранирует строку с помощью слешей.
вы считаете что это лишнее?

этот ajx запрос маила на наличие его в базу работает я проверял, конечно было бы хорошо и пароль проверить к этому маилу.
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2017, 16:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Я знаю, что делают данные функции, я спрашиваю для чего они в данном случае? Поясните.
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2017, 16:19
Аспирант
Отправить личное сообщение для daimon0482 Посмотреть профиль Найти все сообщения от daimon0482
 
Регистрация: 14.05.2017
Сообщений: 61

я добавил один код внутри другого работает нормально сообщения об ошибках сплывают, только при сообщении о том что данный логин не существует при нажатии кнопки отправить данные все равно уходят на сервер.
$(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("");
                }                   
            }
        });
           
    });
});
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2017, 16:24
Аспирант
Отправить личное сообщение для daimon0482 Посмотреть профиль Найти все сообщения от daimon0482
 
Регистрация: 14.05.2017
Сообщений: 61

как я понимаю эти функции зашита от всяких sql injection.
Ответить с цитированием
  #7 (permalink)  
Старый 14.05.2017, 16:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Вы считаете, что в первую очередь для вас важен клиент? Это при том, что на сервере бардак:

$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 и т.п. У вас же в общем то нет ни проверки, ни диалога.
Ответить с цитированием
  #8 (permalink)  
Старый 14.05.2017, 16:58
Аспирант
Отправить личное сообщение для daimon0482 Посмотреть профиль Найти все сообщения от daimon0482
 
Регистрация: 14.05.2017
Сообщений: 61

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>";
}

?>
Ответить с цитированием
  #9 (permalink)  
Старый 14.05.2017, 17:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от daimon0482
при регистрации все 3 обработки включены:
$email = addslashes($_POST['email']);
$email = htmlspecialchars($_POST['email']);
$email = mysql_real_escape_string(trim($_POST['email']));
Это бесполезная глупость. Вот пользователь оставит поле адреса пустым (на проверку клиентом не найдетесь, особенно в данном случае), проверяйте:

$a = '';
var_dump(!$a == null);


Есть надобность пояснять еще, что вся ваша проверка пустое?
Ответить с цитированием
  #10 (permalink)  
Старый 14.05.2017, 17:08
Аспирант
Отправить личное сообщение для daimon0482 Посмотреть профиль Найти все сообщения от daimon0482
 
Регистрация: 14.05.2017
Сообщений: 61

так на пустоту стоит required
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Валидация формы работает не совсем так Batyabest Events/DOM/Window 12 26.11.2016 02:07
Проверка авторизации перед отправкой формы Hapson AJAX и COMET 1 17.03.2014 11:58
Валидация формы в зависимости от значения radio batton housewm Events/DOM/Window 1 10.01.2014 18:46
Валидация формы Ваяс Элементы интерфейса 8 11.07.2012 15:20
Валидация формы dmsuslov jQuery 4 05.11.2010 16:12