Beste allemaal,

Voor een site heb ik een inlogscript gebruikt van Jan Koehoorn:
http://www.phphulp.nl/php/tutorials/10/415/

Alles geinstalleerd en hij werkt maar ik heb een probleem met de SHA1 functie in
authenticatie.php:

<?php
session_start ();

// de gegevens voor de DB connectie
require '../../db_config.php';

// terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
function to_login () {
sleep (3);
header ('Location: http://www.jouwsite.nl/login/';); // NIET VERGETEN AAN TE PASSEN!!!
}

function check_login ($username, $password) {
// query opstellen
// je tabel kan er heel simpel uitzien:
// id INT(11) auto_increment
// username VARCHAR 64
// password VARCHAR 64. Het password sla je op in je DB met een SHA1 hash
// daarom staat SHA1 dus ook in de query
$sql = "
SELECT id
FROM members
WHERE username = '" . mysql_real_escape_string ($username) . "'
AND password = SHA1('" . mysql_real_escape_string ($password) . "')
";
if ($res = mysql_query ($sql)) {
if (mysql_num_rows ($res) == 1) {
// de query is gelukt en we hebben 1 resultaat
$row = mysql_fetch_assoc ($res);
$_SESSION['id'] = $row['id'];
$_SESSION['logged_in'] = true;
}
else {
to_login ();
}
}
else {
to_login ();
}
}

// eerst maar eens kijken of $_SESSION['logged_in'] bestaat
if (!isset ($_SESSION['logged_in'])) {
// nog niet eerder ingelogd, maar misschien heeft iemand net het loginformulier ingevuld?
if (isset ($_POST['username'], $_POST['password'])) {
check_login ($_POST['username'], $_POST['password']);
}
else {
to_login ();
}
}
?>

Hij geeft de volgende melding:
Fatal error: Call to undefined function: mysql_real_escape_string() in /var/www/vhosts/phphulp.nl/httpdocs/admin1/authenticatie.php on line 23
en gaat terug naar login.php

Nu heb ik gecheckt of PHP en MySQL de functie mysql_real_escape_string en SHA1 ondersteunt, en dat lijkt het geval: mijn webserver (ik zit bij Webreus) draait op PHP5 en MySQL 5.

Hoe komt het dat hij die functie dan niet herkent? En welke andere mogelijkheden heb ik om dit script te laten werken.

In een vorige thread over dit onderwerp suggereerde iemand md5 te gebruiken. Is dat een optie en wat zijn dan de exacte aanpassingen die ik in het script moet doen?

Alvast bedankt!

SCO01

Het probleem heeft niks te maken met md5 of sha1, zie de foutmelding over mysql_real_escape_string.

Het probleem dat jij hebt, is dat je binnen jouw functie check_login() geen database connectie hebt en dus ook geen gebruik kunt maken van mysql_real_escape_string().

Verder vind ik het ook wat raar om een functie te schrijven die je slechts 1x nodig hebt, daar win je niks mee.
Hoi Frank,

De database connectie is er wel want ik kan verbinding leggen. Als ik SHA1 weghaal, dan werkt alles wel! Of zie ik dit fout?

Wat suggereer je dat ik nu doe?

Alvast bedankt!
De functie sha1 heeft niets met de fout te maken, dat zal dan ook niet de oplossing zijn. Daarnaast gebruik jij de sha1-functie van je database, daar heeft PHP al helemaal geen weet van, die ziet deze functie niet eens.
Hoi Frank,

Dank je wel voor je informatie. Ik heb al heel lang op dit script gezeten en ik kom er -ook nu- nog steeds niet uit. Ik ben geen kenner genoeg van dit soort functies om een alternatief te kunnen maken. Kan jij me misschien op weg helpen?
Ik denk dat je PHP versie erg oud is, ouder dan 4.3.0.

Maak anders gebruik van mysql_escape_string().

Een recentere PHP versie gebruiken is natuurlijk een betere oplossing.

edit:

Je hebt dus PHP5 dan zou de functie altijd moeten bestaan.
Vreemde error.
Bedankt voor alle hulp, ik ben er uit :) :).
Ik gebruikte een tabel met de niet-gehasde passworden. En dan lukt t inloggen dus niet. Nu wel!

Nogmaals bedankt voor alle hulp!
SCO

Reageren