Попрошу разъяснить вот какой вопрос:
Хочу реализовать обработку вводимых пользователем данных по средствам вывода сообщений об ошибках на js и php, для верности.
Теперь сама суть:
Вот беру поле,по средствам ajax передаю в php,там проверяю на валидность и через div вывожу сообщение об ошибке.При этом на js разблокирую кнопку(если всё хорошо),так как в html прописал значение btn-disabled...Есть ещё второй файл php, к которому обращается html,если отключен js(там примерно то же самое как и в первом).
Вопрос:
1. У меня выводит сообщения об ошибках сначала js,а потом ещё и дублирующий файл php(на белом фоне через echo).
2. Как я понимаю,в файле php,который срабатывает при обращении js, не нужно прописывать работу с вводом данных в базу?
Натолкните где тут глупости делаю!?Спасибо...
Спустя 1 минута, 54 секунды (23.01.2012 - 17:34) caballero написал(а):
у тебя что и аякс работает и страница перегружается?
Спустя 6 минут, 52 секунды (23.01.2012 - 17:41) panich написал(а):
Биру данные и через аякс отправляю в php на проверку...
Но если js отключен-значит аякс работать не будет.Соответственно создаю второй файл,который будет вести обработку.
Всё дело в том,что вывожу сообщения об ошибках через html(html)...а если js работать не будт,то сообщения вывожу через echo...как-то так!
П.С.Скажите,если объясняю плохо!
Но если js отключен-значит аякс работать не будет.Соответственно создаю второй файл,который будет вести обработку.
Всё дело в том,что вывожу сообщения об ошибках через html(html)...а если js работать не будт,то сообщения вывожу через echo...как-то так!
П.С.Скажите,если объясняю плохо!
Спустя 6 минут, 22 секунды (23.01.2012 - 17:47) m4a1fox написал(а):
плохо объясняешь. Ни кода ни конкретики. Так, чисто на словах... ИМХО не понятно. Ты по кусочкам план разбей, и выполняй последовательно.
Спустя 2 минуты, 2 секунды (23.01.2012 - 17:49) panich написал(а):
Давайте так:
при проверке ajax нужно делать два файла php,что бы избежать иньекции при отключении js?
при проверке ajax нужно делать два файла php,что бы избежать иньекции при отключении js?
Спустя 12 минут, 2 секунды (23.01.2012 - 18:01) m4a1fox написал(а):
panich
Цитата |
при проверке ajax нужно делать два файла php |
C чего вдруг? Поясни!
Спустя 5 часов, 34 минуты, 22 секунды (23.01.2012 - 23:36) neadekvat написал(а):
panich, плохо.
Проверку на корректность введенных данных лучше проводить средствами самого js. Единственное, зачем тут может понадобиться php - это, например, проверка логина на свободен/занят.
Форму вместе со скриптом проверки (скрипт также можно положить в отдельный js файл) выносишь в файл. В обработчике формы (php-файл) проверяешь, была ли прислана форма. Если нет - подключаешь форму. Если была прислана - проверяешь корректность введенных данных. Если есть ошибки - снова выводишь форму, но с добавленными сообщениями об ошибке.
Проверку на корректность введенных данных лучше проводить средствами самого js. Единственное, зачем тут может понадобиться php - это, например, проверка логина на свободен/занят.
Форму вместе со скриптом проверки (скрипт также можно положить в отдельный js файл) выносишь в файл. В обработчике формы (php-файл) проверяешь, была ли прислана форма. Если нет - подключаешь форму. Если была прислана - проверяешь корректность введенных данных. Если есть ошибки - снова выводишь форму, но с добавленными сообщениями об ошибке.
Спустя 6 часов, 43 минуты, 53 секунды (24.01.2012 - 06:19) panich написал(а):
<form action="../znakomstva/testreg.php" method="POST" id="form_enter">
<input id="name_vhod" type="text" name="login" maxlength="20">
<input id="pass_vhod" type="password" name="pass" maxlength="15">
<input id="autovhod" type="checkbox" name="autovhod" value="1">
<input id="btn" type="submit" name="btn" value="">
</form>
$('#form_enter input[name=btn]').click(function(){
if ($('#name_vhod').val().length == 0)
{
$("<div id='indNameV'>Не введён ЛОГИН!</div>").insertAfter('#form_enter');
$('#form_enter #btn').attr('disabled', 'disabled');
}
else
{
if(!$('#name_vhod').val().match("/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,6}$/"))
{
$("<div id='indNameV'>Некорректно введён email-адрес!</div>").insertAfter('#form_enter');
$('#form_enter #btn').attr('disabled', 'disabled');
}
}
});
Подскажите,почему в этом случеае у меня кнопка не блокируется и как организовать здесь проверки типа
$old_login = mysql_real_escape_string(trim(htmlspecialchars($_SESSION['login'])));
$login = mysql_real_escape_string(trim($_POST['login']));
$login = htmlspecialchars($login);
а самое главное-нужно ли это здесь?
Спустя 4 часа, 55 минут, 34 секунды (24.01.2012 - 11:15) panich написал(а):
В приведённом выше коде если пишу,что бы при событии с полем blur кнопка просто блокировалась,то срабатывает.
А, если что бы при нажатии на кнопку проверялось условия if else,то блокиратор не работает.Почему?
А, если что бы при нажатии на кнопку проверялось условия if else,то блокиратор не работает.Почему?
Спустя 1 час, 21 минута, 59 секунд (24.01.2012 - 12:37) neadekvat написал(а):
panich
1. У тебя не blur, а click. Это сужает множество.
2. Почему бы не сделать кнопку неактивной по умолчанию, проверку засунуть в функцию, которая будет возвращать TRUE или строку с ошибкой. В обработчике (который .click) сделать вызов это функции, и в зависимости от возвращаемого результата - выводить ошибку либо разблокировать кнопку.
3. Зачем селектор '#form_enter #btn'? '#btn' будет более чем достаточно.
4. У тебя на полях висят id. Зачем ты делаешь так: '#form_enter input[name=btn]'?
5. Ты уже обратился к полю, зачем еще раз использовать селектор: $('#name_vhod')? Используй this:
1. У тебя не blur, а click. Это сужает множество.
2. Почему бы не сделать кнопку неактивной по умолчанию, проверку засунуть в функцию, которая будет возвращать TRUE или строку с ошибкой. В обработчике (который .click) сделать вызов это функции, и в зависимости от возвращаемого результата - выводить ошибку либо разблокировать кнопку.
3. Зачем селектор '#form_enter #btn'? '#btn' будет более чем достаточно.
4. У тебя на полях висят id. Зачем ты делаешь так: '#form_enter input[name=btn]'?
5. Ты уже обратился к полю, зачем еще раз использовать селектор: $('#name_vhod')? Используй this:
$('#name_vhod').click(function(){
if (this.val().length == 0)
Спустя 20 минут, 13 секунд (24.01.2012 - 12:57) panich написал(а):
Спасибо большое за советы-всё учёл и переработал с некоторыми корректировками!
Вот только остался один вопрос:
почему при вводе даже корректного логина (email) тоже выдаёт ошибку:
???
Вот только остался один вопрос:
почему при вводе даже корректного логина (email) тоже выдаёт ошибку:
if(!$('#name_vhod').val().match("/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,6}$/"))
???
Спустя 25 минут, 2 секунды (24.01.2012 - 13:22) neadekvat написал(а):
Сделай так:
var pat = /^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,6}$/; // Кавычек нет
if(!$('#name_vhod').val().match(pat))
Спустя 12 минут, 10 секунд (24.01.2012 - 13:34) panich написал(а):
Спасибо-получилось!!!
Буду дальше кошмарить код)))
Буду дальше кошмарить код)))
Спустя 50 минут, 41 секунда (24.01.2012 - 14:25) panich написал(а):
Вот к чему пришёл:
Всё замечательно работает,только вот аякс что-то касячит!Не выводит сообщение об ошибке...тут подскажете?
П.С.Кстати, скажите сильно ужасно пишу?Как это влияет на работоспособность сайта?
<form action="../znakomstva/testreg.php" method="POST" id="form_enter">
<input id="name_vhod" type="text" name="login" maxlength="21">
<input id="pass_vhod" type="password" name="pass" maxlength="16">
<input id="autovhod" type="checkbox" name="autovhod" value="1">
<input id="btn" type="submit" name="btn" value="">
</form>
$('#btn').click(function(e){
if ($('#name_vhod').val().length == 0)
{
$("<div id='indTestV'>Не введён ЛОГИН!</div>").insertAfter('#form_enter');
e.preventDefault();
}
else
{
if ($('#name_vhod').val().length > 20)
{
$("<div id='indTestV'>ЛОГИН не должен превышать 20 символов!</div>").insertAfter('#form_enter');
e.preventDefault();
}
else
{
var mail = /^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,6}$/;
if(!$('#name_vhod').val().match(mail))
{
$("<div id='indTestV'>Некорректно введён email-адрес!</div>").insertAfter('#form_enter');
e.preventDefault();
}
else
{
if ($('#pass_vhod').val().length == 0)
{
$("<div id='indTestV'>Не введён ПАРОЛЬ!</div>").insertAfter('#form_enter');
e.preventDefault();
}
else
{
if ($('#pass_vhod').val().length < 3 || $('#pass_vhod').val().length > 15)
{
$("<div id='indTestV'>ПАРОЛЬ должен составлять от 3 до 15 символов!</div>").insertAfter('#form_enter');
e.preventDefault();
}
else
{
var logVal = $('#name_vhod').val();
var passVal = $('#pass_vhod').val();
$.ajax({
type: "POST",
url: "testregJS.php",
data: {'login':logVal, 'pass':passVal},
success: function(html){
$("<div id='indTestV'></div>").insertAfter('#form_enter').html(html);
$('#btn').attr('disabled' , 'disabled');
}
});
}
}
}
}
}
});
$('#name_vhod, #pass_vhod').focus(function(){
$('#indNameV').fadeOut(1000);
$('#btn').removeAttr('disabled');
});
<?php
$login = mysql_real_escape_string(trim($_POST['$login']));
$login = iconv('UTF-8', 'Windows-1251', $login);
$login = htmlspecialchars($login);
if(get_magic_quotes_gpc())
{
$login = stripslashes($login);
}
$pass = mysql_real_escape_string(trim($_POST['$pass']));
$pass = iconv('UTF-8', 'Windows-1251', $pass);
$pass = htmlspecialchars($pass);
if(get_magic_quotes_gpc())
{
$pass = stripslashes($pass);
}
$sql = "SELECT `pass` FROM `users` WHERE `login`='$login'";
$result = mysql_query($sql, $db)or die("Ошибка в запросе: " . mysql_error());
if ($result = TRUE)
{
$pass = md5($pass);
$pass = strrev($pass);
$pass = $pass."cR9i7Z";
$myrow = mysql_fetch_array($result);
if ($myrow['pass'] != $pass)
{
$html = "<div>Проверте правильность введённых данных!</div>";
echo ($html);
}
}
?>
Всё замечательно работает,только вот аякс что-то касячит!Не выводит сообщение об ошибке...тут подскажете?
П.С.Кстати, скажите сильно ужасно пишу?Как это влияет на работоспособность сайта?
Спустя 23 минуты, 47 секунд (24.01.2012 - 14:49) neadekvat написал(а):
1. Лучше создай в верстке некоторый <div id="error">, заготовленный для ошибки, видимость ему сделай изначально none, а затем вставляй в него ($.text()) текст ошибки и делай видимым.
2. Аякс - это метод (или процесс) передачи данных скриптом в бэкграунд. Все остальное - просто js.
3.
> $_POST['$login']
Уверен в названии индекса (и далее по коду то же самое)?
4.
> $login = iconv('UTF-8', 'Windows-1251', $login);
Пиши сайты на UTF-8.
5.
> get_magic_quotes_gpc()
В жопу. Выключай магические кавычки в .htaccess. Скоро эту директиву вообще удалят (в php 5.4), так что код можно считать устаревшим.
6.
> or die("Ошибка в запросе: " . mysql_error());
Справедливо только для учебных программ. В рабочих проектах так делать нельзя (ошибки логируются, на экран выводится только пространное сообщение о неработоспособности сервиса в данный момент)
7.
> if ($result = TRUE)
В данном случаи ты приравниваешь переменной $result значение TRUE, а условие проверяет, было бы это присвоение успешным или нет. Знак сравнения - ==.
8.
Соль обычно у каждого пользователя своя. MD5 берется от пароля с солью.
9.
> mysql_fetch_array
Лучше использовать mysql_fetch_assoc, т.к. *_array возвращает два массива (ассоциативный и числовой).
10.
> echo ($html)
Скобки никто не использует. Они тут не нужны.
2. Аякс - это метод (или процесс) передачи данных скриптом в бэкграунд. Все остальное - просто js.
3.
> $_POST['$login']
Уверен в названии индекса (и далее по коду то же самое)?
4.
> $login = iconv('UTF-8', 'Windows-1251', $login);
Пиши сайты на UTF-8.
5.
> get_magic_quotes_gpc()
В жопу. Выключай магические кавычки в .htaccess. Скоро эту директиву вообще удалят (в php 5.4), так что код можно считать устаревшим.
6.
> or die("Ошибка в запросе: " . mysql_error());
Справедливо только для учебных программ. В рабочих проектах так делать нельзя (ошибки логируются, на экран выводится только пространное сообщение о неработоспособности сервиса в данный момент)
7.
> if ($result = TRUE)
В данном случаи ты приравниваешь переменной $result значение TRUE, а условие проверяет, было бы это присвоение успешным или нет. Знак сравнения - ==.
8.
$pass = md5($pass);
$pass = strrev($pass);
$pass = $pass."cR9i7Z";
Соль обычно у каждого пользователя своя. MD5 берется от пароля с солью.
9.
> mysql_fetch_array
Лучше использовать mysql_fetch_assoc, т.к. *_array возвращает два массива (ассоциативный и числовой).
10.
> echo ($html)
Скобки никто не использует. Они тут не нужны.
Спустя 27 минут, 46 секунд (24.01.2012 - 15:17) panich написал(а):
1. По идее даже если писать как я,то должно работать(и работает,кстати),но переделал,конечно...
3. Перепроверил несколько раз...всё верно...вроде!Или Вы увидели ошибку?
4. Уже много написал, пробовал переделывать на utf-8,но ничего не вышло-теперь так приходится...(((
5.А можете мне пример кода написать и я создам файл(мне так советовали делать на одном из форумов).
6.В этом случае как выводить на экран сообщение об ошибке?И нужно ли это делать?
8.Так правильно:
Все эти преобразования проблему не решили-сообщение об ошибке при неправильном вводе пароля(не совпадающем с тем,что в базе привязан к id) не выводится...
3. Перепроверил несколько раз...всё верно...вроде!Или Вы увидели ошибку?
4. Уже много написал, пробовал переделывать на utf-8,но ничего не вышло-теперь так приходится...(((
5.А можете мне пример кода написать и я создам файл(мне так советовали делать на одном из форумов).
6.В этом случае как выводить на экран сообщение об ошибке?И нужно ли это делать?
8.Так правильно:
$pass = strrev($pass);
$pass = $pass."cR9i7Z";
$pass = md5($pass);
Все эти преобразования проблему не решили-сообщение об ошибке при неправильном вводе пароля(не совпадающем с тем,что в базе привязан к id) не выводится...
Спустя 12 минут, 50 секунд (24.01.2012 - 15:29) neadekvat написал(а):
1. Я не говорил, что неправильно. Я говорил, как лучше.
3. Ок, сравни твой вариант: $_POST['$login'] и мой: $_POST['login']
4. Согласен, работа с Юникодом при том, что php номинально его не поддерживает - это не самая легкая задача для начинающего с ним работать. Но надо, Федя, надо (с)
5.
6. Хм, каждый по-своему делает. Но надо, да. Пользователь же будет ждать какого-то ответа. Придумай свой интерфейс общения между скриптом и бэкграундом. Т.е., например, php-скрипт возвращает в js-скрипт ответ в формате json с данными типа status: success; msg: "all ok!", или status: fail; msg: "Service temporary unavailable".
8. Я вообще не то имел в виду.
3. Ок, сравни твой вариант: $_POST['$login'] и мой: $_POST['login']
4. Согласен, работа с Юникодом при том, что php номинально его не поддерживает - это не самая легкая задача для начинающего с ним работать. Но надо, Федя, надо (с)
5.
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
6. Хм, каждый по-своему делает. Но надо, да. Пользователь же будет ждать какого-то ответа. Придумай свой интерфейс общения между скриптом и бэкграундом. Т.е., например, php-скрипт возвращает в js-скрипт ответ в формате json с данными типа status: success; msg: "all ok!", или status: fail; msg: "Service temporary unavailable".
8. Я вообще не то имел в виду.
Цитата (panich @ 24.01.2012 - 16:17) |
Все эти преобразования проблему не решили-сообщение об ошибке при неправильном вводе пароля(не совпадающем с тем,что в базе привязан к id) не выводится... |
Ты проверь, у тебя ответ вот здесь:
success: function(html){
$("<div id='indTestV'></div>").insertAfter('#form_enter').html(html);
$('#btn').attr('disabled' , 'disabled');
}
Вообще приходит или нет. Сделай console.log или alert.
Кроме того, вставка текста происходит как-то странно. Коль есть div id = error, то и делай:
$('#error').html(html);
Спустя 11 минут, 40 секунд (24.01.2012 - 15:41) panich написал(а):
1. Понял-это мысли вслух.
3. Замылились глаза совсем...)))
4. Как буду писать уже хотя бы на Вашем уровне учту,а так 3 дня потратил на форумах,когда менял кодировку и проблему не решил-пришлось потом очень долго всё на исходную возвращать (по неопытности не сделал копию).
5. Нужны знаки # перед этими строчками?Этот файл в корень кидать?
6. Это когда картинки с ошибками выводятся-не как у всех. В самом конце продумаю этот вопрос...
Алертом проверял-вообще ничего не выводит из php...что самое интересно!
Там даже писал вместо всего кода:
но ничего не выводило....
3. Замылились глаза совсем...)))
4. Как буду писать уже хотя бы на Вашем уровне учту,а так 3 дня потратил на форумах,когда менял кодировку и проблему не решил-пришлось потом очень долго всё на исходную возвращать (по неопытности не сделал копию).
5. Нужны знаки # перед этими строчками?Этот файл в корень кидать?
6. Это когда картинки с ошибками выводятся-не как у всех. В самом конце продумаю этот вопрос...
Алертом проверял-вообще ничего не выводит из php...что самое интересно!
Там даже писал вместо всего кода:
$html = "123";
echo $html;
но ничего не выводило....
Спустя 5 минут, 12 секунд (24.01.2012 - 15:46) neadekvat написал(а):
Поставь firebug или воспользуйся любым другим отладчиком, чтобы проследить, что происходит со скриптом, когда он делает запрос.
Спустя 26 минут, 8 секунд (24.01.2012 - 16:12) panich написал(а):
Да ставил,читал в инете как пользоваться,пробовал...как бы стыдно не было признаться,но не разобрался как пользоваться в этом случае...(((
Спустя 5 минут, 12 секунд (24.01.2012 - 16:18) neadekvat написал(а):
Ох, некогда расписывать. Часа через 3-4 из тренажерки вернусь - расскажу, коль никто еще не ответит.
Спустя 13 минут, 56 секунд (24.01.2012 - 16:32) panich написал(а):
О!Я по утрам гоняю...
Хобби или сдавать физо заставляют по роду деятельности (у меня так)?
Мне кажется проблема здесь:
не правильно данные передаю...
П.С.По безопасности есть ещё подсказать!?
Хобби или сдавать физо заставляют по роду деятельности (у меня так)?
Мне кажется проблема здесь:
data: {'login':logVal, 'pass':passVal},
не правильно данные передаю...
П.С.По безопасности есть ещё подсказать!?
Спустя 2 часа, 36 минут, 4 секунды (24.01.2012 - 19:08) neadekvat написал(а):
Значицо так, скачиваешь Мозиллу, ставшь на нее Firebug. Включаешь его (на треть экрана снизу появится консоль), перезагружаешь страницу. Затем пробуешь отправить форму, ищешь в консоли вкладку "Сеть" или "Network", там будет показано, что происходило, че спрашивало, какой ответ.
Цитата (panich @ 24.01.2012 - 17:32) |
не правильно данные передаю... |
Неправильно слитно пишется.
Попробуй изменить на
data: 'login='+ logVal +'&pass='+ passVal,
Хотя, по-моему, и при текущем варианте должно работать.
Свернутый текст
Цитата (panich @ 24.01.2012 - 17:32) |
Хобби или сдавать физо заставляют по роду деятельности (у меня так)? |
Я бы так сказал - это необходимость. Но при этом получаю удовольствие, конечно же.
Все-таки работа программиста - это сидячая работа. Работа программиста-фрилансера - это еще и безвылозная работа. Так что есть шанс заплыть жиром и заработать геморрой. Меня такие перспективы не радуют :)
Ну, и по традиции: сколько грудь/становая/присед? Или ты другого направления?
Спустя 16 часов, 54 минуты, 56 секунд (25.01.2012 - 12:03) panich написал(а):
Я бег,подтягивание,отжимание,прес и плечи!
Каждый день с 7:50 - 8:20, кроме выходных!
У меня сдача раз в пол года:100 м.,1000 м., и подтягивание.
Понял одно,что лучше всего своим весом качаться-у меня,лично,так больше результата!
Каждый день с 7:50 - 8:20, кроме выходных!
У меня сдача раз в пол года:100 м.,1000 м., и подтягивание.
Понял одно,что лучше всего своим весом качаться-у меня,лично,так больше результата!
Спустя 4 часа, 2 минуты, 33 секунды (25.01.2012 - 16:05) panich написал(а):
Большое спасибо,что потратили столько времени на меня (для нас-новичков, это очень важно)!
Учёл все Ваши корректировки,но решил добить свой корявый код...
Как выяснилось проблема была в том,что php выдавал ошибку-не пропускал mysql_real_escape_string (по чему не знаю) и в php не было подключения к базе данных!!!
Только теперь не отключается у меня блокиратор кнопки,если использовать removeAttr...
Учёл все Ваши корректировки,но решил добить свой корявый код...
Как выяснилось проблема была в том,что php выдавал ошибку-не пропускал mysql_real_escape_string (по чему не знаю) и в php не было подключения к базе данных!!!
Только теперь не отключается у меня блокиратор кнопки,если использовать removeAttr...
Спустя 2 дня, 46 минут, 38 секунд (27.01.2012 - 16:52) panich написал(а):
Чот не сработало как подсказали...:
Вопрос в коде!
$('#btn').click(function(e){
var logVal = $('#name_vhod').val();
var passVal = $('#pass_vhod').val();
$.ajax({
type: "POST",
url: "testregJS.php",
data: {'login':logVal, 'pass':passVal},
success: function(html){
if (html != '')
{
//как вот тут заблочить кнопку!?
$("<div id='indTestV'></div>").insertAfter('#form_enter').html(html);
}
else
{
$('#indTestV').fadeOut(1000);
//а вот тут разблочить!?
}
}
Вопрос в коде!
Спустя 2 часа, 10 минут, 32 секунды (27.01.2012 - 19:02) neadekvat написал(а):
Заблочить элемент с id = "some_buttom":
Разблочить:
$('#some_buttom').attr('disabled', 'disabled');
Разблочить:
$('#some_buttom').removeAttr('disabled');
Спустя 2 дня, 14 часов, 13 минут, 13 секунд (30.01.2012 - 09:16) panich написал(а):
Большое спасибо за помощь!
Теперь приступил к валидации на js загружаемых изображений!
Гуглил и там готовых решений нет,а только вопросы на форумах без конкретных ответов,а отдельные товарищи пишут,что реализовать через js не возможно...
Если так,то вопрос:
как с помощью ajax передать переменную в php файл,загружаемую в базу?Нужно,что бы php получил значение $_FILES["filename"]["name"]?А дальше уже там проверить все дела?
Теперь приступил к валидации на js загружаемых изображений!
Гуглил и там готовых решений нет,а только вопросы на форумах без конкретных ответов,а отдельные товарищи пишут,что реализовать через js не возможно...
Если так,то вопрос:
как с помощью ajax передать переменную в php файл,загружаемую в базу?Нужно,что бы php получил значение $_FILES["filename"]["name"]?А дальше уже там проверить все дела?