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

Discussione: PHP e Header

  1. #1

    PHP e Header

    Ragazzi, mi sento perso, per una stupidata ci sto perdendo un sacco di tempo e non riesco a venirne a capo...

    ho appena registrato un sito ed ho creato una semplice pagina di presentazione in html/php della mia attività..

    nella sezione contatti ho creato un semplice form nel quale il cliente può contattarmi inserendo la sua email, l'oggetto della mail ed il corpo del messaggio (il testo). Quando clicco il bottone invia, il messaggio viene correttamente inviato ed io lo ricevo dopo pochi attimi sulla mia posta elettronica. Fin qui tutto bene. Il problema sorge nel momento in cui, nel file php che elabora il messaggio da inviare alla mia casella email, aggiungo, alla fine, la funzione header per caricare una pagina con il messaggio di successo. A questo punto, la mail viene correttamente spedita, ma il browser non effettua il redirect.. Per essere sicuro che la funzione header funzionasse correttamente, ho creato un semplice file php con la funzione header al suo interno e caricandola, questa effettua il redirect alla homepage del mio sito, quindi tutto è correttamente configurato sul server, a meno queste sembrerebbe.

    Riporto qui di seguito il file php che processa la mail da spedire e che contiene al suo interno la funzione header incriminata:

    codice:
    <?php
      $to = "info@miosito.it";
      $email = $_POST['email'] ;
      $subject = $_POST['oggetto'] ;
      $message = $_POST['msg'] ;
      $headers = "From:" . $email;
        
      mail($to,$subject,$message,$headers);
      
      header('Location: http://www.miosito.it/mail_sent.php');
    ?>
    Nella funzione header ho provato sia con i path assoluti che relativi ma non cambia niente... c'e' qualcosa che blocca il tutto.. Esiste un modo per debuggare questo problema?

    Grazie infinite per l'aiuto!

  2. #2
    Ciao timberwolf,

    il comando header() funziona solo se non e' ancora stato inviato nulla al browser. Se il file che hai postato e' completo (nel senso, se non c'e' altro codice oltre a quello), probabilmente la funzione mail(), ritornando TRUE, inizia a scrivere nel buffer e impedisce a header() di funzionare correttamente...

    Vedi qualcosa sullo schermo dopo che la mail e' stata inviata?

    Forse e' un'idea stupida, ma prova a salvare l'esito dell'invio in una variabile:
    codice:
    <?php  $to ="info@miosito.it";
      $email = $_POST['email'];
      $subject = $_POST['oggetto'];
      $message = $_POST['msg'];
      $headers ="From:". $email;
        
      $esito = @mail($to,$subject,$message,$headers);
    
      if($esito)
        header('Location: http://www.miosito.it/mail_sent.php');
      else
        die();   
    
    ?>
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  3. #3
    Ciao e grazie per la risposta, si il codice è tutto lì e no, non vedo niente dopo l'invio, lo schermo bianco e nella barra degli url, l'ultimo url che vedo è quello dello script che ho copiato qui, non fa proprio il redirect.. ho provato a fare come mi hai consigliato e la situazione non cambia.. oggi provo a sentire i gestori del servizio hosting.. se hai altre idee sono felice di ascoltarti

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    Ciao Timberwolf, sembrerebbe non essereci nulla di anomalo.
    Assicurati che non ci siano spazi/rige vuote prima del tag di apertura del codice <?php

    Se non ci sono spazi/righe vuote, controlla il log degli errori di php, se non hai accesso al log prova ad inserire all'inizio del tuo script le due seguenti righe di codice:

    ini_set('display_errors',1);
    error_reporting(E_ALL);

  5. #5
    Io controllerei anche i caratteri dopo l'ultimo tag di chiusura ?>, e magari userei un ob_start() come prima istruzione subito dopo il primo <?php e un ob_end_clean() subito prima dell'ultimo tag ?> se ho inviato lo header.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  6. #6
    grazie a queste due istruzioni:

    ini_set('display_errors',1);
    error_reporting(E_ALL);

    è saltato fuori un warning!!

    codice:
    Warning: Cannot modify header information - headers already sent by (output started at D:\home\miosito.it\mail.php:1) in D:\home\miosito.it\mail.php on line 13

  7. #7
    Quindi a quanto pare, l'header viene generato alla riga 1 (?)

  8. #8
    ok ho risolto e sinceramente non so il perchè.. ho visto che la pagina era codificata in utf-8, l'ho modificata in formato ANSI ed è tutto andato liscio come l'olio...

  9. #9
    Quote Originariamente inviata da timberwolf Visualizza il messaggio
    Quindi a quanto pare, l'header viene generato alla riga 1 (?)
    No, quel messaggio vuol dire che hai mandato in output qualcosa alla riga 1, e quindi quando fai header questa fallisce perchè è stato mandato in output già qualcosa.

    Come ti si diceva, verifica sempre di non fare nessuna echo e non chiudere la sezione php con ?> per poi riaprirla con <?php PRIMA di avere fatto header().
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  10. #10
    probabilmente la codifica utf-8 generava dei caratteri non visibili a video che impedivano il corretto funzionamento dell'istruzione header che non poteva effettuare il redirect della pagina.....

    Questa è solo un'ipotesi, accetto ed aspetto una spiegazione da chi ne sa più di me

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.