TechnoZona.net
Всичко за банята BaniZona.com

Начало » Компютри » Програмиране » Форма за обратна връзка на РНР


Форма за обратна връзка на РНР

   Сигурен съм че всички сме виждали лошо направени форми обратна връзка – когато объркаш нещо и си натиснал „потвърди” на нова страница виждаш грешка(разбира се без да се казва къде) и след връщането на предишната страница, за да поправиш незнайната грешка, се оказва че трябва да въведеш всичко наново, защото полетата не са запомнени! Това е едно от нещата, различаващи добре направеният уебсайт от аматьорската изработка. Тук ще ви предложа идея за реализирането на такава форма за обратна връзка с помощта на езика РНР бързо и гъвкаво.

Както във всеки друг език за програмиране, така и в РНР функциите са нещо много важно. Съветвам ви да ползвате функции – добре написаните такива са лесни за повторна употреба и реализацията става „чисто”. Няма да се спирам върху отделните оператори, тъй като тук предполагам че сте запознати със синтаксиса на този език.

Част І - инициализация

Тук поставяте обработката(ако има такава) на параметрите предавани с GET метод. Ползвайте mysql_escape_string() или real_mysql_escape_string() за да се предпазите от атаки. Преди всичко ако имате бутон „Върни се в началото” или „Отказ”, сложете първо неговата проверка.

if (isset($_POST[‘cancel’]))

{
    header("location: index.php");
   die();

}

Също така нека въведем два масива postFields и classFields. В първия описваме полетата и вида грешка, която трябва да се провери, а във втория ще запишем грешката, която трябва да се изведе.

$postFields = array(
    array (
       'field_name' => 'autor',
       'validator'=> 'is_Empty' ,
       'err_type' => 'AUTOR'
    ),
    array (
       'field_name' => 'text',
       'validator' => 'is_Empty' ,
       'err_type' => 'TEXT'
    ),
    array (
       'field_name' => 'title',
       'validator' => 'is_Empty' ,
       'err_type' => 'TITLE'
    ),
    array (
       'field_name' => 'mail',
       'validator' => 'is_Email',
       'err_type' => 'EMAIL'
    )
);
$classFields = array();

Част ІІ - визуализация

Първата функция която правим е output_form. Целта и е да визуализира всичко, което е нужно да се види от потребителя. Тя ще изведе и това, което е записано в масива classFields, ако има нещо там.

function output_form()
{
   global $classFields;
   ?>
   <FORM method="post">
   <strong> За запитвания и коментари:</strong><br><br>
   <strong>Относно*&nbsp;</strong> :
   <INPUT type="text" name="title" size="63" value="<?=(isset($_POST['title']))?$_POST['title']:'' ?>">

    /* =============Тук e проверкатата на полето================= */
   <? if (isset($classFields['title'])) echo "<br>".$classFields['title']; ?   >
    /* =============Край на проверката======================== */

   <br><br>
   <strong>Телефон </strong> : &nbsp;
   <INPUT type="text" name="tel" size="63" value="<?=(isset($_POST['tel']))?$_POST['tel']:'' ?>">
   <br><br>
   <strong>Автор*</strong> : &nbsp; &nbsp;
   <INPUT type="text" name="autor" size="24" value="<?=(isset($_POST['autor']))?$_POST['autor']:'' ?>">
   <strong>e-mail*</strong> :
   <INPUT type="text" name="mail" size="25" value="<?=(isset($_POST['mail']))?$_POST['mail']:'' ?>">
   <br>

    /* =============Тук e проверкатата на полето================= */
   <? if (isset($classFields['autor'])) echo "<br>".$classFields['autor'];
   if (isset($classFields['mail'])) echo "<br>".$classFields['mail']; ?>
    /* =============Край на проверката======================== */

   <br><br>
   <strong>Текст*</strong> :<br>
   <TEXTAREA name="text" cols="57" rows="10"><?=(isset($_POST['text']))?$_POST['text']:'' ?></TEXTAREA><br>

    /* =============Тук e проверкатата на полето================= */
   <? if (isset($classFields['text'])) echo "<br>".$classFields['text']; ?   >
    /* =============Край на проверката======================== */

   <br>
   <INPUT TYPE="submit" NAME="submit" VALUE="Публикувай">
   <br> Забележка : Със * са означени полетата, задължителни за попълване при изпращане на запитването.
   </FORM>
<?php
}

Пояснения: При извеждането, ако параметърът check не е зададен, т.е. е лъжа, нито една от проверките няма да се изпълни. Може да въведете допълнителни проверки в зависимост от естеството на формата за обратна връзка. Функцията err() ще дефинирам м следващата част.

Част ІІІ - проверки

Ще дефинирам 4 функции. Първата е is_correct () – тя ще служи за проверка за валидността на формата и ще връща лъжа ако нещо не е попълнено правилно. Също така тя обхожда масива postFields, като определя кое поле е сгрешено и ако има такова записва грешката, която трябва да се изведе в масива classFields.

Функцията err() връща при зададен тип грешка точния и HTML формат. Ползата от тази функция не е само намаляването на обема на програмния код, но също така тя може да направи проверката независима от избрания език. Ако текущият език се предава с GET метод, ползвайки променлива $lang, то може err(‘TEXT’) да извежда грешка на различен език в зависимост от $lang. Конкретната модификация оставям на читателя. Функциите is_Empty и is_Email проверяват съответно дали предаденият им стринг е празен или е коректен електронен адрес.

function is_Empty($str)
{
   if (empty($str))
      return true;
   return false;
}

function is_Email($str)
{
   if (@eregi('^[a-zA-Z0-9_-.]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$', $str) || empty($str))
      return true;
   return false;
}

function err($err)
{
if (isset($err))

   switch ($err){

      case 'TITLE' : return '<font color="red">Не е въведено заглавие</font>';

      break;

      case 'TEXT' : return '<font color="red">Не е въведен текст</font>';

      break;

      case 'EMAIL' : return '<font color="red">Не е въведен коректен e-mail</font>';

      break;

      case 'AUTOR' : return '<font color="red">Не е попълнен автор</font>';

      break;
   }

}


function is_correct()
{
   global $postFields, $classFields;
   $flag = true;
   foreach($postFields as $postField)
      if(isset($postField['validator']))
         if (call_user_func($postField['validator'], $_POST[$postField['field_name']]))
            {
            $classFields[$postField['field_name']] = err($postField['err_type']);
            $flag = false;
            }
   return $flag;
}

 

Част ІV - същинска част

Сега е време да се запознаем с основния алгоритъм. Важно е при първо стартиране на скрипта проверката да не се осъществи. След натискане на бутона всички попълнени полета да си останат такива и за некоректно попълнените да се визуализира грешка под тях. Много лоша практика е ако нещо е сгрешено да показвате на нова страница че е имало грешка, както и възможност за връщане. Дори да са запомнени полетата тази излишна страница дразни потребителя, като той трябва да запомни точно какво е сгрешил, връщайки се назад. За да нещата да се направят професионално е нужно единствено да се съобрази, че проверка е нужна само при натискате на бутона и в никой друг случай. Ето кода:

if (!isset($_POST['submit']))
    output_form ();
else if (!is_correct())
    output_form ();
else
    {

    /* Тук идва кода, който се изпълнява при вярно попълнени полета */

   }

 

Пояснения: Ако не е натиснат бутон формата се показва за първи път и се стартира функцията output_form(), но тъй като функцията is_correct не е била стартирана няма да се изведат грешки. Ако е натиснат бутона "Публикувай" се проверява дали всичко е попълнено вярно и ако не е, се визуализира всичко отново, но вече с показване на грешките. Ако всичко е вярно попълнено, то е време да напишете какво всъщност ще изпълнява формата на мястото на коментара.

За да използвате повторно кода е нужно да промените 2 неща. Първо да зададете масива postField с новите полета и второ да промените кода в output_form() там където е нужно. Спокойно този метод може да се използва за големи и дълги форми за обратна връзка или за анкети.

 

върни се в началото   изпрати на приятел   версия за печат сподели във FACEBOOK  

КОМЕНТАРИ


Заглавие : обратна поща

Автор : Ванеса

email :

Имаме сайт,който не работи ,както трябва,разбира се "създателите" се покриха,но не в това е проблема,Моля помогнете поне пощата да си оправя за обратна връзка,От 3 дни влизам в сайт,пиша нещо за тест и нищо не получавам на фирмения имейл.
поздрави:Ванесса


Заглавие : връзка

Автор : Венелин

email :

Оставете някакви координати и най-вероятно проблема може да се реши


Заглавие : форма

Автор : Станков

email : tempo_s@abv.bg

трябва ми една по-специална форма за обратна връзка, ТУКНякой може ли да помогне

ПУБЛИКУВАНЕ НА МНЕНИЕ

ФОРМАТИРАНЕ:

Забележка: Няма да бъдат допускани нецензурни изказвания!

За нас | Публикувай статия | Рекламна програма | Контакти | Авторски права | Полезни връзки | Новини | Добави в любими

Copyright 2005-2008 Уеб дизайн rVertis. All rights reserved.

Tyxo.bg counter