Page 1 sur 1

Faire une redirection en fin de boucle "for"

Posté : 01 août 2007, 17:46
par dmx-moteur
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");


Posté : 01 août 2007, 18:03
par Ryle
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 :)

Posté : 03 août 2007, 09:28
par dmx-moteur
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 ?

Posté : 03 août 2007, 09:35
par d0m
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>";
...

Posté : 03 août 2007, 15:29
par dmx-moteur
Merci pour ces infos !