Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di beke
    Registrato dal
    Mar 2003
    Messaggi
    1,248

    Header Location non funziona

    Salve a tutti,
    in uno script PHP che effettua un inserimento in un database e poi esegue un redirect ad un'altra pagina, l'istruzione header("location:...") non mi funziona.

    Nella pagina non c'è codice HTML, solo PHP e il redirect è l'ultima istruzione.

    Questo è il codice.

    Codice PHP:
    header("location:modart1.php?sez=" $sez "&cat=" $cat "&art=" $art); 
    Da notare tre cose.

    1) su altre pagine l'istruzione header("location:...") funziona, e lo fa quando nella stringa della pagina di destinazione non ci sono variabili.

    2) se stampo la stringa dell'URL prima del redirect posso vedere che le variabili vengono passate correttamente.

    3) su un'altro server il redirect funziona correttamente. Versione PHP? Qualche settaggio differente?

    Se qualcuno ha qualche idea lo ringrazio fin d'ora, sinceramente ho anche fatto delle ricerche su Google ma non ho trovato niente.

  2. #2
    Con la funzione header non puoi inserire variabili di tipo get, ameno che non inserisci l'indirizzo assoluto

  3. #3
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    beke: metti un var_dump(headers_sent()); subito prima della location - se ti da true, la risposta ce l'hai da solo.
    e prova anche a scrivere header("Location: "...) (nota lo spazio e la L maiuscola) - sarebbe questa la forma corretta.

    quit10:

  4. #4
    Utente di HTML.it L'avatar di beke
    Registrato dal
    Mar 2003
    Messaggi
    1,248
    Prima di tutto ringrazio quit10 e bubi1 che mi hanno risposto così velocemente

    Ho fatto alcune prove su un file di test dove eseguo solo il redirect, in modo da eliminare qualcuna delle variabili in gioco:

    - I parametri in GET possono essere passati tranquillamente, sia compilati direttamente nella stringa della location, che prelevati da variabili, il redirect funziona.

    - La sintassi non c'entra.

    - Sembra che le header vengono effettivamente spedite, in quanto var_dump(headers_sent()); mi ritorna bool(true).

    Adesso provo ad inserire una per volta le altre componenti dello script per vedere che cosa effettivamente interferisce (variabili di sessione, include, connession mysql ecc.).

    Anche se, ad una prima occhiata, non mi sembra che ci sia niente che giustifichi questo comportamento, e comunque, come ho già detto, su un altro server lo script funziona regolarmente.

    Se avete qualche altra idea è comunque benvenuta

  5. #5
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da beke
    - Sembra che le header vengono effettivamente spedite, in quanto var_dump(headers_sent()); mi ritorna bool(true).
    Concentrati su questo aspetto. Se i header sono gia' stati spediti, non puoi spedirne un nuovo, e quindi header(location.. ) non funzionera' mai.

    Normalmente nel tuo log di errore dovresti vedere quale script e a che linea ha inviato dell'output forzando l'invio degli altri header, rendendoti impossibile inviare il tuo.

  6. #6
    Utente di HTML.it L'avatar di beke
    Registrato dal
    Mar 2003
    Messaggi
    1,248
    Originariamente inviato da bubi1
    Se i header sono gia' stati spediti, non puoi spedirne un nuovo, e quindi header(location.. ) non funzionera' mai.
    Giusto.
    L'istruzione riporta lo stato degli header prima di effettuare il redirect.

    Eppure prima di quello vengono soltanto raccolte delle variabili in querystring ed effettuato un inserimento su una tabella MySql.

    Grazie.
    In ogni caso, come dici tu, è evidente che il problema stà nella spedizione degli header già effettuata, chissà come, prima del redirect.
    Farò altre prove

  7. #7
    Utente di HTML.it L'avatar di beke
    Registrato dal
    Mar 2003
    Messaggi
    1,248
    Risolto!

    Lo script che terminava con il redirect, sebbene non contenesse codice HTML e quindi fosse un unico flusso di istruzioni PHP, aveva un tag di chiusura "?>" (seguito da un tag di riapertura ovviamente) a metà script.

    Evidentemente per qualche ragione (versione PHP, settaggi) su questo server la chiusura del tag comportava la spedizione degli header, mentre sull'altro server no.

    Adesso sembra funzionare tutto perfettamente in ogni caso, grazie dell'aiuto.

    Se poi qualcuno riesce a spiegarmi meglio il perchè di tutto ciò... meglio ancora

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.