focntion mail()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : focntion mail()

Re: focntion mail()

par crocodile » 26 nov. 2012, 14:17

Ok, merci pour ton aide,
En fait c'est Dreamweaver qui m'a creer le code comme ça, lors des manipulations,
la seule ligne que j'ai rajouter c'était la ligne mail(), et la page à bien été testée c'est à partir de cette page que j'ai des mail en double et en triples,
Je vais corrigé comme tu me l'as dit,
encore merci.

Re: focntion mail()

par moogli » 25 nov. 2012, 13:40

- ligne 205 il y a une virgule en trop donc ton script ne passe même pas la compilation. tu as fait une modif non testée avant de poster sur le forum ?
- ligne 1 & 2 pourquoi deux ouverture / fermeture de tag php ?
- ligne 20 et 21 tu sélectionne 2 million de tuples pour savoir combien il y en a ? O_o c'est même pas imaginable fait un select count(*) sur cette table si tu veux le nombre total.
- ligne 25 : pourquoi re sélectionner la base ? c'est déjà fait ligne 11
- pourquoi deux mysql_free_result ligne 170 ? et pourquoi dans un span ? (qui lui même est dans un <p> tu attend l'affichage de quelque chose ? une erreur ?)
- ligne 28 cette requête va sélectionner toute la table reponse_visiteur que tu n'utilise pas (effectivement tu prend le premier résultat que tu n'utilise pas et qui est totalement inutile vue que tu ne peux pas prévoir s'il correspond ou non à un critère précis). ensuite tu n'utilise pas cette requête donc a supprimer.
- Pour faire propre les déclarations de fonction sont à faire au début, et mieux dans un autre fichier elle n'on rien a faire la, hors mis rendre le code moins lisible ;)
- ligne 87 encore un select_db à virer,
- ligne 81 et suivante : tu présume de l’existence des indexs dans $_POST ce n'est pas bon il faut vérifier leurs existence avant de les utiliser.
- Pourquoi utiliser sprintf à tout bout champ ? utilise la concaténation
- Quel est le but de la fonction mail au milieu de nul part sur la fin du fichier ? (le span suivant sert a rien d'ailleurs)
- la mise en page avec les tableaux c'est le mal ;) utilise plutôt les css. Vu ton doctype je ne suis pas certain que ton site passe au validateur sans encombre ;)
-$currentPage = $_SERVER["PHP_SELF"]; totalement inutile utilise directement l'info de départ. idem pour editFormAction.

Je te conseil de laisser tomber l'éditeur qui fait tout à ta place et de réfléchir a comment le faire toi même. Ce sera plus simple pour toi car en cas de soucis tu pourras savori où regarde rapidement.
De plus c'est formateur et t'aidera à apprendre php

je corrigerais ton code ainsi (au minimum y a beaucoup plus a faire)
<?php 
require_once('Connections/BD.php');
mysql_select_db($database_BD, $BD); // devrait être dans le fichier précédent ?
$maxRows_demandevisiteur = 1;
$pageNum_demandevisiteur= 0;
if (isset($_GET['pageNum_demandevisiteur'])) {
	$pageNum_demandevisiteur = $_GET['pageNum_demandevisiteur'];
}
$startRow_demandevisiteur = $pageNum_demandevisiteur* $maxRows_demandevisiteur;

$query_demandevisteur = "SELECT * FROM email_visiteur ORDER BY email_num ASC";
$query_limit_demandevisiteur = sprintf("%s LIMIT %d, %d", $query_demandevisiteur, $startRow_demandevisiteur, $maxRows_demandevisiteur);
$demandevisiteur = mysql_query($query_limit_demandevisiteur, $BD) or die(mysql_error());
$row_demandevisiteur = mysql_fetch_assoc($demandevisiteur);
mysql_free_result($demandevisiteur);
if (!empty($_GET['totalRows_demandevisiteur'])) {
	$totalRows_demandevisiteur = $_GET['totalRows_demandevisiteur'];
} else {
	$all_demandevisiteur= mysql_query('select count(*) as nb from email_visteur');
	$data = mysql_fetch_assoc($all_demandevisiteur);
	$totalRows_demandevisiteur = $data['nb'];
	mysql_free_result($all_demandevisiteur);
}
$totalPages_demandevisiteur = ceil($totalRows_demandevisiteur/$maxRows_demandevisiteur)-1;

$queryString_demandevisiteur = "";
if (!empty($_SERVER['QUERY_STRING'])) {
	$params = explode("&", $_SERVER['QUERY_STRING']);
	$newParams = array();
	foreach ($params as $param) {
		if (stristr($param, "pageNum_demandevisiteur") == false &&
				stristr($param, "totalRows_demandevisiteur") == false) {
			array_push($newParams, $param);
		}
	}
	if (count($newParams) != 0) {
		$queryString_demandevisiteur = "&" . htmlentities(implode("&", $newParams));
	}
}
$queryString_demandevisiteur = sprintf("&totalRows_demandevisiteur=%d%s", $totalRows_demandevisiteur, $queryString_demandevisiteur);

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
	$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

	switch ($theType) {
		case "text":
			$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
			break;
		case "long":
		case "int":
			$theValue = ($theValue != "") ? intval($theValue) : "NULL";
			break;
		case "double":
			$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
			break;
		case "date":
			$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
			break;
		case "defined":
			$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
			break;
	}
	return $theValue;
}

if (isset($_SERVER['QUERY_STRING'])) {
	$_SERVER["PHP_SELF"] .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
// il faut vérifier tous les index dans $_POST avant de la utiliser, pour info "MM_insert" est inutile sans valeur spécifique (token de validité)
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "reponse")) {
	$insertSQL = sprintf("INSERT INTO reponse_visiteur (reponse_num, reponse_prenom,reponse_email, reponse_sujet, reponse_reponse) VALUES (%s, %s, %s, %s, %s, %s)",
			GetSQLValueString($_POST['reponse_num'], "int"),
			GetSQLValueString($_POST['reponse_prenom'], "text"),
			GetSQLValueString($_POST['reponse_email'], "text"),
			GetSQLValueString($_POST['reponse_sujet'], "text"),
			GetSQLValueString($_POST['reponse_reponse'], "text"));

	$Result1 = mysql_query($insertSQL, $BD) or die(mysql_error());

	$insertGoTo = "demandevisiteur.php";
	if (isset($_SERVER['QUERY_STRING'])) {
		$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
		$insertGoTo .= $_SERVER['QUERY_STRING'];
	}
	header(sprintf("Location: %s", $insertGoTo));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>R&eacute;ception mail</title>
<style type="text/css">
<!--
.Style1 {
	font-family: Calibri;
	font-weight: bold;
}

.Style2 {
	font-family: Calibri
}
-->
</style>
</head>

<body>
	<p>&nbsp;</p>
	<p align="center" class="Style1">
		<u>Demande de <?php echo $row_demandevisiteur['email_prenom']; ?>
		</u>
	</p>
	<table width="549" border="0" align="center">
		<tr>
			<td width="163"><span class="Style1">N&deg; demande: </span></td>
			<td width="370"><?php echo $row_demandevisiteur['email_num']; ?></td>
		</tr>
		<tr>
			<td><span class="Style1">Civilit&eacute; : </span></td>
			<td><?php echo $row_demandevisiteur['email_civilite']; ?></td>
		</tr>
		<tr>
			<td><span class="Style1">Pr&eacute;nom : </span></td>
			<td><?php echo $row_demandevisiteur['email_prenom']; ?></td>
		</tr>
		<tr>
			<td><span class="Style1">Ville : </span></td>
			<td><?php echo $row_demandevisiteur['email_ville']; ?></td>
		</tr>
		<tr>
			<td><span class="Style1">D&eacute;partement : </span></td>
			<td><?php echo $row_demandevisiteur['email_departement']; ?></td>
		</tr>
		<tr>
			<td><span class="Style1">Adresse mail : </span></td>
			<td><?php echo $row_demandevisiteur['email_email']; ?></td>
		</tr>
		<tr>
			<td><span class="Style1">Question : </span></td>
			<td><?php echo $row_demandevisiteur['email_question']; ?></td>
		</tr>
	</table>
	<p class="Style2">
		<strong>Nbre de demande totale : </strong>
		<?php echo $totalRows_demandevisiteur ?>
	</p>
	<p class="Style2">&nbsp;</p>
	<p class="Style2">
		&nbsp;<a
			href="<?php printf("%s?pageNum_demandevisiteur=%d%s", $_SERVER["PHP_SELF"], 0, $queryString_demandevsiteur); ?>">Premier</a>
		- <a
			href="<?php printf("%s?pageNum_demandevisiteur=%d%s", $_SERVER["PHP_SELF"], max(0, $pageNum_demandevisiteur - 1), $queryString_demandevisiteur); ?>">Précédent</a>
		- <a
			href="<?php printf("%s?pageNum_demandevisiteur=%d%s", $_SERVER["PHP_SELF"], min($totalPages_demandevisiteur, $pageNum_demandevisiteur+ 1), $queryString_demandevisiteur); ?>">Suivant</a>
		- <a
			href="<?php printf("%s?pageNum_demandevisiteur=%d%s", $_SERVER["PHP_SELF"], $totalPages_demandevisiteur, $queryString_demandevisiteur); ?>">Dernier</a>
	</p>
	<p align="center" class="Style1">
		<u>R&eacute;pondre &agrave; <?php echo $row_demandevisiteur['email_prenom']; ?>
		</u>
	</p>
	<p align="center" class="Style1">&nbsp;</p>

	<form method="post" name="reponse"
		action="<?php echo $_SERVER["PHP_SELF"]; ?>">
		<input type="hidden" name="reponse_num" value="" /> <input
			type="hidden" name="reponse_prenom"
			value="<?php echo $row_demandevisiteur['email_prenom']; ?>" /> <input
			type="hidden" name="reponse_email"
			value="<?php echo $row_demandevisiteur['email_email']; ?>" /> <input
			type="hidden" name="reponse_sujet"
			value="Réponse à votre demande d'information" /> <input type="hidden"
			name="MM_insert" value="reponse" />
		<table align="center">
			<tr valign="baseline">
				<td nowrap align="right" valign="top"><span class="Style1">Réponse :
				</span></td>
				<td><textarea name="reponse_reponse" cols="50" rows="5"></textarea>
				</td>
			</tr>
			<tr valign="baseline">
				<td nowrap align="right">&nbsp;</td>
				<td><input type="submit" value="Envoyer la réponse"> <?php
				mail($row_demandevisiteur['email_email'],$row_demandevisiteur['email_sujet'],$row_demandevisiteur['email_reponse']);
				?> <span class="Style1"> </span></td>
			</tr>
		</table>
	</form>
@+

Re: focntion mail()

par crocodile » 24 nov. 2012, 18:47

Bien en fait, concernant le doublons d'adresse mail actuellement ce n'est pas possible dans la mesure que c'est une version test que je fais avant de le mettre en fonction diffinitivement, et l'adresse mail et unique.

Voici le code complet de ma page :
<?php require_once('Connections/BD.php'); ?>
<?php
$currentPage = $_SERVER["PHP_SELF"];

$maxRows_demandevisiteur = 1;
$pageNum_demandevisiteur= 0;
if (isset($_GET['pageNum_demandevisiteur'])) {
  $pageNum_demandevisiteur = $_GET['pageNum_demandevisiteur'];
}
$startRow_demandevisiteur = $pageNum_demandevisiteur* $maxRows_demandevisiteur;

mysql_select_db($database_BD, $BD);
$query_demandevisteur = "SELECT * FROM email_visiteur ORDER BY email_num ASC";
$query_limit_demandevisiteur = sprintf("%s LIMIT %d, %d", $query_demandevisiteur, $startRow_demandevisiteur, $maxRows_demandevisiteur);
$demandevisiteur = mysql_query($query_limit_demandevisiteur, $BD) or die(mysql_error());
$row_demandevisiteur = mysql_fetch_assoc($demandevisiteur);

if (isset($_GET['totalRows_demandevisiteur'])) {
  $totalRows_demandevisiteur = $_GET['totalRows_demandevisiteur'];
} else {
  $all_demandevisiteur= mysql_query($query_demandevisiteur);
  $totalRows_demandevisiteur = mysql_num_rows($all_demandevisiteur);
}
$totalPages_demandevisiteur = ceil($totalRows_demandevisiteur/$maxRows_demandevisiteur)-1;

mysql_select_db($database_BD, $BD);
$query_Reponse = "SELECT * FROM reponse_visiteur";
$Reponse = mysql_query($query_Reponse, $BD) or die(mysql_error());
$row_Reponse = mysql_fetch_assoc($Reponse);
$totalRows_Reponse = mysql_num_rows($Reponse);

$queryString_demandevisiteur = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_demandevisiteur") == false && 
        stristr($param, "totalRows_demandevisiteur") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_demandevisiteur = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_demandevisiteur = sprintf("&totalRows_demandevisiteur=%d%s", $totalRows_demandevisiteur, $queryString_demandevisiteur);

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "reponse")) {
  $insertSQL = sprintf("INSERT INTO reponse_visiteur (reponse_num, reponse_prenom,reponse_email, reponse_sujet, reponse_reponse) VALUES (%s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['reponse_num'], "int"),
                       GetSQLValueString($_POST['reponse_prenom'], "text"),
                       GetSQLValueString($_POST['reponse_email'], "text"),
                       GetSQLValueString($_POST['reponse_sujet'], "text"),
                       GetSQLValueString($_POST['reponse_reponse'], "text"));

  mysql_select_db($database_BD, $BD);
  $Result1 = mysql_query($insertSQL, $BD) or die(mysql_error());

  $insertGoTo = "demandevisiteur.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>R&eacute;ception mail</title>
<style type="text/css">
<!--
.Style1 {
	font-family: Calibri;
	font-weight: bold;
}
.Style2 {font-family: Calibri}
-->
</style>
</head>

<body>
<p>&nbsp;</p>
<p align="center" class="Style1"><u>Demande de <?php echo $row_demandevisiteur['email_prenom']; ?></u></p>
<table width="549" border="0" align="center">
  <tr>
    <td width="163"><span class="Style1">N&deg; demande: </span></td>
    <td width="370"><?php echo $row_demandevisiteur['email_num']; ?></td>
  </tr>
  <tr>
    <td><span class="Style1">Civilit&eacute; : </span></td>
    <td><?php echo $row_demandevisiteur['email_civilite']; ?></td>
  </tr>
  <tr>
    <td><span class="Style1">Pr&eacute;nom : </span></td>
    <td><?php echo $row_demandevisiteur['email_prenom']; ?></td>
  </tr>
  <tr>
    <td><span class="Style1">Ville : </span></td>
    <td><?php echo $row_demandevisiteur['email_ville']; ?></td>
  </tr>
  <tr>
    <td><span class="Style1">D&eacute;partement : </span></td>
    <td><?php echo $row_demandevisiteur['email_departement']; ?></td>
  </tr>
  <tr>
    <td><span class="Style1">Adresse mail : </span></td>
    <td><?php echo $row_demandevisiteur['email_email']; ?></td>
  </tr>
  <tr>
    <td><span class="Style1">Question : </span></td>
    <td><?php echo $row_demandevisiteur['email_question']; ?></td>
  </tr>
</table>
<p class="Style2"><strong>Nbre de demande totale : </strong> <?php echo $totalRows_demandevisiteur ?> </p>
<p class="Style2">&nbsp;</p>
<p class="Style2">&nbsp;<a href="<?php printf("%s?pageNum_demandevisiteur=%d%s", $currentPage, 0, $queryString_demandevsiteur); ?>">Premier</a> - <a href="<?php printf("%s?pageNum_demandevisiteur=%d%s", $currentPage, max(0, $pageNum_demandevisiteur - 1), $queryString_demandevisiteur); ?>">Précédent</a> - <a href="<?php printf("%s?pageNum_demandevisiteur=%d%s", $currentPage, min($totalPages_demandevisiteur, $pageNum_demandevisiteur+ 1), $queryString_demandevisiteur); ?>">Suivant</a> - <a href="<?php printf("%s?pageNum_demandevisiteur=%d%s", $currentPage, $totalPages_demandevisiteur, $queryString_demandevisiteur); ?>">Dernier</a></p>
<p><span class="Style1">
  <?php
mysql_free_result($demandevisiteur);

mysql_free_result($demandevisiteur);
?>
</span></p>
<p align="center" class="Style1">&nbsp;</p>
<p align="center" class="Style1"><u>R&eacute;pondre &agrave; <?php echo $row_demandevisiteur['email_prenom']; ?></u></p>
<p align="center" class="Style1">&nbsp;</p>

<form method="post" name="reponse" action="<?php echo $editFormAction; ?>">
  <input type="hidden" name="reponse_num" value="" />
  <input type="hidden" name="reponse_prenom" value="<?php echo $row_demandevisiteur['email_prenom']; ?>" />
  <input type="hidden" name="reponse_email" value="<?php echo $row_demandevisiteur['email_email']; ?>" />
  <input type="hidden" name="reponse_sujet" value="Réponse à votre demande d'information" />
  <input type="hidden" name="MM_insert" value="reponse" />
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right" valign="top"><span class="Style1">Réponse : </span></td>
      <td><textarea name="reponse_reponse" cols="50" rows="5"></textarea>      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Envoyer la réponse">
        <?php
$mail =$row_demandevisiteur['email_email'];
$sujet =$row_demandevisiteur['email_sujet'];
$reponse =$row_demandevisiteur['email_reponse'];
mail($mail,$sujet,$reponse,);
?>
      <span class="Style1">      </span></td>
    </tr>
  </table>
</form>

Encore merci.

Re: focntion mail()

par moogli » 24 nov. 2012, 13:29

salut,


le code que tu nous montre la n'envoie qu'un seul mail.

si tu montre le reste du code on peux surement plus t'aider.

il n'y a pas beaucoup de possibilités :
- la fonction mail est dans une boucle (while, for etc...)
- Il y a plusieurs fois l'adresse mail du destinataire dans la variable destinataire
- Soit le système de mail de ton hébergeur déconne mais faut pas trop y compter :D


@+

focntion mail()

par crocodile » 24 nov. 2012, 06:15

Bonjour à tous,
J'ai un site, avec base de donnée (mysql), j'ai crée à l'aide de Dreamweaver, un formulaire sur lequel les visiteurs peuvent me demander des informations, sauf que moi au lieu de passer directement par une adrese mail, j'ai envoyé le formulaire directement sur ma base de donnée. De l'autre côté j'ai créé une page dans l'administration qui me récupère l'information envoyé par le visiteur sur ma base.
Suite à cela j'ai crée une deuxième table dans ma base de donnée, appelé réponse, sur laquelle j'envoi ma réponse au visiteur, à l'aide de Dreamweaver j'ai fait une récupération des dinformation de la table demande d'information (prenom, nom, adresse mail) sur la table réponse afin que les informations soient automatiquement recopier, et donc dans mon formulaire de réponse j'ai masqué tous les champs comportant les données, j'ai juste donc a l'écran le champs 'réponse'.
jusque-là tous fonctionne bien.
A partir de la sa commence a se compliqué car j'ai crée ma fonction mail() comme :
 
$destinataire = $row_demandevisteur['visiteur_email'];
$reponse =$row_reponse['reponse_visiteur'];
mail($destinataire,"Réponse à votre demande",$reponse);
Il n'y a pas d'adresse d'expéditeur, ce qui est normal car mon hébergeur dès l'envoi du mail, me fournit une adresse de type : '[email protected], ce qui moi m'arrange car les personnes ne peuvent pas me répondre directement par mail, et sa m'évite, que m'on adresse soit visible et bourré de spam.

Donc la réponse que j'envoi, arrive bien à destination, mais à partir de là PROBLEME, c'est que la personne à qui j'envoi le mail reçois le même e-mail en plusieurs fois.
Donc je souhaiterais savoir comment je pourrais faire afin que mes mails s'envoient mais en un seul exemple. C'est le seul soucis que j'ai.

Je vous en remercie d'avance pour votre aide.