За последние 24 часа нас посетили 16556 программистов и 1679 роботов. Сейчас ищут 827 программистов ...

Обработка form !

Тема в разделе "Прочие вопросы по PHP", создана пользователем lemonl, 19 фев 2012.

  1. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Код (Text):
    1.  
    2.            <?php
    3.  
    4.             function isEmail($email)
    5.             {
    6.                 return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i"
    7.                         ,$email));
    8.             }
    9.  
    10.          $errtype    = ''; //
    11.                  $error    = ''; // сообщение об ошибке
    12.                  $namen     = 'Name'; // имя отправителя
    13.                  $email    = 'Email address'; // email отправителя
    14.                  $subject  = 'Subject'; // тема
    15.                  $message  = ''; // сообщение
    16.                  $spamcheck = ''; // проверка на спам
    17.  
    18.             if(isset($_POST['send']))
    19.             {
    20.                  $namen     = $_POST['namen'];
    21.                  $email    = $_POST['email'];
    22.                  $subject  = $_POST['subject'];
    23.                  $message  = $_POST['message'];
    24.                  $spamcheck = $_POST['spamcheck'];
    25.  
    26.                 if(trim($namen) == "" || trim($namen) == "Name")
    27.                 {
    28.                     $error = '<div class="errormsg">Please, enter your Name</div>';
    29.             $errtype = 'namen';
    30.                 }
    31.                 if(trim($email) == "")
    32.                 {
    33.                     $error = '<div class="errormsg">Please, enter your email!</div>';
    34.             $errtype = 'email';
    35.                 }
    36.                if(!isEmail($email))
    37.                 {
    38.                     $error = '<div class="errormsg">Please, enter your email!</div>';
    39.             $errtype = 'email';
    40.                 }
    41.                     if(trim($subject) =="" || trim($subject) == "Subject")
    42.                 {
    43.                     $error = '<div class="errormsg">Please, enter Subject!</div>';
    44.             $errtype = 'subject';
    45.                 }
    46.                  if(trim($message) == "")
    47.                 {
    48.                     $error = '<div class="errormsg">Please, enter message!</div>';
    49.             $errtype = 'message';
    50.                 }
    51.  
    52.                 if($error == '')
    53.                 {
    54.                  
    55.  
    56.  
    57.             ?>
    58.  
    59.  
    60.  
    61.             <?php
    62.                 }
    63.             }
    64.  
    65.             if(!isset($_POST['send']) || $error != '')
    66.             {
    67.             ?>
    68.             <!--Error Message-->
    69.  
    70.          <form  method="post" name="contFrm" id="contFrm" action="">
    71.         <p>Please provide us with the following information. </p>
    72.         <br>
    73.              <div class="feedback">
    74.             <input <?php if ($errtype=='namen') echo "style='border: 1px solid #ee5f5b;'" ?>  name="namen" type="text" class="box" id="namen" value="<?=$namen;?>" onblur="if(this.value=='')this.value='Name';" onfocus="if(this.value=='Name')this.value=''"   /> <br><br>
    75.             <input <?php if ($errtype=='email') echo "style='border: 1px solid #ee5f5b;'" ?>  name="email" type="text" class="box" id="email" value="<?=$email;?>" onblur="if(this.value=='')this.value='Email address';" onfocus="if(this.value=='Email address')this.value=''"   /> <br><br>
    76.             <input <?php if ($errtype=='subject') echo "style='border: 1px solid #ee5f5b;'" ?> name="subject" type="text" class="box" id="subject" value="<?=$subject;?>" onblur="if(this.value=='')this.value='Subject';" onfocus="if(this.value=='Subject')this.value=''"   /> <br><br>
    77.             <textarea <?php if ($errtype=='message') echo "style='border: 1px solid #ee5f5b;'" ?>  name="message" id="message"><?=$message;?></textarea> <br><br>
    78.             <button class="butm butreset" type="submit">&nbsp;</button><button class="butm butsubmit" name="send" type="submit">&nbsp;</button>
    79.              </div>
    80.         </form>
    81.  
    82.             <?php
    83.             }
    84.             ?>
    Как видите при не заполненных полях или какой то ошибке, появляется соответствующее предупреждение (border: 1px solid #ee5f5b;) При обработке <form> action="" является пустым.

    Как можно сделать, чтобы <form> отправляла через action="../myother.php" когда нет ошибок ?
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    немного не так
    на отправку форму вешаете функцию
    функция проверяет поля
    если все правильно - выход из функции по return true; отправит форму обработчику
    если не правильно - пишем сообщение пользователю и выход из функции return false; не даст форме отправиться
     
  3. Your

    Your Старожил

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

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0

    Спасибо за ответ !
    Я также думал, но когда я повешу функцию на onSubmit="return TestDataCheck()", не будет работать обработка <form> php скриптом. Ведь у меня вся обработка на не заполненные поля идет через php $_POST


    Код (Text):
    1.  
    2. <SCRIPT TYPE="text/javascript">
    3.  
    4. function TestDataCheck()
    5. {
    6. var qtytested = document.contFrm.first_name.value;
    7. var qtypassed = document.contFrm.last_name.value;
    8. var returnval;
    9.  
    10. if ( (qtytested =="") && (qtypassed =="") )
    11.    returnval = true;
    12. else
    13.    {
    14.    returnval = false;
    15.    }
    16.  
    17. return returnval;
    18. }
    19.  
    20. </SCRIPT>
     
  5. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    именно так и реализуется мой пример - браузеру "возвращается" то, что возвращает функция проверки. и браузер в зависимости от true там или false отправляет или не отправляет форму. не забудьте про людей у которых JavaScript отключен - форма отправится и ее нужно будет проверить аналогичным способом на стороне сервера и показать снова, если возникли ошибки
     
  6. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    А как это сделать в PHP чтобы иметь возможность отправлять через <form> action="" (когда это нужно) и не отправлять (запрещать) ? Т.н. нужно чтобы работал post когда все поля будут заполнены.


    Думал так сделать
    Код (Text):
    1. <form  method="post" action="<?php  echo $ind;  ?>">
    но по клику работает только с 2 раза.
     
  7. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    пхп на стороне сервера работает, форма у клиента))))
    если под "когда это нужно" подразумевается "отключеный жс" - принимаете своим сценарием вписанным в экшн формы все данные, делаете разбор и решаете - хорошо форма заполнена или ее нужно еще раз показать пользователю.
    я как-то раз примерно такую же задачу решал - есть компов на предприятии, половина в целях безопасности не имеют возможность запускать жс, а вторая имеет. сделал аяксом запрос к сценарию с передачей данных форм. сервер выдавал ответ. если ответом был определенный текст - он парсился и в форме показывалось что не так. иначе - сервер уже завешил проверку и нужно только оповестить клиента куда пойти. это у кого все хорошо с жс. у кого плохо - по отправке форма отправлялась, проверялась тем же куском кода что и в случае с аяксом, но только если что-то не так - форма опять появлялась на экране, обработанная средствами пхп.
    примерно так.
     
  8. stopkran

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

    С нами с:
    10 июл 2011
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Иркутск
    Не надо это делать в PHP. Вообще. Это всегда надо делать на javascirpt. Предупредив пользователя, что если javascript отключён, данные сохранить нельзя. На обычных сайтах это нормально. Если у вас какой-то особый случай, не обычный сайт, см., что пишет Ganzal.
     
  9. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    У вас есть небольшой пример как это делать.
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Всегда делайте проверки на стороне сервера, javascript это так сказать, украшение.
     
  11. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    Как это сделать ! )

    Где то слышал что можно сделать через <input type=hidden name=beginmsg ...> !
     
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    нет. это либо отправка с перезагрузкой страницы (обычно) или в фоновом режиме (аякс). на счет безопасности то же подумайте. я могу отредактировать ваше описание формы о она будет всегда отправляться. на стороне сервера делается проверка?
    вообще возьмите себе за правило при работе - никогда не доверять пользовательским данным. ни от себя, ни уж тем более от других пользователей
     
  13. lemonl

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

    С нами с:
    10 июн 2009
    Сообщения:
    164
    Симпатии:
    0
    У меня это будет форма регистрации... После чего нужно передать некоторые данные из этой формы через post (action="http://othersite.com/myotherpage.php") на другой сайт.


    Пожалуйста помогите с реализацией как это все сделать.
     
  14. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  15. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    И видимо вы вообще не знаете, что такое пользовательские функции)

    Какой вообще прикол так себя напрягать и писать.
    Тяжко Вам.