Autor Zpráva
gogoda
Profil
Ahoj,
mám zde tento kód a chtěl bych do něj přidat klasické podmínky, pokud nebude vyplněno pole mail a text, aby se email neodeslal. Díky

<?php 

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$formcontent="Kontaktní formulář\n\nOd: $name \nZpráva: $message";
$recipient = "mail@mail.com";
$subject = "Zpráva z Vaší stránky";
$mailheader = "From: $email \r\n";

mail($recipient, $subject, $formcontent, $mailheader) or die("Nejde");
echo "Děkuji!";

?>
lionel messi
Profil
gogoda:
<?php
if (!isset($_POST['name'], $_POST['email'], $_POST['message'])) {
     echo "Vyplňte všetky polia.";
}

else {
     $name = $_POST['name'];
     $email = $_POST['email'];
     $message = $_POST['message'];
     $formcontent="Kontaktní formulář\n\nOd: $name \nZpráva:  $message";
     $recipient = "mail@mail.com";
     $subject = "Zpráva z Vaší stránky";
     $mailheader = "From: $email \r\n";
 
     if (mail($recipient, $subject, $formcontent, $mailheader)) {
          echo "Děkuji! Váš e-mail byl odeslán.";
     }
     
     else {
          echo "Váš e-mail nebyl odeslán.";
     }
}

Čo máte na mysli poľom test? Nikde takto pomenované pole nevidím.

Mimochodom, konštrukcia or die() patrí len na testovací server, na produkčnom je nevhodná, rovno som ju prepísal do o chlp lepšej podoby.

Riadky 3-5 v pôvodnej verzii generovali Notice v prípade, že príslušné polia neboli vyplnené.
gogoda
Profil
lionel messi:
omlouvám se, myslel jsem "text". Opraveno.

Jinak děkuji za všechny opravy, jen mi to nějak pořád nefunguje, respektive odesílá mail ikdyž nevyplním nic.

Ještě máš asi chybu v: $_POST['mesage'], to jsem taky opravil, takže tím to nebude.
Bertram
Profil
gogoda:
jen mi to nějak pořád nefunguje, respektive odesílá mail ikdyž nevyplním nic.

Samotná funkce isset(), není dostačující.

<?php
if(isset($_POST['odeslat'])){

    if(empty(htmlspecialchars(trim($_POST['text'])))){
            $chybneVstupy['text'] = 'Pole Text je povinné.';
      }
    
    if(empty(htmlspecialchars(trim($_POST['email'])))){
            $chybneVstupy['email'] = 'Pole Email je povinné.';
      }
   // a tak dál, nebo lépe 
}
lionel messi
Profil
Bertram:
Samotná funkce isset(), není dostačující.
To je možné, ale ak bude v $_POST['text'] 0, tiež vyhodí chybu, čo môže byť nežiaduce.
juriad
Profil
Bertram:
Co má htmlspecialchars společného s kontrolou vyplnění pole? A co když bude chtít odeslat jediný znak "0"? To funkce empty považuje "0" za nevyplněno. trim je skutečně ve většině případů vhodný.
A co když je $_POST['text'] pole? To se snadno může stát.

Když chceš ošetřovat vstupní hodnoty, musíš to udělat pořádně.
anonymníí
Profil *
lionel messi:
Tvá podmínka s isset je nesmyslná. Všechna pole jsou isset po odeslání formuláře, jen některá jsou vyplněná, čili !empty.

Správná kontrola záleží na tom, jaké hodnoty jsou validní, což nevíme. Zpráva (ve smyslu "více informací k objednávce") s hodnotou 0 je pravděpodobně nevalidní a projít by neměla. Jen tak na okraj.


Pokud má být pole neprázdné, použij trim a porovnání s prázdným řetězcem.


Pokud v něm nemá být ani nula, použij !empty.
Pokud má být číselný, kontroluj, jestli je číselný (a ne jen vyplněný).
Bertram
Profil
juriad:
Co má htmlspecialchars společného s kontrolou vyplnění pole?
Samozřejmě, že to tam nemá co dělat, je to modifikace podobného kódu , kde jsem měl i kontrolní výpis a špatně jsem to promazal.

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