Autor | Zpráva | ||
---|---|---|---|
Adrián Prelovský Profil |
#1 · Zasláno: 18. 7. 2015, 14:00:48
Ahoj mám tento kód pro odesílání emailu:
<html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf8"> </head> <body> <?php $conn = mysql_connect("localhost","andre97","bffb@andre"); mysql_query("SET NAMES 'utf8'"); mysql_select_db('wppokus', $conn); if (!$conn) { die('Nemohu se pripojit k db: ' . mysql_error()); } mysql_select_db("cis_id", $conn); $sql="INSERT INTO `wp_generator` (`jmeno`, `email`, `sleva`) VALUES ('$_POST[jmeno]','$_POST[email]','$_POST[sleva]')"; if (!mysql_query($sql,$conn)) { die('Chyba: ' . mysql_error()); } echo '<b>'; echo 'Byl vám odeslán e-mail'. " $random_chars"; echo '</b>'; ?> <?php $prijemca = "email"; $jmeno = $_POST['jmeno']; $sleva = $_POST['sleva']; $predmet = "Suns nábytek - SLEVOVÝ KUPON 10%!!"; if ($jmeno && $sleva && $prijemca){ if (mail($prijemca, "$predmet $jmeno", "Dobrý den $jmeno, /n na základě vypnění slevového formuláře jsme Vám odeslali slevový kupon. /n Slevový kupón můžete uplatnit v naší prodejně. /n Kód Vašeho slevového kupónu je: $sleva" )) echo "<script>alert('DOPLNIT!')</script>"; } elseif (($jmeno && $sleva && $prijemca) == false){ echo "Váš <b>email nebyl odeslaný</b>."; } ?> </body> </html> Po odeslání formuláře se zapíše do DB, ale email se neodešle i přesto, že se mi vypíše, že email byl odeslán. Předem mnohokrát děkuji. |
||
lionel messi Profil |
Adrián Prelovský:
Kód trpí niekoľkými chybami: • Konštrukcia or die() patrí maximálne na • Rozšírenie MySQL je zastarané a v novej verzii PHP bude odstránené, lepšie je použiť MySQLi (prípadne PDO/dibi…). • Užívateľský vstup pri vkladaní do databázy vždy escapuj. V tomto stave je db nechránená pred SQL Injection. Skús zadať meno Sarah O'Connor. • Hlášku o úspešnom odoslaní mailu vypisuješ vždy bez ohľadu na to, či bola správa skutočne odoslaná. • Premenná $random_chars nie je (prinajmenšom v uvedenom úryvku) definovaná.
• Jednoduchá funkcia mail často nestačí. • Zmysel riadku 41 mi unikol. • Riadky 30-50 by som rozhodne prepísal: if (isset($_POST['jmeno'], $_POST['sleva'])) { $prijemca = "email"; //nezmyselný tvar e-mailu $jmeno = $_POST['jmeno']; $sleva = $_POST['sleva']; $predmet = "Suns nábytek - SLEVOVÝ KUPON 10%!!"; } if (isset($prijemca, $jmeno, $sleva, $predmet)){ $zprava = "Dobrý den $jmeno, /n na základě vypnění slevového formuláře jsme Vám odeslali slevový kupon. /n Slevový kupón můžete uplatnit v naší prodejně. /n Kód Vašeho slevového kupónu je: $sleva"; if (mail($prijemca, "$predmet $jmeno", $zprava)) { echo "<script>alert('DOPLNIT!')</script>"; echo "Váš e-mail by úspěšně odeslaný." } } else { echo "Váš <b>email nebyl odeslaný</b>."; } Zapracované pripomienky z [#3], ďakujem za dôležitú korekciu. |
||
Alphard Profil |
#3 · Zasláno: 18. 7. 2015, 14:35:05
lionel messi:
„• Konštrukcia or die() patrí maximálne na produkčný server, na ostrom serveri je jej použitie nevhodné.“
Doufám, že jde jen o překlep a myšlen je testovací/debug server. „Riadky 30-50 by som rozhodne prepísal:“ Ani takhle není optimální ošetření vstupních dat. Pokud příslušné položky v $_POST neexistují, bude se generovat Notice na řádcích 2 a 3, do proměnných se uloží NULL a na jejím základě vrátí isset false. Sice to funguje, ale přistoupili jsme k neexistující proměnné. isset by se mělo aplikovat přímo na vstupní pole, až pak si v případě potřeby tvořit kopie.
Blok po if nemáš v {} , takže se jako podmíněný bere jen řádek 13, tj. 14. se vypíše bez ohledu na úspěšnost funkce mail.
|
||
Časová prodleva: 10 let
|
0