Igor Kulman

Overovanie formulárových prvkov pomocou AJAXu za pár minút

· Igor Kulman

Prednedávnom bolo mojou úlohou vrámci tvorby jedného webu implementovať do registračného formulára asynchrónne overovanie emailovej adresy, a to overenie na platný tvar a hlavne overenie, či sa už daný email náhodou v databáze nenachádza.

Keďže písať AJAX requesty ručne je dosť zdĺhavé a pracné, rozhodol som sa využiť možnosti knižnice prototype. Vstupné pole, pre zadanie emailovej adresy malo klasický tvar

<div class="input"> 
  <label for="email">Email:</label> 
  <input type="text" name="email" id="email" maxlength="60" value="@" onchange="mail_check(); return false;"/> <span>Povinné</span> 
</div>

pridal som len volanie funkcie mail_check() pri zmene vstupného poľa, teda spomínané asynchrónne overovanie vstupu.

Samotná funkcia na overenie zadanej emailovej adresy je vďaka použitiu knižnice prototype úplne jednoduchá a prehľadná

function mail_check() 
{ 
  new Ajax.Request( "/weastra/sk/hostessing/check", { method: "post", parameters: { email: $("email").value }, onSuccess: function(transport) 
  { 
    if (transport.responseText == "exists") 
    { 
      form.setStatus($("email").parentNode, false, "E-mail už existuje"); 
    } else if (transport.responseText == "wrong") 
    { 
      form.setStatus($("email").parentNode, false, "Neplatný e-mail"); 
    } else if (transport.responseText == "ok") 
    { form.setStatus($("email").parentNode, true, "E-mail v poriadku"); 
    } 
  } 
});}

Poznámka: setStatus() je funkcia, ktorá zmení textu elementu span, ktorý prísluší k danému formulárovému prvku.

Funkcia po zavolaní pošle metódou POST zadaný email na obslužnú stránku, ktorá následne vráti odpoveď v tvare wrong, exists, alebo ok, teda neplatný, existujúci email, alebo email, ktorý je v poriadku a nenachádza sa ani v databáze.

Obslužná funkcia na strane servera je taktiež úplne jednoduchá, na overenie syntaxe adresy sa používate porovnanie s regulárnym výrazom

private function check_mail() 
{ 
  global $db, $r, $tpl; 
  $email = trim($_POST["email"]); 
  
  if (empty($email)||(!preg_match("/^[^@]+@[^@.]+\.[^@]*\w\w$/",$email))) 
  { 
    echo "wrong"; return; 
  } 
  
  $exists=$db->getCell("SELECT user_id FROM users WHERE login='$email'"); 
  
  if ($exists>0) echo "exists"; else echo "ok"; return; 
}

Použitie AJAXu pomocou knižnice prototype teda nie je nič zložité.