Доброго времени суток! Попрошу разъяснить вот какой вопрос: Хочу реализовать обработку вводимых пользователем данных по средствам вывода сообщений об ошибках на js и php, для верности. Теперь сама суть: Вот беру поле,по средствам ajax передаю в php,там проверяю на валидность и через div вывожу сообщение об ошибке.При этом на js разблокирую кнопку(если всё хорошо),так как в html прописал значение btn-disabled...Есть ещё второй файл php, к которому обращается html,если отключен js(там примерно то же самое как и в первом). Вопрос: 1. У меня выводит сообщения об ошибках сначала js,а потом ещё и дублирующий файл php(на белом фоне через echo). 2. Как я понимаю,в файле php,который срабатывает при обращении js, не нужно прописывать работу с вводом данных в базу? Натолкните где тут глупости делаю!?Спасибо...
Код (Text): <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> Код (Text): $('#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); а самое главное-нужно ли это здесь?
В приведённом выше коде если пишу,что бы при событии с полем blur кнопка просто блокировалась,то срабатывает. А, если что бы при нажатии на кнопку проверялось условия if else,то блокиратор не работает.Почему?
Спасибо большое за советы-всё учёл и переработал с некоторыми корректировками! Вот только остался один вопрос: почему при вводе даже корректного логина (email) тоже выдаёт ошибку: if(!$('#name_vhod').val().match("/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,6}$/")) ???
Вот к чему пришёл: Код (Text): <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> Код (Text): $('#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'); }); Код (Text): <?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); } } ?> Всё замечательно работает,только вот аякс что-то касячит!Не выводит сообщение об ошибке...тут подскажете? П.С.Кстати,подскажите сильно ужасно пишу?Как это влияет на работоспособность сайта?
Код (PHP): $_POST['$login']$_POST['$pass'] ==> Код (PHP): $_POST['login']$_POST['pass'] Код (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); } Сперва stripslashes(), а уже потом mysql_real_escape_string() htmlspecialchars() тут вообще ни к чему...
Первое исправил уже-заметил!))) Про второе спасибо,но проблемы это не решает.Думаю проблема здесь: Код (Text): data: {'login':logVal, 'pass':passVal}, что только не пробовал,но информация не отправляется...что делать?
<input id="name_vhod" type="text" name="login" maxlength="21" value=""> допиши value="" id="name_vhod" - зачем используете ид, только лишний раз забивать голову. Код (Text): $('#form_enter input[name=btn]').click(function() { var login=$('#form_enter input[name=login]').val(),pass=$('#form_enter input[name=pass]').val(); if(login=='') { $("<div id='indTestV'>Некорректно введён email-адрес!</div>").insertAfter('#form_enter'); $('#form_enter input[name=login]').select(); return false; }else if(!/^\w{3,15}$/.test(password)) { $("<div id='indTestV'>ПАРОЛЬ должен составлять от 3 до 15 символов!</div>").insertAfter('#form_enter'); $('#form_enter input[name=pass]').select(); return false; }else if(!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(login)) { $("<div id='indTestV'>Некорректно введён email-адрес!</div>").insertAfter('#form_enter'); $('#form_enter input[name=login]').select(); return false; }else{ $.post('testregJS.php',{login:login,pass:pass},function(html) { $("<div id='indTestV'></div>").insertAfter('#form_enter').html(html); $('#btn').attr('disabled','disabled'); }); } }
$.ajax( { type: "POST", url: "testregJS.php", data: {'login':logVal, 'pass'assVal}, success: function(html) { $("<div id='indTestV'></div>").insertAfter('#form_enter').html(html); $('#btn').attr('disabled' , 'disabled'); } }); $.post('testregJS.php',{login:login,passass},function(html) { $("<div id='indTestV'></div>").insertAfter('#form_enter').html(html); $('#btn').attr('disabled','disabled'); });
Всем большое спасибо,что потратили столько времени на меня (для нас-новичков, это очень важно)! Учёл все Ваши корректировки,но решил добить свой "корявый" код... Как выяснилось проблема была в том,что php выдавал ошибку-не пропускал mysql_real_escape_string (по чему не знаю) и в php не было подключения к базе данных!!! Только теперь не отключается у меня блокиратор кнопки,если использовать removeAttr...
mysql_real_escape_string() не работала именно потому, что не было подключения к б.д., этой функции для работы оно необходимо. На счёт блокировки/разблокировки кнопки - можешь попробовать так: заблокировать: Код (Text): document.getElementById('btn').disabled = true; разблокировать: Код (Text): document.getElementById('btn').disabled = false;
Чот не сработало как подсказали...: Код (Text): $('#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); //а вот тут разблочить!? } } Вопрос в коде!
То, что я в последнем посте тут написал - должно сработать Не знаю, почему у тебя не работает, но, наверно, косяк где-то в другом месте. Вот такой код: Код (Text): <html> <head> <meta http-equiv="Content-type" content="text/html" /> <title>TEST</title> <script type="text/javascript"> function block(act) { document.getElementById('btn').disabled = act; } </script> </head> <body> <a href="javascript:block(true)">Block</a> <a href="javascript:block(false)">Unblock</a> <br /> <input type="button" id="btn" value="I am a button!" onclick="javascript:alert('Yahooo!')" /> </body> </html> работает? Просто скопируй и вставь в пустой файл в папке хоста и назови как-нибудь .html
???Прочёл про неё-какое это имеет значение в моём случае? Тут вот какя дилема:я когда отдельно использую даже e.preventDefault();,то кнопка блокируется,а когда встариваю в событие click с одновременной проверкой условий if,else,то перестаёт фурычить...получается,что когда хочешь заблочить кнопку,то этого делать нельзя используя click...!?!?! Но в итоге решил бросить click и использовал submit!Почему никто не предложил так реализовать?Это опасно для безопасности или есть подводные камни?
stoppropogation напиши в гугл. я точно не помню как пишется, но он подправит. плюс там еще одно похожее есть. одно из них сработает
Почитал.Интересно! Большое спасибо за помощь! Теперь приступил к валидации на js загружаемых изображений! Гуглил и там готовых решений нет,а только вопросы на форумах без конкретных ответов,а отдельные товарищи пишут,что реализовать через js не возможно... Если так,то вопрос: как с помощью ajax передать переменную в php файл,загружаемую в базу?Нужно,что бы php получил значение $_FILES["filename"]["name"]?А дальше уже там проверить все дела?