| 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: 11 let
|
|||
0