Query lijkt niet te werken?
Ik zit met iets heel simpels, maar ik zie toch het probleem niet.
Ik heb het volgende geschreven om te kijken of de ingevulde email al in de database staat:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$sql = "
SELECT " . self::record_id . " FROM " .
self::table_email . " WHERE " .
self::record_email . "='" . $email . "'";
echo $sql;
$res = mysql_query($sql);
if (mysql_num_rows($res)>0)
{
return true;
}
return false;
SELECT " . self::record_id . " FROM " .
self::table_email . " WHERE " .
self::record_email . "='" . $email . "'";
echo $sql;
$res = mysql_query($sql);
if (mysql_num_rows($res)>0)
{
return true;
}
return false;
De SQL query die er uit komt:
Toch geeft mijn functie toch altijd terug dat de email niet bestaat. Ik weet zeker dat de email in de tabel staat, want het gebeurd ook als ik de pagina refresh waarna alle post-data opnieuw verzonden wordt.
Hoe kan dit? mysql_num_rows geeft niet aan dat de resource fout is, want dat is het niet. Ik weet zeker dat de tabel en de velden bestaan.
Misschien ben ik op het moment gewoon te moe om de fout te kunnen zien, wie weet vinden jullie iets?
- Tim
Wat ik in ieder geval mis: foutafhandeling. Nergens controleer je in je script of de query gelukt is. En wat als je de query direct op je database (via phpadmin) er op los laat?
Kan dat een probleem veroorzaken? Het werkt wel als ik direct in PHPMyAdmin de records in voer namelijk.
Dit is de bedoeling niet.
Bij het INSERT'en (en UPDATE) van een record, moet je de gegevens door mysql_real_escape_string passeren. Dit doe je om de database te beschermen. MySQL-injection en zo.
htmlentities gebruik je enkel op het laatste moment, bij het SELECT'en; vooraleer je het (tussen je HTML) echo't. Dit dient om de gebruiker te beschermen tegen HTML.
Stel nu dat iemand als titel </div></div> invult; dan zou de layout van de site volledig naar de knoppen zijn. htmlentities zorgt er voor dat die karakters worden omgezet in HTML-inactieve karakters
htmlentities niet gebruiken vooraleer je iets INSERT of UPDATE. Ook htmlentities niet gebruiken als je strings wil comparen
Gewijzigd op 20/04/2012 10:11:07 door Kris Peeters
Oh, ik wist wel wat de functies deden (anders schrijf ik t niet) maar niet dat je htmlentities niet bij het inserten moest doen, heel logisch eigenlijk.
Trouwens, je riskeert dan vlug dat data 2 keer door htmlentities passeert. Dan loopt sowieso van alles fout.
bv. & wordt & . Passeer het twee keer door htmlentities en je krijgt &&amp;
Bedankt, het is opgelost, ik opende een record en zag dat er een spatie aan het begin van de email werd toegevoegd.