• User

    Login diversificato in base agli utenti

    [PHP] <?php
    $username=$_POST["username"];
    $password=$_POST["password"];
    $connessione=mysql_connect("$server", "$user", "$pass") or die("impossibile la connessione con il server remoto". mysql_error());
    mysql_select_db("aaaaa");
    $dati=mysql_query("SELECT * FROM registrati WHERE username='".mysql_real_escape_string($username)."' AND password='".mysql_real_escape_string($password)."'",$connessione);
    $num=mysql_num_rows($dati);
    if($num==1 && $username=="bbbbb" && $password=="ccccc")
    header("Location: Amministrazione.php");
    elseif($num==1 && ($username!="bbbbb" || $password!="ccccc"))
    header("Location: Zona_riservata.php");
    else
    header("Location: Errato_login.php");
    ?> [/PHP]

    Riscontro sempre il problema che indipendentemente da username e password inseriti nel modulo di login vengo ridiretto o alla pagina "Amministrazione.php", oppure a "Errato_login.php" nel caso che le stringhe immesse non siano presenti sul database. Sembra che il codice ignori l'header verso la pagina "Zona_riservata.php". Come posso risolvere il problema?
    Saluti


  • User Attivo

    Prova cosi:
    [php]<?php

    $username = isset($_POST["username"]) ? $_POST["username"] : '';
    $password = isset($_POST["password"]) ? $_POST["password"] : '';
    $connessione = mysql_connect($server, $user, $pass) or die("impossibile la connessione con il server remoto " . mysql_error());
    mysql_select_db("aaaaa", $connessione) or die("impossibile selezionare il database " . mysql_error());
    $dati = mysql_query("SELECT * FROM registrati WHERE username='" . mysql_real_escape_string($username) . "' AND password='" . mysql_real_escape_string($password) . "'", $connessione);
    if ($dati === false) {
    die("query fallita: " . mysql_error());
    }
    $num = mysql_num_rows($dati);
    if ($num == 1) {
    if (($username == "bbbbb") && ($password == "ccccc")) {
    header("Location: Amministrazione.php");
    } else {
    header("Location: Zona_riservata.php");
    }
    } else {
    header("Location: Errato_login.php");
    }
    exit();

    ?>[/php]

    In ogni caso, gli header location dovrebbero utilizzare degli URL assoluti.
    Se non vuoi rischiare che un utente non autenticato possa accedere allo script di amministrazione (es. digitando semplicemente l'URL nel browser), dovresti implementare un metodo di sicurezza, ad esempio basato sulle sessioni. Puoi iniziare leggendo qui:

    php.html.it/guide/lezione/2995/autenticazione-in-pratica/


  • User

    Grazie per la risposta. Avevo provveduto ad inizializzare una variabile di sessione che poi ho tolto dal codice per renderlo più snello e cercare di capire dove stesse l'errore. Ho cambiato le pagine con indirizzi assoluti, ma ancora nulla. O vengo rimandato alla pagina dell'errato login o a quella dell'amministrazione :?:x
    Come potrei sistemare il codice?
    Grazie


  • User Attivo

    Mi sembra improbabile che il codice suggerito si comporti nel modo che hai descritto.

    Crea nel database un utente con username = "test" e password = "test" e prova a fare il submit della form. Sono piuttosto sicuro che verrà eseguito il redirect verso Zona_riservata.php.

    Ovviamente verifica che Zona_riservata.php non contenga del codice che, a sua volta, fa il redirect verso qualche altra pagina.

    Eventialmente fai un test sostituendo:
    [php]header("Location: Zona_riservata.php"); [/php]
    con
    [php]die("Location: Zona_riservata.php"); [/php]


  • User

    Ti ringrazio infinitamente! Hai centrato appieno quello che io non sono riuscito a capire in due giorni di smattimenti: avendo tolto l'inizializzazione della variabile di sessione e eseguendo la pagina Zona_riservata.php il controllo sulla sua esistenza ero sempre reindirizzato alla pagina di login!
    Grazie ancora, sei stato super gentile e preparato a beccare il problema
    :sun::gthi: