Visualizzazione risultati 1 fino 14 di 14

Discussione: Header location non va

  1. #1
    Guest

    Exclamation Header location non va

    Salve gente.
    Vi giuro che sto impazzendo.
    Mi hanno commissionato un sito che ho sviluppato in locale e funziona perfettamente.
    Carico il sito online ed ecco che non mi funzionano le redirect.
    Non ricevo nessun errore, in locale funziona e contattando l'agenzia di hosting non mi hanno saputo dare spiegazioni.
    Codice PHP:
    if($_SESSION['connect']->query($query)){
    header("Location: ?titolo=".$_GET['titolo']."&step=".$_GET['step']."&numeroDomande=".$_GET['numeroDomande']."&risp=s");
    }
    Sono sicuro al 100% che la condizione viene rispettata, però non viene eseguito il reindirizzamento.
    Sapete aiutarmi?

  2. #2
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Guarda se hai prodotto dell'output con la headers_sent().

    Sicuro che "?<querystring>" funziona? Cioè non è che va tipo "./?<querystring>" ?

    Ciao!

  3. #3
    Guest

    Predefinito

    Facendo un output ottengo 1.
    Comunque ho provato con ./ ma niente comunque.

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Ti sei assicurato che la condizione assuma il corretto valore sostituendo per esempio alla funzione header un semplice echo?
    Cosa intendi per non funziona? La risposta HTTP non viene inviata con il corretto header? L'hai ispezionata con gli strumenti di rete messi a disposizione dai browser?

    Se carichi uno script PHP che consiste solo della funzione header che aggiunge un semplice header Location, funziona?

  5. #5
    Guest

    Predefinito

    Ho verificato la condizione tramite degli output e controllando nel database i dati vengono correttamente inseriti.
    Non funziona in quanto mi rimane nella stessa pagina senza aggiornare appunto i campi GET.

    L'header per arrivare da una pagina di login alla pagina in cui eseguo il codice di cui sopra funziona. I problemi li sto riscontrando qui.

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    La risposta HTTP non viene inviata con il corretto header? L'hai ispezionata con gli strumenti di rete messi a disposizione dai browser?
    L'RFC ad ogni modo indica che sia necessario un URI assoluto, anche se sembra che si voglia ampliare questa restrizione. Dovresti poi infine verificare l'effettiva implementazione dei browser al riguardo.

  7. #7
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Citazione Originalmente inviato da mathis Visualizza messaggio
    Facendo un output ottengo 1.
    1 significa true, quindi che hai già inviato l'header. Dovresti quindi eliminare eventuali output prima di quelle righe, oppure usare l'output bufferato.

    Ciao!

  8. #8
    Guest

    Predefinito

    Ho provato con un percorso assoluto, ho provato a mettere la parte di codice interessata prima di ogni output ma niente.

  9. #9
    Guest

    Predefinito

    Salve,
    Ma è permesso eseguire più header() nella stessa pagina?
    Mi spiego meglio, io esegue un header("Location:") dove aggiorno i parametri GET e poi ne faccio un altro per aggiornare nuovamente questi valori.
    E' possibile o potrebbe essere questo il problema?

  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Se vuoi effettuare un redirect, la cosa più saggia è chiamare header('Location: ...') e poi terminare lo script con exit o die.

    Cerca quindi di strutturare il tuo script in modo che prima vengano calcolati i valori che ti servono, poi eseguita logica e controlli su questi valori. A seconda delle condizioni, poi redirigi ad un'altra pagina, oppure mandi qualcosa in output.

  11. #11
    Guest

    Predefinito

    Non esiste un metodo per evitare la modifica della struttura del mio codice?
    Anche perché non saprei bene come fare visto che gli Header("Location: ") da fare sono diverse e dipendono da diverse condizioni.

  12. #12
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Se hai scritto del codice brutto, purtroppo devi risistemarlo.

    Puoi comunque avere più di un header(...), l'importante è che una volta effettuato il redirect lo script termini li. Altrimenti ti ritrovi in mano un enorme groviglio e (come adesso) non riesci a far funzionare le cose come vuoi.

  13. #13
    Guest

    Predefinito

    Ho una domanda e mi scuso se non consulto prima la guida PHP ma ho poco tempo a disposizione, appena avrò due minuti lo farò:
    Le funzioni exit() e die() servono ad "interrompere" il codice nel senso che se io ho:
    Codice PHP:
    <?php
    codice
    if(){
    exit();
    }
    codice2
    ?>
    se la condizione dell'if viene rispettata e dunque eseguita la funzione exit() codice2 non viene eseguito?
    Mi sono chiesto se, invece di avere diversi if (come strutturato per il momento il mio codice) del tipo:
    Codice PHP:
    <?php
    codice
    if(){
    if()
    Header("Location: ?val=1");
    codice
    }
    codice
    if(){
    Header("Location: ?val=2");
    }
    con all'interno i vari header(), sia possibile far si che venga riaggiornata la pagina con il valore passato magari tramite POST e poi all'inizio, prima di ogni cosa (anche se in questo momento non ci sono output prima), verificare quale Header() eseguire?
    Funzionerà? E' una possibile soluzione ottimale?

  14. #14
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Chiamare exit o die ti serve per fare in modo che lo script termini e spedisca al browser il redirect che hai appena settato. Ma puoi anche scrivere una cosa di questo tipo:
    Codice PHP:
    <?php
    // codice

    if (...) {
    header('Location: X');
    die();
    }

    // altro codice

    if (...) {
    header('Location: Y');

    } else {
    header('Location: Z');

    }

    // fine dello script


    .

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •