• User Attivo

    Redirect PHP

    Salve ragazzi,
    avrei un problemino da risolvere e non sono espertissimo di php vi posto il codice relativo ad un redirect da fare:

    <?php if (!session_id()) session_start();?>
    <?php

    include_once 'Func.php';
    include_once('urls.php');
    include_once ('text.php');
    include_once('header.php');
    $Wall = new Func;

    if(isset($_POST['mem_email']))
    {
    $em = $Wall->filterData(@$_POST['mem_email']);
    $pas = $Wall->filterData(@$_POST['password']);

    $query  = "SELECT * FROM wallusers where mem_email='".$em."' and mem_pass='".md5($pas)."' and active=1";
    $result = mysql_query($query) or die(mysql_error());
    
    if (mysql_num_rows($result) == 0)
    {
        header('Location: '.$siteUrl.'login.php');
        
        exit;
    }
    
    while ($row = mysql_fetch_assoc($result)) 
    {
        $mem_email       = $row["mem_email"];
        $id             = $row["mem_id"];
        $username        = $row["username"];
        $mem_fname       = $row["mem_fname"];
        $mem_lname       = $row["mem_lname"];
        $mem_pic       = $row["mem_pic"];
        $gender       = $row["gender"];
        $active       = $row["active"];
        $_SESSION['id_user']  = $id;
    
    
        setcookie("username", $username);
        
        setcookie("mem_id", $id);
        
        $_SESSION['username'] = $username;
        
        $_SESSION['mem_email']     = $mem_email;
        $_SESSION['mem_fname']  = $mem_fname;
        $_SESSION['mem_lname']  = $mem_lname;
        
        $_SESSION['gender']      = $gender;
        $_SESSION['mem_pic']     = $mem_pic;
        $_SESSION['wall_login'] = 1;
    }
    
    **header('Location: '.$siteUrl.'home.php');**
    

    ** exit;**
    }?>

    Il problema e' l'ultimo header in grassetto che non funziona online, mentre con easy php funziona benissimo e accede alla home.
    Quando effettuo il log in online rimane sulla pagina di login nella quale scompare tutto resta tutta bianca senza proseguire alla home.
    Mi svelate questo mistero se possibile?
    Vi ringrazio anticipatamente.
    Marco


  • ModSenior

    Ciao,
    metti all'inizio dello script:
    ini_set('error_reporting', E_ALL);

    In modo da abilitare la visualizzazione degli errori, che credo sia disabilitata.


  • User Attivo

    Ops grazie per essere intervenuto ma non fa nulla, tutto come postato prima. 😞


  • ModSenior

    Verifica intanto che entri nel primo if.


  • User Attivo

    Si entra almeno fino all'exit perche' se non fa il login resta su login regolarmente , e' la seconda parte che non va , e ripeto nel server easy php funziona bene e va subito alla home page, mentre online non accede anche se funzionano tutti i redirect tranne questo e sono scritti allo stesso modo.


  • ModSenior

    Non vedo nulla di particolarmente strano, tranne $siteUrl che in quel pezzo di codice non è definita, controlla se la variabile c'è.
    Metti nel browser un componente aggiuntivo per poter vedere i response header della pagina, e vediamo cosa risponde.


  • User Attivo

    nnte da fare ho abolito anche la variabile $siteUrl inserendo header("Location:il prefisso web.miosito.it"); non va .. che strano. la variabile e' definita in include urls


  • ModSenior

    Vedi un pò i response headers. Non correi ce ne sia uno impostato precedentemente da qualche parte ed il problema sia quello.


  • User Attivo

    ho controllato tutto mannaggia preimpostato nn c'e' nnte


  • User Attivo

    Ciao,

    forse ini_set() non ti è consentita dal tuo provider perché è troppo generica e prevede un php.ini customizzato per ogni utente. Utilizza:

    [php]
    error_reporting(E_ALL);
    [/php]

    ed in ogni caso, verifica la restituzione del risultato da parte delle funzioni. setcookie() restituisce un booleano, quindi effettua un controllo per verificare se restituisce FALSE. Se qualche operazione ti stampa un errore di tipo warning o di tipo notice, il redirect tramite header() non ti funziona perché per mostrare un errore il PHP deve già avere inviato altri headers che non possono precedere Location.

    Per quanto riguarda le differenze tra easyphp ed il tuo hosting si tratta semplicemente di una diversa configurazione di PHP+Apache. Non è solo sugli header che differiscono.


  • User Attivo

    Si, esatto, è sicuramente php che printa un notice o qualcos'altro..se riesci a visualizzare gli errori dovrebbe darti un messaggio di errore del tipo : "Header already sent by"

    @Francesco Di Caprio said:

    Ciao,

    forse ini_set() non ti è consentita dal tuo provider perché è troppo generica e prevede un php.ini customizzato per ogni utente. Utilizza:

    [php]
    error_reporting(E_ALL);
    [/php]

    ed in ogni caso, verifica la restituzione del risultato da parte delle funzioni. setcookie() restituisce un booleano, quindi effettua un controllo per verificare se restituisce FALSE. Se qualche operazione ti stampa un errore di tipo warning o di tipo notice, il redirect tramite header() non ti funziona perché per mostrare un errore il PHP deve già avere inviato altri headers che non possono precedere Location.

    Per quanto riguarda le differenze tra easyphp ed il tuo hosting si tratta semplicemente di una diversa configurazione di PHP+Apache. Non è solo sugli header che differiscono.


  • User Attivo

    ragazzi buongiorno ho risolto ho tolto quel include header.php in alto nel codice anche se all'interno non c'e' nessun output o altri header , ma in ogni caso funziona.
    Grazie lo stesso e a presto. 🙂