14.05.2017, 14:58
|
Аспирант
|
|
Регистрация: 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.
|
|
14.05.2017, 15:48
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
$email = addslashes($_POST['email']);
$email = htmlspecialchars($_POST['email']);
Зачем?
if(!$email == $myrow['email']) - это как понять? И если, пусть бы было здесь все Ок, то наличие пароля не волнует?
|
|
14.05.2017, 16:11
|
Аспирант
|
|
Регистрация: 14.05.2017
Сообщений: 61
|
|
htmlspecialchars
- Преобразует специальные символы в HTML-сущности.
addslashes
- Экранирует строку с помощью слешей.
вы считаете что это лишнее?
этот ajx запрос маила на наличие его в базу работает я проверял, конечно было бы хорошо и пароль проверить к этому маилу.
|
|
14.05.2017, 16:16
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Я знаю, что делают данные функции, я спрашиваю для чего они в данном случае? Поясните.
|
|
14.05.2017, 16:19
|
Аспирант
|
|
Регистрация: 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("");
}
}
});
});
});
|
|
14.05.2017, 16:24
|
Аспирант
|
|
Регистрация: 14.05.2017
Сообщений: 61
|
|
как я понимаю эти функции зашита от всяких sql injection.
|
|
14.05.2017, 16:46
|
Профессор
|
|
Регистрация: 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 и т.п. У вас же в общем то нет ни проверки, ни диалога.
|
|
14.05.2017, 16:58
|
Аспирант
|
|
Регистрация: 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>";
}
?>
|
|
14.05.2017, 17:03
|
Профессор
|
|
Регистрация: 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);
Есть надобность пояснять еще, что вся ваша проверка пустое?
|
|
14.05.2017, 17:08
|
Аспирант
|
|
Регистрация: 14.05.2017
Сообщений: 61
|
|
так на пустоту стоит required
|
|
|
|