Faire une redirection en fin de boucle "for"

Eléphant du PHP | 95 Messages

01 août 2007, 17:46

Bonjour à tous,

J'ai besoin d'un peu d'aide. Je fais un script de mailing list. J'ai une table d'abonnés et une table de mails. Je sélectionne un texte de mail et je l'envoi à la liste des abonnés et je mets à jour la table des mails pour mettre la date d'envoi et le statut "envoyé". Pour cela j'utilise une boucle for (voir le code ci-dessous).
Je souhaite qu'à la fin de la boucle, la page en cours soit redirigée vers une autre page mais ça ne marche pas du tout... Je ne suis pas redirigé...
Est-ce parce que j'ai mal placé ma fonction header (ainsi que celle de la mise à jour de la table les_mails) ?

Merci de votre aide.
for ($i=0; $i<sizeof($_POST['check_mail']); $i++) {
    if (!mail($_POST['check_mail'][$i],$titre,$contenu,$entete)) { 
      echo "<p>erreur d'envoi</p>"; 
    } else { 
      echo "<p>mail envoyé à :";
      echo $_POST['check_mail'][$i]."</p>";
	  $updateSQL = sprintf("UPDATE les_mails SET date_envoi=%s, statut='1' WHERE id_mail=%s",
                       GetSQLValueString($_POST['date'], "date"),
                       GetSQLValueString($_POST['id_mail'], "int"));

  mysql_select_db($database_connMail, $connMail);
  $Result1 = mysql_query($updateSQL, $connMail) or die(mysql_error());
    }
  }
header("Location: nouvelle_page.php");

Je veux apprendre !!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 août 2007, 18:03

Un header ne peut pas fonctionner si tu envois eu préalable du code au navigateur... un saut de ligne, un espace suffisent à empêcher son bon fonctionnement, alors une tonne de echo tu imagines ;)

Donc soit tu n'affiches rien au préalable et ton header fonctionnera, soit il te faudra opter pour une redirection avec un meta ou en javascript si tu veux qu'elle soit automatique :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 95 Messages

03 août 2007, 09:28

Il n'est donc pas possible de faire une redirection après une série d'instructions ? Cela me semble fou...

Je ne suis pas expert en PHP... Pourtant je travaille avec Dreamweaver et cette appli lors d'un script d'insertion crée les lignes suivantes :
$updateGoTo = "nouvelle-page.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $updateGoTo));
certes après avoir préalablement inséré ceci (et bien d'autre choses...) :
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
$editFormAction étant la valeur de l'attribut action du formulaire...

Pourquoi dans ce cas là il effectue la redirection ?
Je veux apprendre !!

d0m
Mammouth du PHP | 1141 Messages

03 août 2007, 09:35

Il n'est donc pas possible de faire une redirection après une série d'instructions ?
Si bien sûr mais il ne faut pas que ces instructions affichent quoique ce soit c'est à dire aucun echo, print,...
Pourquoi dans ce cas là il effectue la redirection ?
parce que dans cette boucle in n'ya pas d'instructions d'affichage alors que dans la tienne il y en a :
.....
echo "<p>mail envoyé à :"; 
echo $_POST['check_mail'][$i]."</p>";
...

Eléphant du PHP | 95 Messages

03 août 2007, 15:29

Merci pour ces infos !
Je veux apprendre !!