За последние 24 часа нас посетили 17387 программистов и 1718 роботов. Сейчас ищут 1516 программистов ...

Валидация

Тема в разделе "JavaScript и AJAX", создана пользователем Panich, 29 дек 2011.

  1. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Не совсем понял,как в моём случае это можно использовать?
    Попробовал в php объявить $html='',если удовлетворило условиям,а в js проверить if(html=''),то не выводить,но не вышло нечего...может уточните вариант!?

    И тут ещё:
    Код (Text):
    1. $.ajax({
    2.     type: "POST",
    3.     url: "php.php",
    4.     data: "name="+nameVal,
    5.         success: function(html){
    как ниже мне можно получить значение $html,которое я из php получаю?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    внутри функции будет этот html
     
  3. Denis.Y

    Denis.Y Активный пользователь

    С нами с:
    8 авг 2011
    Сообщения:
    145
    Симпатии:
    0
    Адрес:
    Россия, Самарская область
    Код (Text):
    1. $.ajax({
    2.     type: "POST",
    3.     url: "php.php",
    4.     data: "name="+nameVal,
    5.         success: function(html){
    6. /* здесь вам нужно указать в какой элемент выводить этот html код,
    7. а так же сделать .removeAttr() для кнопки.
    8.  
    9. если же в html пусто, то для дива - .css() .attr() и оные, ставить свойство - display:none;*/
    10.  
    11. }
     
  4. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    если же в html пусто, то для дива - .css() .attr() и оные, ставить свойство - display:none;*/
    1.)Да это понятно...вот как составить условие?Так:
    Код (Text):
    1. if (html='')
    2. {
    3. <div>........
    4. }
    Или:
    Код (Text):
    1. if (html.html='')
    2. {
    3. <div>........
    4. }
    Я не очень,как Вы заметили,в js!
    2.)Для кнопки так:
    Код (Text):
    1. $('.btn_modal').removeAttr()
    Или:
    Код (Text):
    1. $('.btn_modal').click(function(){return false;})
    И ещё,что бы было понятно-вот как выделывается скрипт:
    Код (Text):
    1. $.ajax({
    2.     type: "POST",
    3.     url: "php.php",
    4.     data: "name="+nameVal,
    5.         success: function(html){
    6. alert (html);
    Выводит как и запланировано:либо текст сообщения об ошибке,либо пустоту!
    Тут:
    Код (Text):
    1. $.ajax({
    2.     type: "POST",
    3.     url: "php.php",
    4.     data: "name="+nameVal,
    5.         success: function(html){
    6. if (html == '')
    7. {
    8. alert ('Я уже задолбался морочиться с этой проверкой!');
    9. }
    Вообще ничего не выводит!В чём может быть причина?
    ПОМОГИТЕ завалить этого зверя-сам не справлюсь!!!
     
  5. Denis.Y

    Denis.Y Активный пользователь

    С нами с:
    8 авг 2011
    Сообщения:
    145
    Симпатии:
    0
    Адрес:
    Россия, Самарская область
    ну это же всё просто, Вам просто нужно воспользоваться гуглом и посмотреть примеры работы)
    для removeAttr() нужно указывать атрибут который хотите удалить (disabled) для активации кнопки.

    а вместо:
    Код (Text):
    1. if (html='')
    2. {
    3. <div>........
    4. }
    Код (Text):
    1.  
    2. if (html!='')
    3. {
    4. $(divid).html(html);
    5. }
    6. else
    7. {
    8. $(divid).attr('style','display:none;');
    9. }
    както так.
     
  6. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Я там дописал выше-немного не получается,что Вы советовали!
    Вот что реализовал,опираясь на Ваши корректировки:
    Код (Text):
    1. $('#name_red').blur(function () {
    2.     var nameVal = $('#name_red').val();
    3.     if(nameVal =='')
    4.     {
    5.     $(this).val($(this).attr('defaultValue'));
    6.     }
    7.     else
    8.     {
    9.     $.ajax({
    10.     type: "POST",
    11.     url: "php.php",
    12.     data: "name="+nameVal,
    13.         success: function(html){
    14.            if (html != '')
    15.            {
    16.               $("<div id='indicatorName'></div>").insertAfter('#name_red').html(html);
    17.               $('.btn_modal').click(function(e){
    18.               e.preventDefault();
    19.               });
    20.            }
    21.            else
    22.            {  
    23.               $('div#indicatorName').attr('style','display:none;');
    24.               $('input.btn_modal').click(function(){
    25.               return false;
    26.               });  
    27.            }
    28.         }
    29.     });
    30.     }
    31. });
    32. $('#name_red').focus(function(){
    33.     $('#indicatorName').fadeOut(1000);                       
    34.     if($(this).val() == $(this).attr('defaultValue'))
    35.     {
    36.     $(this).val('');
    37.     }
    38. });
    Что получается:
    1.Сообщение об ошибке появляется как и задумано(если неправильно)!
    2.Если правильно,то появляется пустая рамка-то есть не помогли удаления стилей!
    3.Кнопка так и не разблокируется-куда прилепить removeAttr я так и не понял после прочтения-точнее понял,но как применить в моём случае не знаю!
     
  7. Denis.Y

    Denis.Y Активный пользователь

    С нами с:
    8 авг 2011
    Сообщения:
    145
    Симпатии:
    0
    Адрес:
    Россия, Самарская область
    Код (Text):
    1.  
    2. if (html != '')
    3.  {
    4.    $('#div_id_to_show_info').html(html);
    5.    $('#button_id_to_show').removeAttr("disabled");
    6.  }
    7. else
    8.  {  
    9.    $('#div_id_to_show_info').attr('style','display:none;');
    10.  }
    Полагаю что у Вас div_id_to_show_info это - indicatorName.
     
  8. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Всё Вы правильно понимаете!
    Только вот проблема в том,что if (html !=''),когда вызываешь alert,то выводит пустоту,а если выводишь как Вы предложили,то не срабатывает это условия-вот причину не могу понять.............................
    Это злополучное alse отказывается выполняться,а значит,что html не возвращает пустоту?Но alert же ничего не выводит-как так может быть?Может проблема в php-можете взглянуть?
    Выложу полностью,что сейчас есть:
    php:
    Код (Text):
    1. <?php
    2. //для js проверки
    3.                         ////////////////////////////////ИЗМЕНЕНИЕ ИМЕНИ ////////////////////////////
    4. session_start();        
    5. include ("bd.php");
    6. $id = $_SESSION['id'];
    7. if (!preg_match("|^[\d]+$|", $id))    
    8. {            
    9. $html = '<div>Неверный формат запроса! Проверьте URL!</div>';        
    10. }
    11. if (isset($_POST['name']))
    12. {
    13. $name = mysql_real_escape_string(trim($_POST['name']));
    14. $name = iconv('UTF-8', 'Windows-1251', $name);
    15. $name = htmlspecialchars($name);
    16.    if(get_magic_quotes_gpc())
    17.    {
    18.    $name = stripslashes($name);
    19.    }
    20.    $html ='';
    21.    if(!preg_match('/^[А-Яа-яЁё]{2,20}$/', $name))
    22.    {
    23.    $html = '<div>Используйте только от 2-х до 20-ти<br> символов русского алфавита!</div>';
    24.    }
    25.    else
    26.    {
    27.    $sql18 = "UPDATE users SET name='$name' WHERE id='$id'";
    28.    $result18 = mysql_query($sql18, $db)or die("Ошибка в запросе: " . mysql_error());
    29.       if (!$result18)
    30.       {
    31.       $html = '<div>Ошибка обновления имени-попробуйте ещё раз!</div>';
    32.       }
    33.    }
    34. echo($html);
    35. }
    36. ?>
    js:
    Код (Text):
    1. $('#name_red').blur(function () {
    2.     var $Name = $(this);
    3.     var nameVal = $('#name_red').val();
    4.     if(nameVal =='')
    5.     {
    6.     $(this).val($(this).attr('defaultValue'));
    7.     }
    8.     else
    9.     {
    10.     $.ajax({
    11.     type: "POST",
    12.     url: "php.php",
    13.     data: "name="+nameVal,
    14.         success: function(html){
    15.            if (html != '')
    16.            {
    17. //Вот тут в теории принимает html значение из php.
    18. //Я пробовал его выводить через alert-если не удовлетворяет условию,то выводится <div></div>,а если удовлетворяет,то пустота в алерте
    19. //вроде как должно всё работать-да вот только не работает если выполнять написанные мной условия!
    20. //Помогите понять в чём причина?!
    21.               $("<div id='indicatorName'></div>").insertAfter('#name_red').html(html);
    22.               $('.btn_modal').click(function(e){
    23.               e.preventDefault();
    24.               });
    25.            }
    26.            else
    27.            {
    28. //вот это условие вообще не выполняется!Не убирается div и кнопка не разблокируется
    29.               $Name.next().attr('style','display:none;');
    30.               $('.btn_modal').removeAttr('disabled');
    31.            }
    32.         }
    33.     });
    34.     }
    35. });
    36. //убирает div только вот этот скрипт
    37. $('#name_red').focus(function(){
    38.     $('#indicatorName').fadeOut(1000);                       
    39.     if($(this).val() == $(this).attr('defaultValue'))
    40.     {
    41.     $(this).val('');
    42.     }
    43. });
    Обращайтесь.Читайте.Но самое главное помогайте.....!!!
    Отчаялся уже...гляньте кто-нить!А?
     
  9. Михаил

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

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    >Вот тут в теории принимает html значение из php.
    дело в том, что в скрипте если всё правильно, то отправляется пустая переменная. нужно дописать
    Код (Text):
    1.  
    2. if (!$result18)
    3.       {
    4.       $html = '<div>Ошибка обновления имени-попробуйте ещё раз!</div>';
    5.       }
    6. //*****************************
    7. else{
    8.    $html = 'ok';
    9. }
    ещё момент
    $id = $_SESSION['id'];
    нужно наоборот, когда в сессию записываешь, то проверяешь, а когда выводишь уже очевидно не нужно проверять
     
  10. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    А если пойти от противного и избавиться от загрузки в базу данных и оставить:
    Код (Text):
    1. session_start();
    2. include ("bd.php");
    3. $id = $_SESSION['id'];
    4. if (!preg_match("|^[\d]+$|", $id))
    5. {
    6. $html = '<div>Неверный формат запроса! Проверьте URL!</div>';    
    7. }
    8. if (isset($_POST['name']))
    9. {
    10. $name = mysql_real_escape_string(trim($_POST['name']));
    11. $name = iconv('UTF-8', 'Windows-1251', $name);
    12. $name = htmlspecialchars($name);
    13.    if(get_magic_quotes_gpc())
    14.    {
    15.    $name = stripslashes($name);
    16.    }
    17.    if(!preg_match('/^[А-Яа-яЁё]{2,20}$/', $name))
    18.    {
    19.    $html = '<div>Используйте только от 2-х до 20-ти<br> символов русского алфавита!</div>';
    20.    }
    21.    else
    22.    {
    23.    $html == '';
    24.    }
    25. echo($html);
    26. }
    27. ?>
    Я хочу добиться,что бы кнопка начинала работать,а рамка из под сообщения об ошибке исчезала,но ничего не выходит...как тут прикажете поступить?
     
  11. Denis.Y

    Denis.Y Активный пользователь

    С нами с:
    8 авг 2011
    Сообщения:
    145
    Симпатии:
    0
    Адрес:
    Россия, Самарская область
    попробуйте echo без ковычек.
    Код (Text):
    1.  
    2. <?
    3.     session_start();
    4.     include ("bd.php");
    5.     if (!preg_match("|^[\d]+$|", $_SESSION['id']))
    6.     {
    7.         $html = '<div>Неверный формат запроса! Проверьте URL!</div>';    
    8.     }
    9.     else
    10.     {
    11.         if (isset($_POST['name']))
    12.         {
    13.             $name = mysql_real_escape_string(trim($_POST['name']));
    14.             $name = iconv('UTF-8', 'Windows-1251', $name);
    15.             $name = htmlspecialchars($name);
    16.                if(get_magic_quotes_gpc())
    17.                {
    18.                $name = stripslashes($name);
    19.                }
    20.                if(!preg_match('/^[А-Яа-яЁё]{2,20}$/', $name))
    21.                {
    22.                 $html = '<div>Используйте только от 2-х до 20-ти<br> символов русского алфавита!</div>';
    23.                }
    24.                else
    25.                {
    26.                }
    27.             echo $html;
    28.         }
    29.     }
    30.     ?>
     
  12. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Это как написать?
    echo = ;????
    А кто сможет подсказать как отключить кнопку,а потом включить через if,else...попробовал,что есть в гугле,но не работает...(((
     
  13. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Всем спасибо,всё сделал!
    Два последних вопроса:
    1.На кнопку в html поставил disabled-это чревато чем-то?
    2.Если форма регистрации высвечивается только при работающем яваскрипт в модальном окне,имеет ли смысл проверять её на стороне сервера...ведь пользователь отключив яваскрипт все-равно на неё не попадет?
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    проверяй
     
  15. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Да, нужно всё равно проверять. Поскольку запрос можно преднамеренно подделать.
     
  16. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Ну,что тут проверять-я,конечно,пробовал яву отключать и попасть в эту форму никак не мог...вопрос задал,что бы профи может сталкивались с неординарными ситуациями;особенно по первому вопросу...может Вы сталкивались!
     
  17. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Пример на пальцах можете привести?
     
  18. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Запрос с данными формы можно отправить в твой PHP-обработчик вообще не из браузера. И пофигу ему будет на JavaScript.

    Например, на том же PHP (curl, file_get_contents + stream_context_create) можно генерировать запросы к серверу и отправлять любые данные, какие вздумается. Можно во всяких firebug-ах, на сколько знаю, любые запросы придумывать.
     
  19. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Круто!Думаю защититься на 100% вообще невозможно!
    Тогда вот вопросик ещё:
    Сначала я сделал два файла для проверки формы на php.На один отправлял запрос аякс и на основании полученных результатов выводил сообщения об ошибках,но ели пользователь вводил данные правильно-проверка через аякс прошла положительно! Соответственно данные отправлялись на дублирующий php файл(который запланирован был для проверки, если яваскрипт отключён).Только вот проблема-выводит этот дублирующий файл сообщения об ошибках!!!(через echo).
    Попробовал всё объединить в один:если нет ошибок,то опять сообщение об ошибке на белом фоне через echo...
    Как тут реализовать?
     
  20. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Почитал.Интересно!
    Большое спасибо за помощь!

    Теперь приступил к валидации на js загружаемых изображений!
    Гуглил и там готовых решений нет,а только вопросы на форумах без конкретных ответов,а отдельные товарищи пишут,что реализовать через js не возможно...
    Если так,то вопрос:
    как с помощью ajax передать переменную в php файл,загружаемую в базу?Нужно,что бы php получил значение $_FILES["filename"]["name"]?А дальше уже там проверить все дела?
    Ну,например так:
    Код (Text):
    1. <input id="fupload_red" type="file" name="fupload" value=""><br>
    И:
    Код (Text):
    1. $('#btn_red').click(function () {                                      
    2.     var fovoVal = $('#fupload_red').val();
    3.     if (fovoVal !== '')
    4.     {
    5.         $.ajax({
    6.         type: "POST",
    7.         url: "update_userJS.php",
    8.         data: {'fupload':fovoVal},
    9.             success: function(html){
    10.                 if (html !== '')
    11.                 {
    12.                 $("<div id='indicatorAva'></div>").insertAfter('#fupload_red').html(html);
    13.                 document.getElementById('btn_red').disabled = true;
    14.                 }
    15.                 else
    16.                 {
    17.                 $('#indicatorAva').fadeOut(1000);
    18.                 document.getElementById('btn_red').disabled = false;
    19.                 }
    20.             }
    21.         });
    22.     }
    23. });
    php не принимает $_FILES["filename"]["name"]!?Почему!?
     
  21. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Код (PHP):
    1. var_dump($_FILES);
    2.  
     
  22. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Прогуглил-не нашёл примеров загрузки через ajax с использованием вашего примера...
     
  23. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    :)))
    надо "сделать" var_dump($_FILES); что бы понять почему???
     
  24. Panich

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

    С нами с:
    10 май 2011
    Сообщения:
    548
    Симпатии:
    0
    Адрес:
    Ростов-Москва
    Щас я Вас научу)))))):
    Соответственно js:
    Код (Text):
    1. $('#fupload_red').blur(function () {                                       
    2.     var fovoVal = $('#fupload_red').val();
    3.     if (fovoVal !== '')
    4.     {
    5.         var imgTest = /^[A-Za-zА-Яа-я0-9-_]+[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/;
    6.         if(!fovoVal.match(imgTest))
    7.         {
    8.         $("<div id='indicatorAva'>Аватар должен быть в формате<br><strong>JPG,GIF или PNG</strong></div>").insertAfter('#fupload_red');
    9.         document.getElementById('btn_red').disabled = true;
    10.         }
    11.         else
    12.         {
    13.             var avaVal = $('input[name=userid]').val();
    14.             $.ajax({
    15.                 type: "POST",
    16.                 url: "update_userJS.php",
    17.                 data: {'userid':avaVal},
    18.                     success: function(html){
    19.                         if (html !== '')
    20.                         {
    21.                         $("<div id='indicatorAva'></div>").insertAfter('#fupload_red').html(html);
    22.                         document.getElementById('btn_red').disabled = true;
    23.                         }
    24.                         else
    25.                         {
    26.                         $('#indicatorAva').fadeOut(1000);
    27.                         document.getElementById('btn_red').disabled = false;
    28.                         }
    29.                     }
    30.             });
    31.         }
    32.     }
    33. });
    Тут php:
    Код (Text):
    1. include ("bd_fotouser.php");
    2. if (isset($_POST['userid']))                
    3. {
    4.     $userid = mysql_real_escape_string(trim($_POST['userid']));
    5.     $userid = htmlspecialchars($userid);
    6.     if(get_magic_quotes_gpc())
    7.     {
    8.     $userid = stripslashes($userid);
    9.     }
    10.     $sql24 = "SELECT COUNT(*) FROM `fotouser` WHERE `id_user_ava` = '$userid'";
    11.     $result24 = mysql_query($sql24, $db)or die("Ошибка в запросе: " . mysql_error());
    12.     if (!$result24)
    13.     {
    14.     echo "ошибка - ".mysql_error()."<br>";
    15.     echo $sql24;
    16.     exit();
    17.     }
    18.     else
    19.     {
    20.         $row = mysql_fetch_assoc($result24);
    21.         $uploadedfiles = $row[0];
    22.         if ($uploadedfiles >= 3)
    23.         {
    24.         $html = "<div>Загружать более трёх фотограыий нельзя!</div>";
    25.         }
    26.         else
    27.         {
    28.             $foto_size = $_FILES['fupload']['size'];
    29.             if ($foto_size > 5*1024*1000)
    30.             {
    31.             die ('Размер картинки превысил лимит в 5 Мб. <a href="'.$PHP_SELF.'" target="_self">Загрузить снова</a>');
    32.             }
    33.             else
    34.             {
    35.             $html = '';
    36.             }
    37.         }
    38.     }
    39. echo $html;
    40. }
    И наконец форма отправки:
    Код (Text):
    1. $avaForma.='<br><strong>Не больше трёх:</strong>
    2. <input id="fupload_red" type="file" name="fupload" value=""><br>
    3. <input type="hidden" name="userid" value="'.$id.'">
    4. print $avaForma;
    Вот только остался вопрос где нужна Ваша помощь:
    как мне передать $_FILES['fupload']['size'],что бы сделать проверку вот тут - if ($foto_size > 5*1024*1000)
    подскажите пожалуйста...или просто как проверить вес картинки до загрузки на сервер на стороне клиента?