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 |
#3 · Zasláno: 20. 7. 2015, 11:03:14
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 |
#4 · Zasláno: 20. 7. 2015, 13:42:39
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 |
#5 · Zasláno: 20. 7. 2015, 13:50:30
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 |
#6 · Zasláno: 20. 7. 2015, 13:54:09
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 * |
#7 · Zasláno: 20. 7. 2015, 13:54:14 · Upravil/a: anonymníí
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 |
#8 · Zasláno: 20. 7. 2015, 14:03:28
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. |
||
Časová prodleva: 10 let
|
0