Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: Redirect non eseguito!

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18

    Redirect non eseguito!

    Ciao a tutti, sono nuovo e volevo chiedervi una cosa semplice semplice.
    Ho una pagina nel mio esito che utilizzo per fare il logout degli utenti loggati che ha semplicemente 4 righe di codice:

    Codice PHP:
    <?php

    session_start
    ();
    session_destroy();
    header("Location: http://mysite.it/account/login");
    exit();

    ?>
    L'utente viene "sloggato", infatti la sessione viene distrutta correttamente ma non capisco perchè non avviene il redirect alla pagina http://mysite.it/account/login.

    Qualcuno sa per quale motivo?

  2. #2
    1. attiva gli errori
    2. sei sicuro che non ci sia nulla prima di <?php o dopo di ?> neanche uno spazio o una riga vuota?
    Ciao!

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18
    Originariamente inviato da fmortara
    1. attiva gli errori
    2. sei sicuro che non ci sia nulla prima di <?php o dopo di ?> neanche uno spazio o una riga vuota?
    Ho scoperto l'errore semplicemente prima di quel blocco di codice c'era quest'altro:

    Codice PHP:
    <?php
    /*
    Template Name: Logout Account
    */
    ?>
    che come è noto serve solo a dare il nome alla pagina di wordpress.
    La cosa che non capisco è: perchè quella semplice riga di codice dovrebbe bloccare il funzionamento della funzione di redirect??

  4. #4
    in sè quel codice non dovrebbe bloccare il redirect

    il problema è semmai, come ti è già stato fatto notare da fmortara, che probabilmente tra un blocco e l'altro (o prima, o dopo) c'erano delle righe vuote.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18
    Originariamente inviato da piesse78
    in sè quel codice non dovrebbe bloccare il redirect

    il problema è semmai, come ti è già stato fatto notare da fmortara, che probabilmente tra un blocco e l'altro (o prima, o dopo) c'erano delle righe vuote.
    Cosa intendi per righe vuote? E per quale motivo dovrebbero bloccare il codice?

  6. #6
    leggi il manuale ufficiale php
    http://php.net/manual/en/function.header.php

    dice:
    Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
    puoi inviare un header solo se prima non c'è stato alcun output a video. Se tu fai uno script php che contiene degli "a capo" fuori dai blocchi <?php e ?>, questi costituiscono un output (cioè vengono visualizzati a video). Esempio:

    codice:
    <?php
       ... codice php
    ?>
    
    <?php
       ... codice php
       header(".......");
    ?>
    è sbagliato, perchè tra i due blocchi c'è una riga vuota e l'header viene invocato dopo che un output è già stato mandato alla pagina.

    codice:
    <?php
       ... codice php
    ?>
    <?php
       ... codice php
       header(".......");
    ?>
    invece è corretto, perchè tra i due blocchi php non c'è nulla.

    attenzione che
    codice:
    <?php
       ... codice php
    ?>
    <?php
       ... codice php
    
       echo "pippo";
       header(".......");
    ?>
    è sbagliato comunque, perchè "echo" produce un output.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18
    Originariamente inviato da piesse78
    leggi il manuale ufficiale php
    http://php.net/manual/en/function.header.php

    dice:


    puoi inviare un header solo se prima non c'è stato alcun output a video. Se tu fai uno script php che contiene degli "a capo" fuori dai blocchi <?php e ?>, questi costituiscono un output (cioè vengono visualizzati a video). Esempio:

    codice:
    <?php
       ... codice php
    ?>
    
    <?php
       ... codice php
       header(".......");
    ?>
    è sbagliato, perchè tra i due blocchi c'è una riga vuota e l'header viene invocato dopo che un output è già stato mandato alla pagina.

    codice:
    <?php
       ... codice php
    ?>
    <?php
       ... codice php
       header(".......");
    ?>
    invece è corretto, perchè tra i due blocchi php non c'è nulla.

    attenzione che
    codice:
    <?php
       ... codice php
    ?>
    <?php
       ... codice php
    
       echo "pippo";
       header(".......");
    ?>
    è sbagliato comunque, perchè "echo" produce un output.
    Ho capito, grazie mille per l'aiuto.

  8. #8
    Utente di HTML.it L'avatar di flash20
    Registrato dal
    Dec 2003
    Messaggi
    567
    Ciao a tutti, scusate se mi intrometto, ma sto passando da ASP a PHP e mi sono imbattuto nello stesso problema.

    Quindi a quanto ho capito con un output prima del redirect non si può usare il comando header, ma c'è un comando alternativo per reindirizzare? Se a me capita che alla fine di un operazione ho bisogno di fare un redirect mi sembra assurdo che con non posso farlo in nessun modo se ho dell'output prima, mi sembra una limitazione enorme. Con ASP usavo il response.redirect con qualsiasi contenuto e condizione e funzionava, non esiste un comando speculare?

    Addirittura non mi evvettua il reindirizzamento con una pagina semplice così composta:

    Codice PHP:
    <?
    include("config.php");
    include(
    "conn.php");

    $id=$_GET['id'];

    $sql="delete from tabella where id='".$id."'";
    $rs mysql_query($sql) or die ("Query fallita: ".mysql_error()); 

    header("Location: index.php");
    ?>
    Nel file config.php ci sono solo delle variabili con i relativi valori e nel file conn.php la stringa di connessione al db

    Se eseguo la pagina mi cancella il file dal database come richiesto, ma rimane una pagina bianca e non reindirizza

    Grazie mille

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    18
    Originariamente inviato da flash20
    Ciao a tutti, scusate se mi intrometto, ma sto passando da ASP a PHP e mi sono imbattuto nello stesso problema.

    Quindi a quanto ho capito con un output prima del redirect non si può usare il comando header, ma c'è un comando alternativo per reindirizzare? Se a me capita che alla fine di un operazione ho bisogno di fare un redirect mi sembra assurdo che con non posso farlo in nessun modo se ho dell'output prima, mi sembra una limitazione enorme. Con ASP usavo il response.redirect con qualsiasi contenuto e condizione e funzionava, non esiste un comando speculare?

    Addirittura non mi evvettua il reindirizzamento con una pagina semplice così composta:

    Codice PHP:
    <?
    include("config.php");
    include(
    "conn.php");

    $id=$_GET['id'];

    $sql="delete from tabella where id='".$id."'";
    $rs mysql_query($sql) or die ("Query fallita: ".mysql_error()); 

    header("Location: index.php");
    ?>
    Nel file config.php ci sono solo delle variabili con i relativi valori e nel file conn.php la stringa di connessione al db

    Se eseguo la pagina mi cancella il file dal database come richiesto, ma rimane una pagina bianca e non reindirizza

    Grazie mille
    Ciao flash20, per la mia pagina di logout, nella quale faccio più o meno la stessa, ovvero un cambiamento del db e poi il reindirizzamento ho risolto scrivendo tutto il codice direttamente nella pagina, senza mettere alcun "include". Prova

  10. #10
    Utente di HTML.it L'avatar di flash20
    Registrato dal
    Dec 2003
    Messaggi
    567
    Così funziona, ma mi sembra un assurdità, faccio dei file di configurazione e connessione apposta per non doverli riscrivere e poi non posso usarli perchè header rompe le scatole. E' un limite enome, se così è devo dire un punto a favore di ASP

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.