Autor Zpráva
juhano
Profil
Ahojte,
Pomocou JPW sa mi podarilo urobiť "funkcny" formular. Pomocou JPW sa mi podarilo "zdokonalit" formular aby polia Telefon a Email neboli prazdne inak formular neodošle.
Ale chcem to este zdokonalit a sice:
1. Kontrolovat pole Telefon ci obsahuje len numericke znaky
2. Kontrolovat pole E-mail ci obsahuje znaky @ a .

Ak nebudu splnene tieto podmienky meil neodosle.

Prehrabal som cele forum skusam metodou pokus - omyl.

PHP cast
<?

$emailadr = "***@***.sk";           //e-mailová adresa na ktoru sa posle formular


$predmet = "Cenova kalkulacia";          //predmet zprávy


$odkoho = $_POST['mail_odosielatela'];   //E-mail z ktoreho prisla zprava

$telefon = $_POST['telefon'];


$sprava = "Odkial: ".$_POST['odkial']."
";

$sprava .= "Kam: ".$_POST['kam']."
";

$sprava .= "Telefon: ".$_POST['telefon']."
";

$sprava .= "e-mail: ".$_POST['mail_odosielatela']."
";

$sprava .= "Predmet: ".$_POST['predmet']."
";

$sprava .= "Odkaz: ".$_POST['odkaz'];


if ($odkoho!="" and $telefon!="")      //Ošetrujem vyplnenosť poli, ak nie sú vyplnené neodošle mejl

{
echo "<p><strong>Nevyplnili ste pozadovane polia.</p>"; // od tejto časti je to len take laborovanie
}


elseif(isset($_POST['mail_odosielatela'] && ereg('.+@.+\..+', $_POST['mail_odosielatela']))

{
echo "<p><strong>Nevyplnili ste pozadovane polia.</p>";
}

else

{
Mail("$emailadr",$predmet,$sprava,"From:" .$odkoho);

echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>";
}

else

{
echo "<p><strong>Správu sa nepodarilo odoslať. Nevyplnili ste povinné údaje.</p>";
}

?>




Dakujem sa pomoc
nahlad ako to vypada je tu
Str4wberry
Profil
Řádek 39:
elseif(isset($_POST['mail_odosielatela']) && ereg('.+@.+\..+', $_POST['mail_odosielatela']))
Ověření čísla zajistíš funkcí is_numeric. (Ještě by předtím bylo vhodné odstranit případné mezery.)
fajzen
Profil
tie podmienky máš napísané úplne opačne :)

správne (jedno zo správnych) riešenie:

<?php
  if(empty($_POST['odkial']) || empty($_POST['kam']) || empty($_POST['telefon']) || empty($_POST['mail_odosielatela'])) {
    // predpokladám, že aj odkiaľ a kam sú povinné informácie, ak nie, stačí ich z podmienky odmazať
    echo "<p><strong>Nevyplnili ste pozadovane polia.</p>";
  } else if(!ereg('.+@.+\..+', $_POST['mail_odosielatela'])) {
    // e-mailová adresa nemá správny formát
  } else if(!preg_match('/^\d+$/', $_POST['mail_odosielatela'])) {
    // telefón sa neskladá len z číslic
  } else {
    $sprava = "Odkial: ".$_POST['odkial']."\r\nKam: ".$_POST['kam']."\r\nTelefon: ".$_POST['telefon']."\r\ne-mail: ".$_POST['mail_odosielatela']."\r\nPredmet: ".@$_POST['predmet']."\r\nOdkaz: ".$_POST['odkaz'];
    $emailadr = "***@***.sk";           //e-mailová adresa na ktoru sa posle formular
    $predmet = "Cenova kalkulacia";          //predmet zprávy

    if(mail($emailadr, $predmet, $sprava, "From:" .$odkoho) {
      echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>";
    } else {
      // nepodarilo sa odoslať e-mail kvôli nejakým interným problémom
    }
  }
?>
juhano
Profil
@Fajzen,
dik skopiroval a nahradil som tvojim riesenim ale hadze mi to internal server error

vdaka za pomoc
juhano
Profil

<?

 if(empty($_POST['telefon']) || empty($_POST['mail_odosielatela']))

{
    // predpokladám, že aj odkiaľ a kam sú povinné informácie, ak nie, stačí ich z podmienky odmazať
    echo "<p><strong>Nevyplnili ste pozadovane polia.</p>";
  }

else if(!ereg('.+@.+\..+', $_POST['mail_odosielatela']))

{
    // e-mailová adresa nemá správny formát
echo "<p><strong>Bol zadaný nesprávny E-Mail.</p>"; 
 }

else if(!preg_match('/^\d+$/', $_POST['telefon'])) //tu bola chybicka miesto Telefon bolo mail odosielatela
{
    // telefón sa neskladá len z číslic
echo "<p><strong>Telefon musi obsahovat ciselne pole.</p>";
  }


else

{
Mail("$emailadr",$predmet,$sprava,"From:" .$odkoho);

echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>";
}



?>



V tejto podobe sa zda ze to funguje
Vdaka za pomoc.

Este ma otazku aoky je rozdiel v podmienkach kodu
Mojho
{
Mail("$emailadr",$predmet,$sprava,"From:" .$odkoho);

echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>";
}


A navrhovaneho Fajzenom
if(mail($emailadr, $predmet, $sprava, "From:" .$odkoho) {
      echo "<p><strong>Váš e-mail bol úspešne odeslaný.</p>";
    }
Alphard
Profil
juhano:
Este ma otazku aoky je rozdiel v podmienkach kodu
Ve druhém případě se zpráva vypíše pouze když se email podaří odeslat (fce mail() musí vrátit true), vaše verze tu hlášku vypíše vždy.
juhano
Profil
@Alphard som evidentne mimo misu z PHP ale:

Pises ze moju hlasku vypise vzdy. AKo vzdy? vypise ju len ked bude vyplneny telefon a email. Inak napise chybovu hlasku.
resp. co znamena ked sa podari spravu odoslat? Ved ak je splnena podmienka vyplnenia telefon a mejl sprava sa odosle.

Chcem tomu trosku pochopit no :-) ak tam uz nieco mam preco to tam mam.
fajzen
Profil
juhano
e-mail sa nemusí podariť odoslať ak nastane chyba SMTP servera (preťažený, odpojený, nenastavený atď), vtedy funkcia mail vráti false
AM
Profil *
mimochodem, funkce ereg() (a všechny ereg začínající) jsou zavržené a do PHP6 se s nimi nepočítá (protože bývají problémové), používej výhradně preg_* (tedy zde preg_match místo ereg). Hlavně je hrozné míchat v jednom skriptu obojí.
juhano
Profil
Pani dakujem za vysvetlenie.
ereg nahradim preg-om. AKurat teda mi to hadze daku chybu:

Warning: preg_match() [function.preg-match]: Unknown modifier '+' in /domains1/do1176800/public/www_root/formular.php on line 92
AM_
Profil
výrazy pro preg_ funkce se musejí dávat mezi delimitery - zapisují se ve tvaru delimiter-výraz-delimiter-modifikátory, takže např. ten
'.+@.+\..+'
nahradíš
'/.+@.+\..+/'
přičemž lomítko slouží jako delimiter
juhano
Profil
Dakujem za pomoc ide to tak ako som si predstavoval.
juhano
Profil
Este predsa len jedn otazocka na fajzen-a:
ako si myslel ze telofon sa nesklada len z cislic?

else if(!preg_match('/^\d+$/', $_POST['mail_odosielatela'])) {
    // telefón sa neskladá len z číslic
  
fajzen
Profil
juhano
pomýlil som sa, skopíroval som si zlú premennú, samozrejme tam má byť $_POST['telefon']

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: