Autor Zpráva
Joan
Profil
Zdravím,
mám už relativně funkční webový formulář, ovšem narazila jsem v něm na ne zrovna chybu, jako spíš nepříjemnost. Mám tento kód:
$chyba ="";
  if ($_POST["email"]=="")
  $chyba .= "Zadejte prosím svůj email.<br />";
    if(isset($_POST["email"]))
{
if (!preg_match("/^[^@]+@[^@]+[.][a-zA-Z]+$/", $_POST["email"]))
  $chyba .= "Copak takto vypadá emailová adresa?<br />"
  }


Jde o to, že když člověk úplně zapomene vyplnit svůj email, tak se zobrazí obě chybové hlášky zároveň a vypadá to hloupě, když po odeslání prázdné položky vyskočí současně "Zadejte prosím svůj email" a "Copak takto vypadá emailová adresa?"
Jak pomocí PHP a bez JS odfiltrovat druhou hlášku v případě, že email vůbec zadán nebyl?
Myslela jsem, že isset stačí, ale bohužel ne. Už je tam na mě těch IFů moc na to, abych tady udělala chybu.
Děkuji předem za radu!
mattyZEM
Profil
if(isset($_POST['email']) AND $_POST['email']!="" AND preg_match("/^[^@]+@[^@]+[.][a-zA-Z]+$/", $_POST["email"])){
// nějaké příkazy ...
}else {
  if(isset($_POST['email']) AND $_POST['email']=="")$chyba="Zadejte prosím svůj email.";
  if(isset($_POST['email']) AND $_POST['email']!="" AND !preg_match("/^[^@]+@[^@]+[.][a-zA-Z]+$/", $_POST["email"]))$chyba='Copak takto vypadá emailová adresa?';
}
Alphard
Profil
Joan:
Co třeba spojit to do jedné?
if(!isset($_POST["email"]) || !preg_match("/^[^@]+@[^@]+[.][a-zA-Z]+$/", $_POST["email"]))
{
  $chyba .= "Zadejte emailovou adresu ve správném tvaru.";
}
A pokud jde o negaci u preg_match(), byl bych opatrný. Tahle funkce nevrací logickou hodnotu, ale počet shod, tj. číslo. Radši bych použil tohle:
if(!isset($_POST["email"]) || preg_match("/^[^@]+@[^@]+[.][a-zA-Z]+$/", $_POST["email"]) == 0)

PS: A už to balím, mattyZEM je vždy i pár sekund rychlejší.
mattyZEM
Profil
Alphard:
A už to balím, mattyZEM je vždy i pár sekund rychlejší.
Léta praxe :-)

Nene, jen zrovna nemám co jiného na práci...

Mohl by jste mi pomoci zase zde :-)
Joan
Profil
Alphard:
Vida, to mě nenapadlo spojit obě chybové hlášky do jedné... Použila jsem to poslední řešení s kladným preg_match a funguje :-) . Díky moc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0