web-dev-qa-db-fra.com

PHP Rediriger vers une autre page après l'envoi du formulaire

J'ai lu tous vos messages sur l'insertion d'en-têtes dans un fichier de formulaire php afin de rediriger l'utilisateur vers une autre URL APRÈS l'envoi du formulaire - mais je ne vois pas comment le faire. Ci-dessous mon code. Pouvez-vous me montrer où placer l'en-tête/la redirection pour que les informations soient envoyées par courrier électronique et que l'utilisateur accède ensuite à une autre page html?

    <?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._%-]+@[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
}
?>
25
user2494737

Juste après @mail($email_to, $email_subject, $email_message, $headers);

header('Location: nextpage.php');

Notez que vous ne verrez jamais "Merci pour votre inscription à notre liste de diffusion"

Cela devrait être à la page suivante, si vous faites écho à un texte, vous obtiendrez une erreur car les en-têtes auraient déjà été créés, si vous voulez rediriger ne retournez jamais de texte, pas même un espace!

56
multimediaxp

Donnez d’abord un nom à votre type d’entrée, comme celui-ci name='submitform'.

puis mettez cela dans votre fichier php

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

N'oubliez pas de changer l'URL à la vôtre.

7
KeepMove

Si votre redirection est en PHP, rien ne doit être renvoyé à l'utilisateur avant l'instruction de redirection.

Voir header pour plus d’informations.

Rappelez-vous que header () doit être appelé avant toute sortie réelle, soit par des balises HTML normales, des lignes vides dans un fichier ou par PHP

Sinon, vous pouvez utiliser Javascript pour rediriger l'utilisateur.

Juste utiliser

window.location = "http://www.google.com/"
7
Giovanni

Vous pouvez inclure votre fonction d'en-tête où bon vous semble, à condition qu'aucun texte HTML et/ou texte n'ait été imprimé au format standard.

Pour plus d'informations et pour utiliser: http://php.net/manual/en/function.header.php


Je vois dans votre code que vous nommez echo() en cas d'erreur ou de succès. Ne fais pas ça: tu ne peux pas. Vous pouvez uniquement rediriger OR pour afficher le texte. Si vous affichez le texte, la redirection échouera.

3
Saturnix

Une fois ce problème résolu, j’ai pensé qu’il était raisonnable de dire comment je l’avais résolu;

Je pense que la façon de le faire en php est d'utiliser la fonction d'en-tête comme:

header ("Location: exampleFile.php");

Vous pouvez simplement inclure ce fichier d'en-tête dans une instruction if afin qu'il ne soit redirigé que lorsqu'une certaine condition est remplie, comme dans:

if (isset($_POST['submit'])){   header("Location: exampleFile.php")   }

J'espère que cela pourra aider.

0
Smitho

Chaque fois que vous souhaitez rediriger, envoyez les en-têtes:

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

Rappelez-vous que vous ne pouvez pas envoyer de données au client auparavant.

0
Frildoren