За последние 24 часа нас посетили 54080 программистов и 1765 роботов. Сейчас ищут 1650 программистов ...

Калькулятор

Тема в разделе "PHP для новичков", создана пользователем romantik2011, 14 окт 2011.

  1. romantik2011

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

    С нами с:
    23 июл 2011
    Сообщения:
    26
    Симпатии:
    0
    Хочу проверить каждое поле на пустоту, вот так пробую что-то не срабатывает.

    PHP:
    1.  
    2. <?php
    3.  
    4. if(empty($_POST['chislo1']))
    5. echo 'Пожалуйста, введите Число №1 <br />';
    6.  
    7. if(empty($_POST['chislo2']))
    8. echo 'Пожалуйста, введите Число №2 <br />';
    9.  
    10. if(empty($_POST['znak']))
    11. echo 'Введите знак во второе поле <br />';
    12.  
    13.  
    14. if(isset($_POST['chislo1']) && isset($_POST['chislo2'])
    15. && is_numeric($_POST['chislo1']) && is_numeric($_POST['chislo2'])
    16. && !empty($_POST['znak']) )
    17. {
    18. $ch1 = $_POST['chislo1']*1;
    19. $ch2 = $_POST['chislo2']*1;
    20. $znak = $_POST['znak'];
    21.  
    22.  
    23. switch($znak){
    24. case '+': $rez = $ch1 + $ch2; break;
    25. case '-': $rez = $ch1 - $ch2; break;
    26. case '*': $rez = $ch1 * $ch2; break;
    27. case '/': if($ch2!=0){ $rez = $ch1 / $ch2; }else { echo 'Деление на ноль'; } break;
    28. default: echo "Неизвестный оператор $znak";
    29. }
    30.  
    31. if(isset($rez))
    32. echo $rez;
    33. echo '<hr width="100%" color="blue" />';
    34. }
    35.  
    36. ?>
    37.  
    38.  
    39. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    40. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    41. <head><title>Моя страница</title>
    42. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    43.     </head>
    44. <body>
    45. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    46. <input type="text" name="chislo1"/><br />
    47. <input type="text" name="znak"/><br />
    48. <input type="text" name="chislo2"/><br />
    49. <input type="submit" value="Вычислить" >
    50. </form>
    51. </body>
    52.  
    53. </html>
    54.  
    Получается даже не дает ввести, сразу выдает что пустое. Как сделать проверку на пустоту поля если ничего не введено и нажата кнопка вычислить? Я вот сделал и не дает даже ввести что-то, сразу выдает что не пусто.
     
  2. Rockman

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

    С нами с:
    18 ноя 2010
    Сообщения:
    53
    Симпатии:
    0
    Адрес:
    Россия
    romantik2011, ваш код должен выполняться только тогда, когда была нажата кнопка Submit

    То есть нужно это прежде всего проверить:

    Код (Text):
    1. if(isset($_POST['submit']) {
    2.  // тут уже проверка на пустоту и все остальное
    3. }
     
  3. romantik2011

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

    С нами с:
    23 июл 2011
    Сообщения:
    26
    Симпатии:
    0
    Вот так лучше работает.
    Код (Text):
    1.  
    2. <?
    3. if(!empty($_POST)){
    4.     if(empty($_POST['chislo1']))
    5.     echo 'Пожалуйста, введите Число №1 <br />';
    6.     if(empty($_POST['chislo2']))
    7.     echo 'Пожалуйста, введите Число №2 <br />';
    8.     if(empty($_POST['znak']))
    9.     echo 'Введите знак во второе поле <br />';
    10.     if(isset($_POST['chislo1']) && isset($_POST['chislo2'])
    11.     && is_numeric($_POST['chislo1']) && is_numeric($_POST['chislo2'])
    12.     && !empty($_POST['znak']) )
    13.     {
    14.     $ch1 = $_POST['chislo1']*1;
    15.     $ch2 = $_POST['chislo2']*1;
    16.     $znak = $_POST['znak'];
    17.     switch($znak){
    18.     case '+': $rez = $ch1 + $ch2; break;
    19.     case '-': $rez = $ch1 - $ch2; break;
    20.     case '*': $rez = $ch1 * $ch2; break;
    21.     case '/': if($ch2!=0){ $rez = $ch1 / $ch2; }else { echo 'Деление на ноль'; } break;
    22.     default: echo "Неизвестный оператор $znak";
    23.     }
    24.     if(isset($rez))
    25.     echo $rez;
    26.     echo '<hr width="100%" color="blue" />';
    27.     }
    28. }
    29. ?>
    30. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    31. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    32. <head><title>Моя страница</title>
    33. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    34.     </head>
    35. <body>
    36. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    37. <input type="text" name="chislo1"/><br />
    38. <input type="text" name="znak"/><br />
    39. <input type="text" name="chislo2"/><br />
    40. <input type="submit" value="Вычислить" >
    41. </form>
    42. </body>
    43. </html>
    Подскажите,а как регулярными выражениями сделать?
     
  4. AlleeX

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

    С нами с:
    17 июл 2009
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    РБ
    Я перешел на проверку таких вещей яваскриптом, что бы лишний раз сервак не напрягать)
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    AlleeX
    т.е. с сервера бремя проверки ты успешно снял?
     
  6. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    яваскрипт проверка легко отключается :)
     
  7. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    AlleeX, спасибо, настроение поднял :)
     
  8. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    YSandro
    Он всё правильно говорит. Для приложений, в которых используется частая отправка форм, выгодно делать клиентскую валидацию данных для минимизации обращений на сервер.

    А вот, что делать проверку надо и на клиенте, и на сервере - это 100%, яваскрипт легко обходится.
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    клиентскую валидацию надо делать ВСЕГДА. как и серверную.

    это хороший тон. я даже сказал маст хев. 2012 год на подходе. хтмл5, а мы еще думаем где делать валидацию...
     
  10. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    я надеюсь ты говоришь что её нужно делать там где нужно ? =)
    меня лично раздражает логинилка аля укоз - первое что пришло в голову из бредового :)
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Брат, если валидация не нужна, то уж она не нужна =) это факт.
    Но тогда уж она не нужна нигде.