Autor Zpráva
fili
Profil
Zdravim,

v DB mi stale pribudaju prazdne riadky.
Mam nasledujuci kod, kde mam chybu.

 <?
error_reporting(E_ALL);


$email = $_POST['email'];

$email=MySQL_Real_Escape_String($email);


$sql = "INSERT INTO news(email) VALUES('$email')";
$query=MySQL_Query($sql);

if($sql){
echo "<center>Boli ste úspešne prihlásený.</center><br>";
} else {
echo "E-mail sa nepodarilo vložiť!<br><br>";
echo "MySQL chyba:<span style='color:red'>".MySQL_Error()."</span><br>";
echo "SQL dotaz:<b>".htmlSpecialChars($sql)."</b><br>";
}

mysql_close();
?>
Joker
Profil
fili:
No, podle mé oblíbené metriky (WTF na řádek) ten kód nevychází moc dobře.

Když to vezmu postupně:
- Dát error_reporting E_ALL budiž, ale na ostrém webu doufám (marně), že do logu! K čemu jsou návštěvníkovi webu chybové hlášky?
- Nejenže se hodnota $_POST['email'] nijak nekontroluje, ani se neověřuje, jestli vůbec nějaká existuje. Když tomu skriptu nepošlu žádná data, vesele si uloží do databáze prázdný záznam a vygeneruje notice (…o které se předpokládám nikdo nedozví, protože chybové hlášky se generují návštěvníkovi do stránky).
- MySQL rozšíření je už zastaralé a nemělo by se v nových skriptech používat.
- $sql je SQL dotaz, takže if ($sql) bude vždycky splněno, skript napíše „Boli ste úspešne prihlásený.“ i v případě, že by při provádění dotazu nastala chyba.
- Vzhledem k předchozímu bodu část else nikdy nemůže nastat.
- I kdyby už by tam bylo if ($query), to se v případě chyby návštěvníkovi stránky vypíše SQL dotaz a jaká v něm nastala chyba?
fili
Profil
Joker:
Mam tam este takuto kontrolu pri odosielani formulara
a ked to skusam, tak mi nedovoli odoslat prazdny formular.

<SCRIPT LANGUAGE="JavaScript">
<!--
function kontrola(adresa, suhlas)
{
  if (adresa.indexOf("@")<1)
  {
    alert("Zadali ste nesprávnu e-mailovú adresu!");
    pokracuj=false;
  }
  else if (suhlas==false)
  {
    alert("Musíte potvrdiť súhlas!");
    pokracuj=false;
  }
  else pokracuj=true;
}
// -->
</SCRIPT>
pcmanik
Profil
fili:
A užívatelia s vypnutým javascriptom? Tý vašu ochranu jednoducho preskočia.
fili
Profil
pcmanik:
Fakt, na toto som nepomyslel. Vdaka za upozornenie.
Ako by to teda malo byt spravne, aby to fungovalo ako ma?
juriad
Profil
fili:
Vždy ošetřuj všechno na serveru (nikdy nevěř ničemu, co ti pošle uživatel/útočník).
„Ochrana“ v Javascriptu je jen usnadnění pro uživatele, které mu napoví, že formulář není správně vyplněný.
fili
Profil
juriad:
Ano, to som uz pochopil, ale ako ma vyzerat taky kod
v PHP?

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: