Jeg bruker PHP 5.2.6
og Mysql 5.0.51b
(Apache på Windows Vista)
Her er påloggingsskriptet:
if(isset($_POST['login'])){
// Koble til og velg database
include ('oppkobling.inc');
// utfør spørring og behandle data
$sql = "SELECT * FROM brukere";
$sql .= "WHERE brukernavn ='" . $_POST['brukernavn'] . "' ";
$sql .= "AND passord='" . $_POST['passord'] . "' ";
$resultat = mysql_query($sql, $dblink);
if(mysql_num_rows($resultat) != 0){
echo "OK!";
} else {
echo "FEIL";
}
}
Men dette genererer følgende feilmelding:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL
result resource in D:\xampp\htdocs\index.php on line 42
FEIL
Hva er feil i koden min?
Takk for all hjelp.
Mvh Karl
> Hei.
> Jeg har et innloggingsskjema for å logge inn på et "sperra" området.
[..]
> Men dette genererer følgende feilmelding:
>
> Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
> resource in D:\xampp\htdocs\index.php on line 42 FEIL
>
> Hva er feil i koden min?
Du har åpnet for SQL injection og bør snarest lese PHP-maualen om
mysql_real_escape_string. Seriøst; dette skal du absolutt IKKE TA LETT
PÅ...!
Videre kan det være lurt å sjekke spørringer f.eks. med eksemplene fra
manualens avsnitt om mysql_query... (Selv om jeg tipper feilen er et
manglende mellomrom mellom «SELECT * FROM brukere"» og «"WHERE»)
"
// Check result
// This shows the actual query sent to MySQL, and the error. Useful for
debugging.
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
"
--
Regards/mvh Joachim Mæland
If everything seems under control, you're just not going fast enough.
-Mario Andretti
$sql = "SELECT * FROM brukere";
$sql .= " WHERE brukernavn ='" .
mysql_escape_string($_POST["brukernavn"]) . "' ";
$sql .= " AND passord='" . mysql_escape_string($_POST["passord"]) .
"' ";
$resultat = mysql_query($sql, $dblink);
mvh Karl
> Er dette nok for å unngå SQL injection?
[..]
> $sql .= " AND passord='" . mysql_escape_string($_POST
> ["passord"]) .
Ja, men som du bør ha fått med deg:
"ChangeLog
Version Description
4.3.0 This function became deprecated, do not use this function.
Instead, use mysql_real_escape_string()."
Videre:
"mysql_escape_string() does not take a connection argument and does not
respect the current charset setting."
Det siste er ikke nødvendigvis med på å gjøre æøå-problematikk enklere.
Forøvrig ville jeg forsøkt å styre unna direkte bruk av GET/POST-
variabler sammen med MySQL, (ellers også, når jeg tenker meg om), og så
langt som praktisk mulig også sjekke innholdet i variablene, før de blir
forsøkt gjort sikrere ved escaping. Det ER mange slemminger der ute...