• User

    Eventuali istruzioni dopo una redirect con header

    Ciao a tutti, vi descrivo il problema:
    ho realizzato una pagina php che presenta un form di autenticazione all'area ristretta del sito. L'utente inserisce nome utente e password e, cliccando sul pulsante log-in, i due campi vengono inviati alla stessa pagina che, collegandosi al db sottostante, verifica l'eventuale riscontro. Se il riscontro ha successo, viene eseguita una redirect che porta l'utente alla
    prima pagina dell'area ristretta altrimenti l'utente rimane sulla pagina corrente che ripresenta il form di autenticazione accompagnato da un messaggio di errore.
    Il codice php all'inizio della pagina è:

    [php] <?php

    session_start();

    //Se $_REQUEST["name"] e $_REQUEST["password"] esistono l'utente
    //ha compilato il form perciò lancio la query

    if( isset($_REQUEST["name"]) && isset($_REQUEST["password"]) )
    {
    $name=$_REQUEST["name"];
    $pass=$_REQUEST["password"];

    $con=mysql_connect("localhost", "root", "") or die...
    
    mysql_select_db("mydb") or die ("Connessione al db impossibile...")
    
    $query="SELECT userName
                FROM users
                WHERE userName='$name' AND password='$pass'";
    
    $result=mysql_query($query) or die ("Query non valida: ".mysql_error());
    $row=mysql_fetch_array($result);
    
    if(mysql_num_rows($result)==0)
       $msg="Autenticazione fallita";  //Messaggio di errore per l'utente
    else
    {
       $_SESSION["user"]="Logged";
       header('Location: area_ristretta.php');
    }
    
    mysql_free_result($result);
    mysql_close($con);
    

    }

    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01....

    ...Qui c'è il form di autenticazione che richiama questa stessa pagina...

    </html>[/php]
    La domanda è: quando viene eseguita la redirect attraverso la header, le istruzioni mysql_free_result($result); e mysql_close($con); vengono eseguite? Se si, vorrei sapere se si tratta di una pratica "eticamente corretta" (ovviamente potrei ripetere entrambe le istruzioni sia nell'if sia nell'else e buonanotte al secchio ma vorrei comunque avere chiarimenti riguardo al caso qui sopra).
    Mille grazie per il vostro prezioso aiuto, ciao.


  • User Attivo

    Ciao Beetlejuice,
    direi di si, in genere lo script viene eseguito fino in fondo, a meno di non mettere un exit() dopo il redirect. Credo sia giusto così, anche fin troppo, perché molte volte di mysql_free_result viene addirittura trascurato...
    :ciauz:


  • ModSenior

    La mancanza dell'exit alla fine in molti casi genera problemi con il rendirect su alcuni browser(tra cui se non erro IE)