ik ben mijn pagina's aant omvormen naar mysqli
maar stoot toch op een paar problemen


<?php
include("admin/entrance/login.inc.php"); // hier zit de var $link 

    
    function to_login () {
        
      header ('Location: http://***/index.php?fout=1' );  // indien je fout user-pasw combi geeft hij error boodschap
    
	}

    function check_login ($username, $password) {
        $sql = "
            SELECT id
            FROM admin
            WHERE username = '" . mysqli_real_escape_string ($link,$username) . "'
            AND password = SHA1('" . mysqli_real_escape_string ($link,$password) . "')
            ";
        if ($res = mysqli_query($link,$sql)) {
            if (mysqli_num_rows ($link,$res) == 1) {
                // de query is gelukt en we hebben 1 resultaat
                $row = mysqli_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 ();
        }
    }
?>


nu stuurt hij mij altijd naar de header...
Vanuit welke voorwaarde gebeurt dat? Zet er eens tijdelijk een verschillende echo in.
Dan weet je welke route het script doorloopt.
hoe bedoel je ?

deze pagina wordt aangestuurd van een form waar user en paswoord ingevuld wordt

de to_login wordt aangesproken als er geen goede combinatie wordt gegeven in het formulier.

ik heb niks aan de code veranderd buiten de msqli functies.
Ik zie drie plekken in je code waar je to_login() aanroept. Ook als je query mislukt doe je dat? Waarom toon je dan niet een foutmelding uit mysqli_error($res)?

Verder zou ik ook een melding tonen als de voorwaarde van mysqli_num_rows geen 1 is. je kan bijvoorbeeld een foutmelding meegeven in die functie, zodat je foutmeldingen kan tonen op je formulier, met de reden waarom het inloggen niet gelukt is.
$link is niet gedefinieerd binnen je functies...

Zet (nogmaals) het melden + weergeven van fouten eens aan.

Ook zou je een "wrapper" voor je database-functies kunnen schrijven en/of (zoals tevens eerder voorgesteld) de object georienteerde schrijfwijze kunnen toepassen zodat je niet elke keer $link hoeft toe te voegen.

Bezint eer gij begint.

Enne: een header('Location: ...') zonder navolgend exit; statement... Dat is vragen om ongelukken/veiligheidsgaten.

header('Location: ...') transporteert je niet direct automagisch naar de nieuwe locatie, maar dat gebeurt pas aan het einde van het script. Alle code volgend op header('Location: ...') zal dus gewoon uitgevoerd worden en na afloop zul je doorgestuurd worden naar de nieuwe locatie.
En dan is to_login() een nogal "ad hoc" functie, maak er zoiets van zodat deze herbruikbaar is:
<?php
function redirect($link) {
    header('HTTP/1.1 303 See Other');
    header('Location: '.$link);
    exit; // zodat je het NOOIT meer vergeet
}
?>

Reageren