2013-06-17 17 views
22

Ho letto tutti i tuoi post sull'inserimento di intestazioni in un file di modulo php per reindirizzare l'utente a un altro URL DOPO che il modulo è stato inviato, ma non riesco a capire come fare esso. Di seguito è il mio codice. Puoi mostrarmi dove mettere l'header/redirect in modo che le informazioni vengano inviate via e-mail e poi l'utente passi a un'altra pagina html?PHP Reindirizza a un'altra pagina dopo il modulo invia

<?php 
    if(isset($_POST['email'])) { 

    // EDIT THE 2 LINES BELOW AS REQUIRED 
    $email_to = "[email protected]"; 
    $email_subject = "Mailing List Form"; 

    function died($error) { 
     // your error code can go here 
     echo "We are very sorry, but there were error(s) found with the form you 
     submitted. "; 
     echo "These errors appear below.<br /><br />"; 
     echo $error."<br /><br />"; 
     echo "Please go back and fix these errors.<br /><br />"; 
     die(); 
    } 

    // validation expected data exists 
    if(!isset($_POST['first_name']) || 
     !isset($_POST['last_name']) || 
     !isset($_POST['email']) || 
     !isset($_POST['telephone']) || 
     !isset($_POST['company']) || 
     !isset($_POST['street']) || 
     !isset($_POST['city']) || 
     !isset($_POST['state']) || 
     !isset($_POST['zip'])) { 
     died('We are sorry, but there appears to be a problem with the form you 
    submitted.');  
    } 

    $first_name = $_POST['first_name']; // required 
    $last_name = $_POST['last_name']; // required 
    $email_from = $_POST['email']; // required 
    $telephone = $_POST['telephone']; // required 
    $company = $_POST['company']; // required 
    $street = $_POST['street']; // required 
    $city = $_POST['city']; // required 
    $state = $_POST['state']; // required 
    $zip = $_POST['zip']; // required 

    $error_message = ""; 
    $string_exp = "/^[A-Za-z0-9 .'-]+$/"; 
    if(!preg_match($string_exp,$first_name)) { 
    $error_message .= 'The First Name you entered does not appear to be valid.<br />'; 
    } 
    if(!preg_match($string_exp,$last_name)) { 
    $error_message .= 'The Last Name you entered does not appear to be valid.<br />'; 
    } 
    $email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 
    if(!preg_match($email_exp,$email_from)) { 
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />'; 
    } 
    if(!preg_match($string_exp,$company)) { 
    $error_message .= 'The Company you entered does not appear to be valid.<br />'; 
    } 
    if(!preg_match($string_exp,$street)) { 
    $error_message .= 'The Street you entered does not appear to be valid.<br />'; 
    } 
    if(!preg_match($string_exp,$city)) { 
    $error_message .= 'The City you entered does not appear to be valid.<br />'; 
    } 
    if(!preg_match($string_exp,$state)) { 
    $error_message .= 'The State you entered does not appear to be valid.<br />'; 
    } 
    if(!preg_match($string_exp,$zip)) { 
    $error_message .= 'The Zip Code you entered does not appear to be valid.<br />'; 
    } 
    if(strlen($error_message) > 0) { 
    died($error_message); 
    } 
    $email_message = "Response from Mailing List Page. Please enter in database.\n\n"; 

    function clean_string($string) { 
     $bad = array("content-type","bcc:","to:","cc:","href"); 
     return str_replace($bad,"",$string); 
    } 

    $email_message .= "First Name: ".clean_string($first_name)."\n"; 
    $email_message .= "Last Name: ".clean_string($last_name)."\n"; 
    $email_message .= "Email: ".clean_string($email_from)."\n"; 
    $email_message .= "Telephone: ".clean_string($telephone)."\n"; 
    $email_message .= "Company: ".clean_string($company)."\n"; 
    $email_message .= "Street: ".clean_string($street)."\n"; 
    $email_message .= "City: ".clean_string($city)."\n"; 
    $email_message .= "State: ".clean_string($state)."\n"; 
    $email_message .= "Zip: ".clean_string($zip)."\n"; 


// create email headers 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 

?> 

<!-- include your own success html here --> 

Thanks for subscribing to our mailing list 



<?php 
} 
?> 
+1

Non una risposta, ma si prega di scegliere un altro modo [per convalidare indirizzi e-mail] (http://stackoverflow.com/questions/12026842/how-to-validate-an-email-ad-ress-in-php/12026863#12026863) . – PeeHaa

+1

Metti l'intestazione '(Location: thank_you_page.php"); 'dopo' @mail ($ email_to, $ email_subject, $ email_message, $ headers); 'e crea' thank_you_page.php' con un messaggio a tua scelta. –

risposta

3

È possibile includere la funzione di intestazione dove si vuole, fintanto che non html e/o il testo è stato stampato sullo standard output.

Per ulteriori informazioni e il loro utilizzo: http://php.net/manual/en/function.header.php


vedo nel codice che si echo() fuori del testo in caso di errore o di successo. Non farlo: non puoi. Puoi solo reindirizzare o mostrare il testo. Se mostri il testo non riuscirai a reindirizzare.

+0

Giusto! Voglio sostituire quel messaggio di successo con un reindirizzamento. Posso inserirlo dove è il messaggio di successo? – user2494737

+0

... ma cosa succede se dobbiamo fare entrambe le cose? Non è possibile reindirizzare e visualizzare il testo sulla pagina? Questo è così confuso. Mi sento come se ogni risposta che posso trovare su questo non è abbastanza chiara. –

+0

Come potresti mostrare del testo se stai reindirizzando l'utente a un'altra pagina? È come chiedere "come posso morire e leggere un libro?". O muori e non puoi leggere o puoi leggere e non essere la morte. Si potrebbe mostrare qualcosa e ** poi ** reindirizzare l'utente (dopo un certo tempo trascorso), ma non è qualcosa che può essere fatto lato server. Il server serve la pagina, punto. Puoi pubblicare la pagina con un po 'di JavaScript che istruisca a reindirizzare. Se trovi tutto questo confuso, devi studiare e capire l'interazione client-server e come funziona un browser/internet. – Saturnix

0

Ogni volta che si desidera reindirizzare, inviare le intestazioni:

header("Location: http://www.example.com/"); 

Ricordate non puoi inviare dati al client prima di questo, però.

+0

Proprio così - Sono un klutz di codice e ho bisogno di sapere esattamente dove inserire l'intestazione nel mio esempio di codice. Grazie – user2494737

+0

Invece di Grazie per l'iscrizione alla nostra mailing list, nei tag . – Frildoren

+0

Come mai dovremmo usare l'intestazione se non può essere utilizzata dopo che i dati sono stati inviati al client? Non dobbiamo inviare dati per creare il modulo che stanno utilizzando per attivare la ricarica in primo luogo? –

47

Subito dopo @mail($email_to, $email_subject, $email_message, $headers);

header('Location: nextpage.php'); 

Nota che non vedrete mai 'Grazie per l'iscrizione alla nostra mailing list'

che dovrebbero essere nella pagina successiva, se echo qualsiasi testo si otterrà un errore perché le intestazioni sarebbero già state create, se vuoi reindirizzare non restituire mai alcun testo, nemmeno uno spazio!

+0

Fantastico !!!!! Ha funzionato - grazie mille. – user2494737

+0

Sono contento, per favore non dimenticarti di votare e accettare la risposta. Grazie – multimediaxp

+0

Eddy - Sono nuovo di zecca qui - non riesco a capire dove farlo :) – user2494737

6

Se il reindirizzamento è in PHP, prima dell'istruzione di reindirizzamento non deve venire echeggiato nulla all'utente.

Vedere header per ulteriori informazioni.

Ricordate che header() deve essere chiamato prima di ogni uscita effettiva viene inviato, sia da normali tag HTML, righe vuote in un file, o da PHP

In caso contrario, è possibile utilizzare Javascript per reindirizzare l'utente.

Basta usare

window.location = "http://www.google.com/" 
5

prima dare il vostro tipo di ingresso presentare un nome, come questo name='submitform'.

e poi mettere questo nel file php

if (isset($_POST['submitform'])) 
    { 
    ?> 
<script type="text/javascript"> 
window.location = "http://www.google.com/"; 
</script>  
    <?php 
    } 

Non dimenticare di modificare l'URL al tuo.

Problemi correlati