8791 sujets

Développement web côté serveur, CMS

Bonsoir cher AlsaSnautes,

Je sais que c'est ne pas du tout le forum approprié, mais les autres forums que je fréquente pour les question php ne donnent pas une réponse aussi rapidement qu'ici, de plus il y a un très bon support sur ce forum.

J'explique mon problème, j'ai une partie de mon site ou l'on peux crée une news, là tout est ok, on prévisualise, si on est pas d'accord on modifie, on reprévisualise, et on envoie sur une page de traitement.

Sur cette page de traitement, j'envoie tout en base de donnée, j'envoie des mail (mail() ) aux personnes devant être contacté, et normalement, je redirige vers la page de gestion.

Mais là, je n'arrive pas à rediriger le visiteurs vers la page de gestion à cause du mail (j'ai fait plusieurs essais sans le fichier qui m'envoie les mail, et ça passe, ça redirige correctement).

Est-ce imcompatible d'envoyer des mail et rediriger par header php par la suite ? (puisque avec la fonction mail on envoie des header, mais pas au navigateur, mais au serveur pour qu'il envoi les mail ?)

Merci pour votre précieuse aide
Modifié par Super_baloo8 (04 Jul 2007 - 21:41)
Je donne un peu plus de code, voici le fichier qui me pose surement ce problème :

if($_POST['action_form'])
{
require_once("moteur/include/mysql.php");
$membre_mail_req = "SELECT email FROM users WHERE username='".$_SESSION['login_user']."'";
$membre_mail_res = mysql_query($membre_mail_req);
$membre_mail = mysql_fetch_row($membre_mail_res);
$mail_ins_req = "SELECT email, name FROM users WHERE group_id = '1' OR group_id = '2'";
$mail_ins_res = mysql_query($mail_ins_req);

switch($_POST['action_form'])
	{
	case "ajout_actualite":
		$sujet = "Soumission d'une actualité";
		break;
	default:
		$sujet = "Aucun sujet";
		break;
	}

while($mail_ins = mysql_fetch_row($mail_ins_res))
	{
	$email_cc .= '"'.$mail_ins[1].'" <'.$mail_ins[0].'>, ';
	}
	$destinataire_admin = '*****';
	$email_expediteur = $membre_mail[0];
	$email_reply = $membre_mail[0];
	require_once('include/mailer/'.$_POST['action_form'].'/admin/mail_texte.php'); 
	require_once('include/mailer/'.$_POST['action_form'].'/admin/mail_html.php');
	$frontiere = '-----=' . md5(uniqid(mt_rand()));
	$headers_admin = 'From: "'.$_SESSION['login_user'].'" <'.$email_expediteur.'>'."\n";
	$headers_admin .= 'Return-Path: <'.$email_reply.'>'."\n";
	$headers_admin .= 'Cc: '.$email_cc.''."\n";
	$headers_admin .= 'X-Priority: 1'."\n";
	$headers_admin .= 'MIME-Version: 1.0'."\n";
	$headers_admin .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';
	$message_admin = 'This is a multi-part message in MIME format.'."\n\n";
	$message_admin .= '--'.$frontiere.'--'."\n";
	$message_admin .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
	$message_admin .= 'Content-Transfer-Encoding: 8bit'."\n\n";
	$message_admin .= $message_texte_admin."\n\n";
	$message_admin .= '--'.$frontiere.'--'."\n";
	$message_admin .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
	$message_admin .= 'Content-Transfer-Encoding: 8bit'."\n\n";
	$message_admin .= $message_html_admin."\n\n";
	$message_admin .= '--'.$frontiere.'--'."\n";
	$destinataire= $membre_mail[0];
	$email_expediteur='********';
	$email_reply='***********';
	require_once('include/mailer/'.$_POST['action_form'].'/mail_texte.php'); 
	require_once('include/mailer/'.$_POST['action_form'].'/mail_html.php');
	$frontiere = '-----=' . md5(uniqid(mt_rand()));
	$headers = 'From: "L\'équipe France" <'.$email_expediteur.'>'."\n";
	$headers .= 'Return-Path: <'.$email_reply.'>'."\n";
	$headers .= 'Disposition-Notification-To: ****'."\n";
	$headers .= 'X-Priority: 3'."\n";
	$headers .= 'MIME-Version: 1.0'."\n";
	$headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';
	$message = 'This is a multi-part message in MIME format.'."\n\n";
	$message .= '--'.$frontiere.'--'."\n";
	$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
	$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
	$message .= $message_texte."\n\n";
	$message .= '--'.$frontiere.'--'."\n";
	$message .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
	$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
	$message .= $message_html."\n\n";
	$message .= '--'.$frontiere.'--'."\n";

		mail($destinataire_admin,$sujet,$message_admin,$headers_admin);
		mail($destinataire,$sujet,$message,$headers);
} 
?> 
Salut Smiley cligne
Super_baloo8 a écrit :
Est-ce imcompatible d'envoyer des mail et rediriger par header php par la suite ?
Ben non... on trouve tout plein de formulaires qui testent la réussite de la fonction mail() et qui redirigent vers une page de confirmation.

Tu as un message d'erreur ? Du genre "headers already sent..." ?
Salut Heyoan, je n'ai aucun message d'erreur, c'est ça qui m'embêtais, je dis ça au passé car grâce au seconde webmaster occasionnel, il a trouver une parade, buffériser le tout.

En clair, le fichier mail.php (donnée ci dessus) reste tel quel, mais dans mon fichier qui traite tout le site, il faut mettre un ob_start au départ, puis à chaque redirection, ou à la fin il y a un ob_end_flush.

La bufférisation est vraiment pratique, le seul inconvénient, c'est qu'on à l'impression que la page ne charge pas pendant quelques secondes.

Voici le code de la page qui me permet d'afficher le site pour mieux comprendre ce que je viens de dire lol

<?php
session_start();
ob_start();
if(!$_SESSION['loer'] AND $_COOKIE['cookie'] AND ($_GET['dos'] != 'identification') AND !$_GET['sousdos'])
{
	function stripslashes_array($array)
    {
        return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
    }
	$_COOKIE = stripslashes_array($_COOKIE);
	if (isset($_COOKIE['cookie'])) {
		list($cookie['id'], $cookie['password_hash']) = unserialize($_COOKIE['cookie']);
	require_once("moteur/include/mysql.php");
	$membre_req_cookie = "SELECT group_id, password, name FROM users WHERE id='".$cookie['id']."'";
	$membre_res_cookie = mysql_query($membre_req_cookie);
	$membre_cookie = mysql_fetch_assoc($membre_res_cookie);
	if ($cookie['hash'] == md5($membre_cookie['password']))
	{
	$_SESSION['id'] = $cookie['id'];
	$_SESSION['loer'] = $membre_cookie['name'];
	$_SESSION['grouer'] = $membre_cookie['up_id'];
	}
	}
}
require_once("moteur/mysql.php");

$toy = "SELECT * FROM site WHERE id='1'";
$rus = mysql_query($toy);
$play = mysql_fetch_row($rus);

if(!$_GET['dos'] AND !$_GET['sousdos'])
{
$req = "SELECT * FROM pages WHERE dossier='dossier' AND sous_dossier='sous_dossier'";
}
elseif(($_GET['dos'] == 'actualites') AND $_GET['sousdos'])
{
$req = "SELECT * FROM pages WHERE dossier='actualites' AND sous_dossier='vide'";
}
elseif(($_GET['dos'] == 'deconnexion') AND !$_GET['sousdos'])
{
	$_SESSION = array();
	if (isset($_COOKIE[session_name()]))
	{
    setcookie(session_name(), '', time()-42000, '/');
	}
	session_destroy();
	setcookie('punbb_cookie', 'destruction', 0, '/', '', 0);
	$host  = $_SERVER['HTTP_HOST'];
	$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
	$extra = '';
	header("Location:  http://$host$uri/$extra");
 
	mysql_close();
	ob_end_flush();
	exit;
}
elseif(($_GET['dos'] == 'forum') AND !$_GET['sousdos'])
{
	$host  = $_SERVER['HTTP_HOST'];
	$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
	$extra = 'forum/index.php';
	header("Location:  http://$host$uri/$extra");
 
	mysql_close();
	ob_end_flush();
	exit;
}
elseif(($_GET['dos'] == 'identification') AND (!$_GET['sousdos'] OR $_GET['sousdos']) AND $_SESSION['login_user'])
{
	$host  = $_SERVER['HTTP_HOST'];
	$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
	$extra = 'gestion/';
	header("Location:  http://$host$uri/$extra");
 
	mysql_close();
	ob_end_flush();
	exit;
}
elseif(($_GET['dos'] == 'gestion') AND (!$_GET['sousdos'] OR $_GET['sousdos']) AND !$_SESSION['login_user'])
{
	$host  = $_SERVER['HTTP_HOST'];
	$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
	$extra = 'identification/';
	header("Location:  http://$host$uri/$extra");
 
	mysql_close();
	ob_end_flush();
	exit;
}
elseif(($_GET['dos'] == 'gestion') AND ($_GET['sousdos'] == 'traitement'))
{
	require_once('moteur/include/update.php');
	$host  = $_SERVER['HTTP_HOST'];
	$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
	if($_SESSION['action'] == 'ajout_commentaire')
	{
	$extra = $_SESSION['redirect'];
	}
	else
	{
	$extra = "gestion/";
	}
	header("Location:  http://$host$uri/$extra",  false);
	mysql_close();
	ob_end_flush();
	exit;
}
elseif(($_GET['dos'] == 'ordinateur') AND ($_GET['sousdos']))
{
	list($action_ordi, $id_ordi_modif) = explode("_", $_GET['sousdos']);
	if(($action_ordi == 'mise-a-jour-ordinateur') OR ($action_ordi == 'ajout-photo-ordinateur') OR ($action_ordi == 'suppression-ordinateur'))
	{
	$req = "SELECT * FROM pages WHERE dossier='ordinateur' AND sous_dossier='vide'";
	}
	else
	{
	$host  = $_SERVER['HTTP_HOST'];
	$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
	$extra = "gestion/";
	header("Location:  http://$host$uri/$extra");
 
	mysql_close();
	ob_end_flush();
	exit;
	}
}
elseif(($_GET['dos'] == 'administration-modification') AND ($_GET['sousdos'] == 'mise-a-jour'))
{
$req = "SELECT * FROM pages WHERE dossier='administration-modification' AND sous_dossier='mise-a-jour'";
}
elseif(($_GET['dos'] == 'administration-modification') AND ($_GET['sousdos'] == 'traitement'))
{
	require_once('moteur/include/update-administration.php');
	$host  = $_SERVER['HTTP_HOST'];
	$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
	$extra = "gestion/";
	header("Location:  http://$host$uri/$extra");
 
	mysql_close();
	ob_end_flush();
	exit;
}
elseif($_GET['dos'] == 'administration-modification')
{
$req = "SELECT * FROM pages WHERE dossier='administration-modification' AND sous_dossier='vide'";
}
elseif(($_GET['dos'] == 'identification') AND ($_GET['sousdos'] == 'connexion'))
{
require_once("moteur/include/session.php");
}
elseif($_GET['dos'] AND !$_GET['sousdos'])
{
$req = "SELECT * FROM pages WHERE dossier='".$_GET['dos']."' AND sous_dossier='vide'";
}
elseif($_GET['dos'] AND $_GET['sousdos'])
{
$req = "SELECT * FROM pages WHERE dossier='".$_GET['dos']."' AND sous_dossier='".$_GET['sousdos']."'";
}
else
{
}
require_once("moteur/requete.php");
require_once("moteur/generateur_page.php");

mysql_close();
ob_end_flush();
?>


Voilà, merci à toi Heyoan d'avoir essayé de m'aider à résoudre mon problème (encore une fois Smiley lol Smiley biggol )