За последние 24 часа нас посетили 60007 программистов и 1771 робот. Сейчас ищут 1970 программистов ...

организация валидации

Тема в разделе "PHP для новичков", создана пользователем Panich, 23 янв 2012.

  1. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Доброго времени суток!
    Попрошу разъяснить вот какой вопрос:
    Хочу реализовать обработку вводимых пользователем данных по средствам вывода сообщений об ошибках на js и php, для верности.
    Теперь сама суть:
    Вот беру поле,по средствам ajax передаю в php,там проверяю на валидность и через div вывожу сообщение об ошибке.При этом на js разблокирую кнопку(если всё хорошо),так как в html прописал значение btn-disabled...Есть ещё второй файл php, к которому обращается html,если отключен js(там примерно то же самое как и в первом).
    Вопрос:
    1. У меня выводит сообщения об ошибках сначала js,а потом ещё и дублирующий файл php(на белом фоне через echo).
    2. Как я понимаю,в файле php,который срабатывает при обращении js, не нужно прописывать работу с вводом данных в базу?
    Натолкните где тут глупости делаю!?Спасибо...
     
  2. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Может лучше код покажешь, а то честно говоря я ничего не понял
     
  3. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Код (Text):
    1.  <form  action="../znakomstva/testreg.php" method="POST" id="form_enter">
    2.               <input id="name_vhod" type="text" name="login" maxlength="20">
    3.               <input id="pass_vhod" type="password" name="pass" maxlength="15">
    4.               <input id="autovhod" type="checkbox" name="autovhod" value="1">
    5.               <input id="btn" type="submit" name="btn" value="">
    6.          </form>
    Код (Text):
    1. $('#form_enter input[name=btn]').click(function(){
    2.     if ($('#name_vhod').val().length == 0)
    3.     {
    4.         $("<div id='indNameV'>Не введён ЛОГИН!</div>").insertAfter('#form_enter');
    5.         $('#form_enter #btn').attr('disabled', 'disabled');
    6.     }
    7.     else
    8.     {
    9.         if(!$('#name_vhod').val().match("/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,6}$/"))
    10.         {
    11.             $("<div id='indNameV'>Некорректно введён email-адрес!</div>").insertAfter('#form_enter');
    12.             $('#form_enter #btn').attr('disabled', 'disabled');
    13.         }
    14.     }
    15. });
    Подскажите,почему в этом случеае у меня кнопка не блокируется и как организовать здесь проверки типа
    $old_login = mysql_real_escape_string(trim(htmlspecialchars($_SESSION['login'])));
    $login = mysql_real_escape_string(trim($_POST['login']));
    $login = htmlspecialchars($login);
    а самое главное-нужно ли это здесь?
     
  4. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    В приведённом выше коде если пишу,что бы при событии с полем blur кнопка просто блокировалась,то срабатывает.
    А, если что бы при нажатии на кнопку проверялось условия if else,то блокиратор не работает.Почему?
     
  5. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Спасибо большое за советы-всё учёл и переработал с некоторыми корректировками!
    Вот только остался один вопрос:
    почему при вводе даже корректного логина (email) тоже выдаёт ошибку:
    if(!$('#name_vhod').val().match("/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,6}$/"))
    ???
     
  6. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Вот к чему пришёл:
    Код (Text):
    1. <form  action="../znakomstva/testreg.php" method="POST" id="form_enter">
    2.               <input id="name_vhod" type="text" name="login" maxlength="21">
    3.               <input id="pass_vhod" type="password" name="pass" maxlength="16">
    4.               <input id="autovhod" type="checkbox" name="autovhod" value="1">
    5.               <input id="btn" type="submit" name="btn" value="">
    6.          </form>
    Код (Text):
    1. $('#btn').click(function(e){   
    2.     if ($('#name_vhod').val().length == 0)
    3.     {
    4.     $("<div id='indTestV'>Не введён ЛОГИН!</div>").insertAfter('#form_enter');
    5.     e.preventDefault();
    6.     }
    7.     else
    8.     {
    9.         if ($('#name_vhod').val().length > 20)
    10.         {
    11.         $("<div id='indTestV'>ЛОГИН не должен превышать 20 символов!</div>").insertAfter('#form_enter');
    12.         e.preventDefault();
    13.         }
    14.         else
    15.         {
    16.             var mail = /^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,6}$/;
    17.             if(!$('#name_vhod').val().match(mail))
    18.             {
    19.             $("<div id='indTestV'>Некорректно введён email-адрес!</div>").insertAfter('#form_enter');
    20.             e.preventDefault();
    21.             }
    22.             else
    23.             {
    24.                 if ($('#pass_vhod').val().length == 0)
    25.                 {
    26.                 $("<div id='indTestV'>Не введён ПАРОЛЬ!</div>").insertAfter('#form_enter');
    27.                 e.preventDefault();
    28.                 }
    29.                 else
    30.                 {
    31.                     if ($('#pass_vhod').val().length < 3 || $('#pass_vhod').val().length > 15)
    32.                     {
    33.                     $("<div id='indTestV'>ПАРОЛЬ должен составлять от 3 до 15 символов!</div>").insertAfter('#form_enter');
    34.                     e.preventDefault();
    35.                     }
    36.                     else
    37.                     {
    38.                         var logVal = $('#name_vhod').val();
    39.                         var passVal = $('#pass_vhod').val();
    40.                         $.ajax({
    41.                         type: "POST",
    42.                         url: "testregJS.php",
    43.                         data: {'login':logVal, 'pass':passVal},
    44.                         success: function(html){
    45.                             $("<div id='indTestV'></div>").insertAfter('#form_enter').html(html);
    46.                             $('#btn').attr('disabled' , 'disabled');
    47.                         }
    48.                         });
    49.                     }
    50.                 }
    51.             }
    52.         }
    53.     }
    54. });
    55. $('#name_vhod, #pass_vhod').focus(function(){
    56.     $('#indNameV').fadeOut(1000);
    57.     $('#btn').removeAttr('disabled');
    58. });
    Код (Text):
    1. <?php
    2. $login = mysql_real_escape_string(trim($_POST['$login']));
    3. $login = iconv('UTF-8', 'Windows-1251', $login);
    4. $login = htmlspecialchars($login);
    5. if(get_magic_quotes_gpc())
    6. {
    7. $login = stripslashes($login);
    8. }
    9. $pass = mysql_real_escape_string(trim($_POST['$pass']));
    10. $pass = iconv('UTF-8', 'Windows-1251', $pass);
    11. $pass = htmlspecialchars($pass);
    12. if(get_magic_quotes_gpc())
    13. {
    14. $pass = stripslashes($pass);
    15. }
    16. $sql = "SELECT `pass` FROM `users` WHERE `login`='$login'";
    17. $result = mysql_query($sql, $db)or die("Ошибка в запросе: " . mysql_error());
    18. if ($result = TRUE)
    19. {
    20.     $pass = md5($pass);  
    21.     $pass = strrev($pass);      
    22.     $pass = $pass."cR9i7Z";
    23.     $myrow = mysql_fetch_array($result);
    24.     if ($myrow['pass'] != $pass)
    25.     {
    26.     $html = "<div>Проверте правильность введённых данных!</div>";
    27.     echo ($html);
    28.     }
    29. }
    30. ?>
    Всё замечательно работает,только вот аякс что-то касячит!Не выводит сообщение об ошибке...тут подскажете?
    П.С.Кстати,подскажите сильно ужасно пишу?Как это влияет на работоспособность сайта?
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Код (PHP):
    1. $_POST['$login']$_POST['$pass'] 
    ==>
    Код (PHP):
    1. $_POST['login']$_POST['pass'] 
    Код (PHP):
    1. $login = mysql_real_escape_string(trim($_POST['$login']));
    2. $login = iconv('UTF-8', 'Windows-1251', $login);
    3. $login = htmlspecialchars($login);
    4. {
    5. $login = stripslashes($login);
    6. } 
    Сперва stripslashes(), а уже потом mysql_real_escape_string()
    htmlspecialchars() тут вообще ни к чему...
     
  8. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Первое исправил уже-заметил!)))
    Про второе спасибо,но проблемы это не решает.Думаю проблема здесь:
    Код (Text):
    1. data: {'login':logVal, 'pass':passVal},
    что только не пробовал,но информация не отправляется...что делать?
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    <input id="name_vhod" type="text" name="login" maxlength="21" value="">
    допиши value=""
    id="name_vhod" - зачем используете ид, только лишний раз забивать голову.


    Код (Text):
    1.  
    2. $('#form_enter input[name=btn]').click(function()
    3. {
    4.     var login=$('#form_enter input[name=login]').val(),pass=$('#form_enter input[name=pass]').val();
    5.     if(login=='')
    6.     {
    7.         $("<div id='indTestV'>Некорректно введён email-адрес!</div>").insertAfter('#form_enter');
    8.         $('#form_enter input[name=login]').select();
    9.         return false;
    10.     }else
    11.     if(!/^\w{3,15}$/.test(password))
    12.     {
    13.         $("<div id='indTestV'>ПАРОЛЬ должен составлять от 3 до 15 символов!</div>").insertAfter('#form_enter');
    14.         $('#form_enter input[name=pass]').select();
    15.         return false;
    16.     }else
    17.     if(!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(login))
    18.     {
    19.         $("<div id='indTestV'>Некорректно введён email-адрес!</div>").insertAfter('#form_enter');
    20.         $('#form_enter input[name=login]').select();
    21.         return false;
    22.     }else{
    23.                       $.post('testregJS.php',{login:login,pass:pass},function(html)
    24.                       {
    25.                          $("<div id='indTestV'></div>").insertAfter('#form_enter').html(html);
    26.                          $('#btn').attr('disabled','disabled');
    27.                       });
    28.                }
    29. }
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    $.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');
    }
    });




    $.post('testregJS.php',{login:login,pass:pass},function(html)
    {
    $("<div id='indTestV'></div>").insertAfter('#form_enter').html(html);
    $('#btn').attr('disabled','disabled');
    });
     
  11. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Всем большое спасибо,что потратили столько времени на меня (для нас-новичков, это очень важно)!
    Учёл все Ваши корректировки,но решил добить свой "корявый" код...
    Как выяснилось проблема была в том,что php выдавал ошибку-не пропускал mysql_real_escape_string (по чему не знаю) и в php не было подключения к базе данных!!!
    Только теперь не отключается у меня блокиратор кнопки,если использовать removeAttr...
     
  12. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    mysql_real_escape_string() не работала именно потому, что не было подключения к б.д., этой функции для работы оно необходимо.

    На счёт блокировки/разблокировки кнопки - можешь попробовать так:

    заблокировать:
    Код (Text):
    1. document.getElementById('btn').disabled = true;
    разблокировать:
    Код (Text):
    1. document.getElementById('btn').disabled = false;
     
  13. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Чот не сработало как подсказали...:
    Код (Text):
    1. $('#btn').click(function(e){   
    2. var logVal = $('#name_vhod').val();
    3.                         var passVal = $('#pass_vhod').val();
    4.                         $.ajax({
    5.                         type: "POST",
    6.                         url: "testregJS.php",
    7.                         data: {'login':logVal, 'pass':passVal},
    8.                         success: function(html){
    9.                             if (html != '')
    10.                             {
    11.                             //как вот тут заблочить кнопку!?   
    12.                             $("<div id='indTestV'></div>").insertAfter('#form_enter').html(html);
    13.                             }
    14.                             else
    15.                             {
    16.                             $('#indTestV').fadeOut(1000);  
    17.                             //а вот тут разблочить!?
    18.                             }
    19.                         }
    Вопрос в коде!
     
  14. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    То, что я в последнем посте тут написал - должно сработать :) Не знаю, почему у тебя не работает, но, наверно, косяк где-то в другом месте.

    Вот такой код:
    Код (Text):
    1. <html>
    2.     <head>
    3.         <meta http-equiv="Content-type" content="text/html" />
    4.         <title>TEST</title>
    5.         <script type="text/javascript">
    6.             function block(act) {
    7.                 document.getElementById('btn').disabled = act;
    8.             }
    9.         </script>
    10.     </head>
    11.     <body>
    12.         <a href="javascript:block(true)">Block</a> &nbsp;
    13.         <a href="javascript:block(false)">Unblock</a>
    14.         <br />
    15.         <input type="button" id="btn" value="I am a button!" onclick="javascript:alert('Yahooo!')" />
    16.     </body>
    17. </html>
    работает? Просто скопируй и вставь в пустой файл в папке хоста и назови как-нибудь .html
     
  15. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
  16. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    ???Прочёл про неё-какое это имеет значение в моём случае?

    Тут вот какя дилема:я когда отдельно использую даже e.preventDefault();,то кнопка блокируется,а когда встариваю в событие click с одновременной проверкой условий if,else,то перестаёт фурычить...получается,что когда хочешь заблочить кнопку,то этого делать нельзя используя click...!?!?!

    Но в итоге решил бросить click и использовал submit!Почему никто не предложил так реализовать?Это опасно для безопасности или есть подводные камни?
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    stoppropogation напиши в гугл. я точно не помню как пишется, но он подправит. плюс там еще одно похожее есть. одно из них сработает
     
  18. Panich

    Panich Активный пользователь

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Почитал.Интересно!
    Большое спасибо за помощь!
    Теперь приступил к валидации на js загружаемых изображений!
    Гуглил и там готовых решений нет,а только вопросы на форумах без конкретных ответов,а отдельные товарищи пишут,что реализовать через js не возможно...
    Если так,то вопрос:
    как с помощью ajax передать переменную в php файл,загружаемую в базу?Нужно,что бы php получил значение $_FILES["filename"]["name"]?А дальше уже там проверить все дела?