@Jordi: Als ik jouw code zou beoordelen is dat een dikke onvoldoende. En dan heb ik het niet over de extra variabele $naam. Beide if()'s zijn niet correct en je script zal dan ook niet juist werken. En je formulier heeft onjuiste syntax (in dit geval verkeerde quotes).
Ik stop _POST vars voor een query ook altijd in een var. Simpelweg omdat het anders veel te onduidelijk wordt:
<?php
$sQuery = "SELECT name, pass FROM users WHERE name = '".mysql_real_escape_string((string) $_POST['naam'])."' AND id = ".(int) $_POST['id'];
// Dan vind ik dit beter
$name = mysql_real_escape_string((string) $_POST['naam']);
$id = (int) $_POST['id'];
$sQuery = "SELECT name, pass FROM useres WHERE name = '".$name."' AND id = ".$id;
Als ik nu in het formulier als id "hoi" opgeef, dan wordt dit omgezet naar het cijfer 1. Beter is om te controleren of $_POST['id'] een numerieke waarde bevat. Ja, doorgaan... nee, afbreken.
<?php
$sQuery = "SELECT name, pass
FROM users
WHERE name = '".mysql_real_escape_string((string) $_POST['naam'])."'
AND id = ".(int) $_POST['id'];
?>
[size=xsmall]Toevoeging op 11/10/2011 20:34:47:[/size]
Ozzie PHP op 11/10/2011 20:27:06
$id = (int) $_POST['id'];
Als ik nu in het formulier als id "hoi" opgeef, dan wordt dit omgezet naar het cijfer 1. Beter is om te controleren of $_POST['id'] een numerieke waarde bevat. Ja, doorgaan... nee, afbreken.
Volgens mij heb je die string cast niet nodig. mysql_real_escape_string interpreteert dat argument altijd als string.
Je kan ook sprintf gebruiken, %d zorgt er dan voor dat het een int is, en niets anders.
<?php
$sQuery = sprintf("SELECT name, pass FROM users WHERE name = '%s' AND id = %d",
mysql_real_escape_string($_POST['naam']), $_POST['id']);
?>
@Santhe ik heb het zelf niet getest en eigenlijk eventjes snel snel in elkaar gestoken. ik weet dat php het beste met ' kan en html het beste met " voor escapen te voorkomen.
Kan je ook vertellen wat ik niet goed doe bij de if's?
!$error kijkt of error false terug geeft, nu is 0 of '' natuurlijk wel gelijk aan false, het is toch niet zo. Een juiste methode is dit:
<?php
if( count($error) < 1 )
{
// geen fouten
}
?>
En if(!strlen($naam) <5 || !strlen($naam) > 20) betekent als $naam NIET kleiner is dan 5 of NIET groter dan 20. Dit geeft altijd een error behalve als $naam = ''.