View Full Version: [FR] Modification d'un script (validation.php)

MPAM Rebooted Forums > Software support (freewares, PHP...) > [FR] Modification d'un script (validation.php)


Title: [FR] Modification d'un script (validation.php)
Description: Une p'tite question toute simple


frabern - March 25, 2005 01:21 AM (GMT)
Bonjour redfo1


J'ai modifié (quelques heures ouf !) le script validation.php et la base de donnée :

pour l'application suivante:

Les usagers de mon site s'en servent pour proposer des anniversaires.

Le script fonctionne, la seule chose qui m'agace c'est que le script m'envoie deux emails de confirmation à chaque fois.

quelles modifications à apporter pour régler ca ?

Question simple n'est-ce pas ? mais pas moi qui suis débutant en php.

Merci à l'avance

J'aimerais bien utiliser ce script pur le week-end.

voici le code


CODE

<table summary="">
<tr><td bgcolor="#FFECC8">   <h1><b>Formulaire pour l'ajout d'un anniversaire</b><h1>
<h5>
<font color="#cc6600">
<li>En plus de votre anniversaire, vous pouvez en ajouter 2 autres (ex: un ami,un parent)</li >
<li>Vous avez 3 jours pour valider cet ou ces anniversaire(s)</li >
<li>Tous les champs sont obligatoires</li >
<li>Bien vérifier votre adresse email car un message <br>vous sera envoyé pour confirmer l'ajout de cet anniversaire </br>  </li >
<li>S.v.p. compléter ce formulaire (sans utiliser le signe \')</li ><br>
</font>
</td></tr>
</table>

<?php

$serveur="****************"; // Racine du serveur
$validité=3600*24*3;   // Durée de validité du code de confirmation en secondes (3600 secondes par heure, 24 h par jour, donc là ça fait 7 j lol)
$db_host="localhost";   // Paramètres de la DB
$db_user="***************";
$db_pass="******";
$database="*******";

//************ Fin des paramètres


if (isset($_POST["email"]))  // Si le formulaire a été rempli (sans '), on le traite...
{
mysql_connect($db_host,$db_user,$db_pass) or die("Unable to connect to database");
mysql_select_db($database) or die("Unable to select database");
$page=$serveur.$_SERVER["PHP_SELF"];
$nom=$_POST["nom"];
$mois=$_POST["mois"];
$jour=$_POST["jour"];
$ville=$_POST["ville"];
$email=$_POST["email"];
$IP=$_SERVER['REMOTE_ADDR'];
$heure=time();

do     // Le code doit être unique... mais on doit pas en parler à l'utilisateur;)
{
$session=md5(time());
$resultat = mysql_query("SELECT * FROM anniver_temp WHERE session ='$session'");
}
while(false!=($ligne = mysql_fetch_array ($resultat)));
if($nom=="" || $mois=="" || $jour=="" || $ville=="" || $email==""){show_error('Erreur... Un ou plusieurs champs sont vides.');show_form($nom,$mois,$jour,$ville,$email);die();}  // Merci de tout remplir monsieur :)
if(!(!strrpos($_POST["nom"], "'") && !strrpos($_POST["pass"], "'") && !strrpos($_POST["email"], "'"))){show_error('Vous utiliser un caractère non toléré.');show_form($nom,$mois,$jour,$ville,$email);die();} // Pas de SQL insertion SVP
if(!ereg ("^[^@ ]+@[^@ ]+\.[^@ \.]+$", $email)){show_error('email invalide.');show_form($nom,$mois,$jour,$ville,$email);die();}  // Merci de tout remplir monsieur :)

$resultat = mysql_query("SELECT * FROM anniver WHERE email ='$email'");
$res = mysql_numrows($resultat);
if ($res >="3") {show_error('Désolé vous ne pouvez proposer plus de 3 anniversaires.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si depassé maximu

//$resultat = mysql_query("SELECT * FROM members WHERE email ='$email'");
//if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('This username ('.$email.') is already taken.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (confirmé)

//$resultat = mysql_query("SELECT * FROM members WHERE '$nom' && email='$email'");
//if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('ce nom  ('.$nom.') a déjà été entré par cet email ('.$email.').');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (confirmé)
//$resultat = mysql_query("SELECT * FROM membres WHERE nom ='$nom'&& email='$email'");
//if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('This username ('.$nom.') is already taken.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (en attente)

// verifie sur le nom ainsi que le même mois et jour ne sont pas déjà dans la base

$resultat = mysql_query("SELECT * FROM anniver WHERE nom ='$nom' && mois='$mois' && jour='$jour'");
if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('Erreur...  Le nom  ('.$nom.') avec les mêmes coordonnées mois & jour est déjà présent dans notre base.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (confirmé)
$resultat = mysql_query("SELECT * FROM anniver_temp WHERE nom ='$nom'&& email='$email'");
if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('Le nom  ('.$nom.') avec les mêmes coordonnées mois/jour a déjà été entré par cet email ('.$email.').');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (confirmé)


$resultat = mysql_query("SELECT * FROM anniver_black WHERE email ='$email'");
if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('Cet e-mail ('.$email.') est protégé contre le spam dans une base protégée. Vous ne pouvez l\'utiliser.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si l'e-mail est dans la blacklist


//********* L'e-mail qu'on va envoyer (je vous conseille de le modifier parce que là avec tous les "registration" et "sign up" qu'il contient, il ne passe pas les filtres anti-spam...) :
/* subject */
$subject = "Confirmer vos coordonnées anniversaire";

/* message */
$message = '
<html>
<head>
<title></title>
</head>
<body>


Bonjour '.$email.',<br/><br/>

Vous recevez cet email car vous ou une autre personne utilisant votre adresse email a manifesté l\'intention d\'ajouter un anniversaire sur notre site.<br/>
S.v.p confirmez votre ajout d\'anniversaire en cliquant <a href="'.$page.'?code='.$session.'">ici</a>.<br/><br/>

Ignorez ce message si cela n\'est pas votre intention  <br/>
Si vous ne voulez plus être deranger par ce genre de message cliquez  <a href="'.$page.'?code='.$session.'&BL=1">ici</a>.<br/>
'.$IP.'.<br/><br/>

Bien à vous,<br/>
Marsoui-actualite.com
</body>
</html>
';

/* To send HTML mail, you can set the Content-type header. */
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: html; charset=iso-8859-1\r\n";

$headers .= "To: ".$nom." <".$email.">\r\n";
$headers .= "From: <webmaster@marsoui-actualite.com>\r\n";

/* and now mail it */
if(mail($email, $subject, $message, $headers))
{
$query = "INSERT INTO anniver_temp VALUES('','$nom','$mois','$jour','$ville','$email','$heure','$session','$IP','".date("Y-m-d")."','".date("H:i:s")."')";  // On met les données dans la table d'attente
mysql_query($query);
mysql_close();

echo 'Merci.<br/>Un émail vous a été envoyé à '.$email.'. S.v.p vérifier et confirmer l\'ajout de cet anniversaire avant 3 jours.';
}
else {show_error('Nous sommes incapables d\'envoyer votre confirmation.  S.v.p. contactez le Webmaster.');show_form($prenom,$nom,$mois,$jour,$ville,$email);}
}

else if(isset($_GET["code"]))     // Si un code est entré
{
mysql_connect($db_host,$db_user,$db_pass) or die("Unable to connect to database");
@mysql_select_db($database) or die("Unable to select database");

$heure=time();
$heure2=$heure-$validité;     // On supprime les codes périmés
mysql_query("DELETE FROM anniver_temp WHERE heure<$heure2");

$session=$_GET["code"];
$sql = "SELECT * FROM anniver_temp WHERE session ='$session'";
$resultat = mysql_query($sql);

if(false==($ligne = mysql_fetch_array ($resultat))){mysql_close();die('Ce code est faux ou a expiré, S.V.P. remplir le formulaire de nouveau <a href="'.$_SERVER["PHP_SELF"].'">here</a>.');}

if(!isset($_GET["BL"]))      // Si l'utilisateur vient vraiment pour confirmer, on le mets dans la table des membres enregistrés et on l'enlève de la table d'attente
{
$nom=$ligne['nom'];
$query = "INSERT INTO anniver VALUES('','".$ligne['nom']."','".$ligne['mois']."','".$ligne['jour']."','".$ligne['ville']."','".$ligne['email']."','".$ligne['IP']."','".$ligne['date']."','".$ligne['heure2']."')";
mysql_query($query);
mysql_query("DELETE FROM anniver_temp WHERE session='$session'");

echo 'Merci de votre confirmation d\'ajout d\'anniversaire '.$nom.'. L\'anniversaire est maintenant ajouté.';
}

else if($_GET["BL"]==1)      // Si l'utilisateur vient pour être dans la liste noire, on demande confirmation
{
echo 'Click <a href="'.$_SERVER["PHP_SELF"].'?code='.$_GET["code"].'&BL=2">ici</a> Pour confirmer le dépôt de votre email dans la base protégée. Celle-ci ne pourra être réactiver pour proposer des anniversaires.';
}

else        // Si l'utilisateur a confirmé qu'il veut être dans la liste noire, on l'y met et on l'enlève de la table d'attente
{
$email=$ligne['email'];
$query = "INSERT INTO anniver_black VALUES('','$email','".$ligne['IP']."','".$ligne['date']."','".$ligne['heure2']."')";
mysql_query($query);
mysql_query("DELETE FROM anniver_temp WHERE session='$session'");

echo 'Votre e-mail '.$email.' a été mise dans une base protégée. Vous n\'aurez plus d\'emails de nous concernant les anniversaire.';
}

mysql_close();
}



else{show_form();}  // S'il n'y a ni formulaire rempli, ni code, on affiche le formulaire

//************ Quelques fonctions
function show_form($nom="",$mois="",$jour="",$ville="",$email="")
{
echo '<br/>
<form action="'.$_SERVER["PHP_SELF"].'" method="post">
<table>
<tr>
<td>Nom de la personne&nbsp;:</td><td><input type="text" name="nom" size="30" maxlength="30" value="'.$nom.'" /></td>
</tr>
<tr>
<td>mois de l\'anniversaire&nbsp;:</td>
<td> <select name="mois">
<option value="1">Janvier</option>
<option value="2">Février</option>
<option value="3">Mars</option><option value="41">Avril</option><option value="5">Mai</option>
<option value="6">Juin</option><option value="7">Juillet</option><option value="8">Août</option>
<option value="9">Septembre</option><option value="10">Octobre</option><option value="11">Novembre</option><option value="12">Décembre</option>
</select>
</td>
</tr>

<tr>
<td>jour de l\'anniversaire&nbsp;:</td>
<td> <select name="jour">
<option >1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option><option>20</option><option>21</option><option>22</option><option>23</option><option>24</option><option>25</option><option>26</option><option>27</option><option>28</option><option>29</option><option>30</option><option>31</option>
</select>
</td>
</tr>
<tr>
<td>Ville/Pays&nbsp;:</td><td><input type="text" name="ville" size="30" maxlength="30" value="'.$ville.'" /></td>
</tr>
<tr>
<td>E-mail&nbsp;:</td><td><input type="text" name="email" size="50" maxlength="100" value="'.$email.'" /></td>
</tr>
</table>

<input type="submit" value=" Valider " />
</form>';
}

function show_error($text)
{
echo '<div style="color:#ff0000;font-weight:bold;">'.$text.'<br/></div>';
}
?>

<FORM>
<INPUT TYPE="button" value= " Cliquez ici pour fermer cette fenêtre lorsque terminé " onClick="self.close()">
</FORM>
)

redfo1 - March 25, 2005 06:57 AM (GMT)
Bonjour,

Je vais commencer par le plus facile : tu n'a pas pris la dernière mise à jour, or la version que tu utilises contient une faille de sécurité. Enfin, ce n'est pas un gros problème.
QUOTE
Question simple n'est-ce pas ?

Pas tant que ça... En relisant ta source, je ne comprends pas pourquoi il envoie 2 e-mails... Je n'ai pas le temps ce matin, alors cet après-midi je l'essayerai sur mon serveur pour voir ce que ça donne et essayer de trouver la cause.

@+

redfo1 - March 25, 2005 12:55 PM (GMT)
Re,

J'ai utilisé le script sur mon serveur, et il ne m'envoie qu'un seul e-mail... bizarre... là je ne comprends pas.
Est-ce que tu pourrais exporter les tables SQL (dans phpMyAdmin, onglet "Export" en haut à côté de "SQL" et "Search") et les poster ici ? (comme ça je pourrai faire tourner le script dans exactement les même conditions que toi)

@+

frabern - March 25, 2005 02:49 PM (GMT)
Bonjour, merci de ta réponse rapide à mon post:

Tel que tu me l'a demandé voici un dump de mes tables:




-- phpMyAdmin SQL Dump
-- version 2.6.0-pl2
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Vendredi 25 Mars 2005 à 09:40
-- Version du serveur: 4.0.21
-- Version de PHP: 4.3.9
--
-- Base de données: `********`
--

-- --------------------------------------------------------

--
-- Structure de la table `anniver`
--

CREATE TABLE `anniver` (
`id` int(6) NOT NULL auto_increment,
`nom` varchar(30) NOT NULL default '',
`mois` char(2) NOT NULL default '0',
`jour` char(2) NOT NULL default '',
`Ville` varchar(30) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
`IP` varchar(15) NOT NULL default '',
`date` date NOT NULL default '0000-00-00',
`heure` time NOT NULL default '00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
KEY `id_2` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=41 ;

--
-- Contenu de la table `anniver`
--

INSERT INTO `anniver` VALUES (39, 'Francis Simon Bernatchez', '3', '25', 'Marsoui/Canada', 'francisbernatchez@hotmail.com', '142.169.28.201', '2005-03-24', '21:34:54');

-- --------------------------------------------------------

--
-- Structure de la table `anniver_black`
--

CREATE TABLE `anniver_black` (
`id` int(6) NOT NULL auto_increment,
`email` varchar(100) NOT NULL default '',
`IP` varchar(15) NOT NULL default '',
`date` date NOT NULL default '0000-00-00',
`heure` time NOT NULL default '00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
KEY `id_2` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

--
-- Contenu de la table `anniver_black`
--


-- --------------------------------------------------------

--
-- Structure de la table `anniver_temp`
--

CREATE TABLE `anniver_temp` (
`id` int(6) NOT NULL auto_increment,
`nom` varchar(30) NOT NULL default '',
`mois` char(2) NOT NULL default '0',
`jour` char(2) NOT NULL default '',
`ville` varchar(30) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
`heure` int(11) NOT NULL default '0',
`session` text NOT NULL,
`IP` varchar(15) NOT NULL default '',
`date` date NOT NULL default '0000-00-00',
`heure2` time NOT NULL default '00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
KEY `id_2` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=42 ;

--
-- Contenu de la table `anniver_temp`
--


redfo1 - March 25, 2005 02:56 PM (GMT)
re,

je l'ai fait tourner avec ces tables, et il ne m'envoie toujours qu'un seul e-mail... tu peux le vérifier ici : http://81.65.63.8:8080/modif.php
Le problème vient peut-être d'une mauvaise configuration du serveur (?)

voici la source que j'ai utilisée (j'ai juste modifié le paramètre From dans l'email, je ne pense pas que ça vienne de là quand même...) :

CODE
<table summary="">
<tr><td bgcolor="#FFECC8">   <h1><b>Formulaire pour l'ajout d'un anniversaire</b><h1>
<h5>
<font color="#cc6600">
<li>En plus de votre anniversaire, vous pouvez en ajouter 2 autres (ex: un ami,un parent)</li >
<li>Vous avez 3 jours pour valider cet ou ces anniversaire(s)</li >
<li>Tous les champs sont obligatoires</li >
<li>Bien vérifier votre adresse email car un message <br>vous sera envoyé pour confirmer l'ajout de cet anniversaire </br>  </li >
<li>S.v.p. compléter ce formulaire (sans utiliser le signe \')</li ><br>
</font>
</td></tr>
</table>

<?php

$serveur="****************"; // Racine du serveur
$validité=3600*24*3;   // Durée de validité du code de confirmation en secondes (3600 secondes par heure, 24 h par jour, donc là ça fait 7 j lol)
$db_host="localhost";   // Paramètres de la DB
$db_user="*";
$db_pass="*";
$database="*";

//************ Fin des paramètres


if (isset($_POST["email"]))  // Si le formulaire a été rempli (sans '), on le traite...
{
mysql_connect($db_host,$db_user,$db_pass) or die("Unable to connect to database");
mysql_select_db($database) or die("Unable to select database");
$page=$serveur.$_SERVER["PHP_SELF"];
$nom=$_POST["nom"];
$mois=$_POST["mois"];
$jour=$_POST["jour"];
$ville=$_POST["ville"];
$email=$_POST["email"];
$IP=$_SERVER['REMOTE_ADDR'];
$heure=time();

do     // Le code doit être unique... mais on doit pas en parler à l'utilisateur;)
{
$session=md5(time());
$resultat = mysql_query("SELECT * FROM anniver_temp WHERE session ='$session'");
}
while(false!=($ligne = mysql_fetch_array ($resultat)));
if($nom=="" || $mois=="" || $jour=="" || $ville=="" || $email==""){show_error('Erreur... Un ou plusieurs champs sont vides.');show_form($nom,$mois,$jour,$ville,$email);die();}  // Merci de tout remplir monsieur :)
if(!(!strrpos($_POST["nom"], "'") && !strrpos($_POST["pass"], "'") && !strrpos($_POST["email"], "'"))){show_error('Vous utiliser un caractère non toléré.');show_form($nom,$mois,$jour,$ville,$email);die();} // Pas de SQL insertion SVP
if(!ereg ("^[^@ ]+@[^@ ]+\.[^@ \.]+$", $email)){show_error('email invalide.');show_form($nom,$mois,$jour,$ville,$email);die();}  // Merci de tout remplir monsieur :)

$resultat = mysql_query("SELECT * FROM anniver WHERE email ='$email'");
$res = mysql_numrows($resultat);
if ($res >="3") {show_error('Désolé vous ne pouvez proposer plus de 3 anniversaires.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si depassé maximu

//$resultat = mysql_query("SELECT * FROM members WHERE email ='$email'");
//if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('This username ('.$email.') is already taken.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (confirmé)

//$resultat = mysql_query("SELECT * FROM members WHERE '$nom' && email='$email'");
//if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('ce nom  ('.$nom.') a déjà été entré par cet email ('.$email.').');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (confirmé)
//$resultat = mysql_query("SELECT * FROM membres WHERE nom ='$nom'&& email='$email'");
//if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('This username ('.$nom.') is already taken.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (en attente)

// verifie sur le nom ainsi que le même mois et jour ne sont pas déjà dans la base

$resultat = mysql_query("SELECT * FROM anniver WHERE nom ='$nom' && mois='$mois' && jour='$jour'");
if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('Erreur...  Le nom  ('.$nom.') avec les mêmes coordonnées mois & jour est déjà présent dans notre base.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (confirmé)
$resultat = mysql_query("SELECT * FROM anniver_temp WHERE nom ='$nom'&& email='$email'");
if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('Le nom  ('.$nom.') avec les mêmes coordonnées mois/jour a déjà été entré par cet email ('.$email.').');show_form($nom,$mois,$jour,$ville,$email);die();} // Si le login est déjà pris (confirmé)


$resultat = mysql_query("SELECT * FROM anniver_black WHERE email ='$email'");
if(false!=($ligne = mysql_fetch_array ($resultat))){show_error('Cet e-mail ('.$email.') est protégé contre le spam dans une base protégée. Vous ne pouvez l\'utiliser.');show_form($nom,$mois,$jour,$ville,$email);die();} // Si l'e-mail est dans la blacklist


//********* L'e-mail qu'on va envoyer (je vous conseille de le modifier parce que là avec tous les "registration" et "sign up" qu'il contient, il ne passe pas les filtres anti-spam...) :
/* subject */
$subject = "Confirmer vos coordonnées anniversaire";

/* message */
$message = '
<html>
<head>
<title></title>
</head>
<body>


Bonjour '.$email.',<br/><br/>

Vous recevez cet email car vous ou une autre personne utilisant votre adresse email a manifesté l\'intention d\'ajouter un anniversaire sur notre site.<br/>
S.v.p confirmez votre ajout d\'anniversaire en cliquant <a href="'.$page.'?code='.$session.'">ici</a>.<br/><br/>

Ignorez ce message si cela n\'est pas votre intention  <br/>
Si vous ne voulez plus être deranger par ce genre de message cliquez  <a href="'.$page.'?code='.$session.'&BL=1">ici</a>.<br/>
'.$IP.'.<br/><br/>

Bien à vous,<br/>
Marsoui-actualite.com
</body>
</html>
';

/* To send HTML mail, you can set the Content-type header. */
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: html; charset=iso-8859-1\r\n";

$headers .= "To: ".$nom." <".$email.">\r\n";
$headers .= "From: Site <webmaster@marsoui-actualite.com>\r\n";

/* and now mail it */
if(mail($email, $subject, $message, $headers))
{
$query = "INSERT INTO anniver_temp VALUES('','$nom','$mois','$jour','$ville','$email','$heure','$session','$IP','".date("Y-m-d")."','".date("H:i:s")."')";  // On met les données dans la table d'attente
mysql_query($query);
mysql_close();

echo 'Merci.<br/>Un émail vous a été envoyé à '.$email.'. S.v.p vérifier et confirmer l\'ajout de cet anniversaire avant 3 jours.';
}
else {show_error('Nous sommes incapables d\'envoyer votre confirmation.  S.v.p. contactez le Webmaster.');show_form($prenom,$nom,$mois,$jour,$ville,$email);}
}

else if(isset($_GET["code"]))     // Si un code est entré
{
mysql_connect($db_host,$db_user,$db_pass) or die("Unable to connect to database");
@mysql_select_db($database) or die("Unable to select database");

$heure=time();
$heure2=$heure-$validité;     // On supprime les codes périmés
mysql_query("DELETE FROM anniver_temp WHERE heure<$heure2");

$session=$_GET["code"];
$sql = "SELECT * FROM anniver_temp WHERE session ='$session'";
$resultat = mysql_query($sql);

if(false==($ligne = mysql_fetch_array ($resultat))){mysql_close();die('Ce code est faux ou a expiré, S.V.P. remplir le formulaire de nouveau <a href="'.$_SERVER["PHP_SELF"].'">here</a>.');}

if(!isset($_GET["BL"]))      // Si l'utilisateur vient vraiment pour confirmer, on le mets dans la table des membres enregistrés et on l'enlève de la table d'attente
{
$nom=$ligne['nom'];
$query = "INSERT INTO anniver VALUES('','".$ligne['nom']."','".$ligne['mois']."','".$ligne['jour']."','".$ligne['ville']."','".$ligne['email']."','".$ligne['IP']."','".$ligne['date']."','".$ligne['heure2']."')";
mysql_query($query);
mysql_query("DELETE FROM anniver_temp WHERE session='$session'");

echo 'Merci de votre confirmation d\'ajout d\'anniversaire '.$nom.'. L\'anniversaire est maintenant ajouté.';
}

else if($_GET["BL"]==1)      // Si l'utilisateur vient pour être dans la liste noire, on demande confirmation
{
echo 'Click <a href="'.$_SERVER["PHP_SELF"].'?code='.$_GET["code"].'&BL=2">ici</a> Pour confirmer le dépôt de votre email dans la base protégée. Celle-ci ne pourra être réactiver pour proposer des anniversaires.';
}

else        // Si l'utilisateur a confirmé qu'il veut être dans la liste noire, on l'y met et on l'enlève de la table d'attente
{
$email=$ligne['email'];
$query = "INSERT INTO anniver_black VALUES('','$email','".$ligne['IP']."','".$ligne['date']."','".$ligne['heure2']."')";
mysql_query($query);
mysql_query("DELETE FROM anniver_temp WHERE session='$session'");

echo 'Votre e-mail '.$email.' a été mise dans une base protégée. Vous n\'aurez plus d\'emails de nous concernant les anniversaire.';
}

mysql_close();
}



else{show_form();}  // S'il n'y a ni formulaire rempli, ni code, on affiche le formulaire

//************ Quelques fonctions
function show_form($nom="",$mois="",$jour="",$ville="",$email="")
{
echo '<br/>
<form action="'.$_SERVER["PHP_SELF"].'" method="post">
<table>
<tr>
<td>Nom de la personne&nbsp;:</td><td><input type="text" name="nom" size="30" maxlength="30" value="'.$nom.'" /></td>
</tr>
<tr>
<td>mois de l\'anniversaire&nbsp;:</td>
<td> <select name="mois">
<option value="1">Janvier</option>
<option value="2">Février</option>
<option value="3">Mars</option><option value="41">Avril</option><option value="5">Mai</option>
<option value="6">Juin</option><option value="7">Juillet</option><option value="8">Août</option>
<option value="9">Septembre</option><option value="10">Octobre</option><option value="11">Novembre</option><option value="12">Décembre</option>
</select>
</td>
</tr>

<tr>
<td>jour de l\'anniversaire&nbsp;:</td>
<td> <select name="jour">
<option >1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option><option>20</option><option>21</option><option>22</option><option>23</option><option>24</option><option>25</option><option>26</option><option>27</option><option>28</option><option>29</option><option>30</option><option>31</option>
</select>
</td>
</tr>
<tr>
<td>Ville/Pays&nbsp;:</td><td><input type="text" name="ville" size="30" maxlength="30" value="'.$ville.'" /></td>
</tr>
<tr>
<td>E-mail&nbsp;:</td><td><input type="text" name="email" size="50" maxlength="100" value="'.$email.'" /></td>
</tr>
</table>

<input type="submit" value=" Valider " />
</form>';
}

function show_error($text)
{
echo '<div style="color:#ff0000;font-weight:bold;">'.$text.'<br/></div>';
}
?>

<FORM>
<INPUT TYPE="button" value= " Cliquez ici pour fermer cette fenêtre lorsque terminé " onClick="self.close()">
</FORM>

frabern - March 26, 2005 02:25 AM (GMT)
Bonjour redfo1


J'ai fait un essai avec le script validation.php sans modifications sur celui-ci ainsi qu'avec les tables d'origines. Je recois quand même 2 emails.

Donc c'est probablement un problème de serveur.

j'ai une redirection d'email sur mon serveur c'est peut-être ça la cause.

Je continue a chercher.. un jour.....


Salûtations,

frabern


redfo1 - March 26, 2005 07:09 AM (GMT)
Salut,

Effectivement, ça doit être dû au serveur alors, d'autant plus que recevoir 2 e-mails n'était jamais arrivé à quelqu'un d'autre.
Difficile de dire si c'est dû à la redirection d'e-mail (je ne connais pas tellement), mais si c'est juste une redirection des e-mails entrants, je ne pense pas que ça vienne de là, sauf si tu as utilisé cette redirection pour recevoir l'e-mail de confirmation.
Tu pourrais aussi demander à l'admin du serveur, il aura peut-être une idée.

@+, bon courage

frabern - March 31, 2005 03:54 PM (GMT)
Bonjour,

Je n'ai pas encore résolu le problème de réception de 2 emails de confirmation.

J'ai fait des tests:


Sur hotmail.com je recois 2 emails je réponds au premier, tout fonctionne bien, la base est mise-à-jour.
Le deuxième, le code est expiré.. c'est normal...


Sur Outlook express (FAI : Globetrotter.net)

Le premier message est une page blanche avec une pièce jointe que je peux ouvrir

Le deuxième message est ce qui suit:

QUOTE
Content-type: html; charset=iso-8859-1

To: florent4 bernatchez <frabern@globetrotter.net>
From: <webmaster@marsoui-actualite.com>
X-NAI-Spam-Score: -4.0
X-NAI-Spam-Rules: 1 Rules triggered
BAYES_00=-4


Bonjour frabern@globetrotter.net,<br/><br/>

Vous recevez cet email car vous ou une autre personne utilisant votre adresse email a manifesté l'intention d'ajouter un anniversaire sur notre site.<br/>
S.v.p confirmez votre ajout d'anniversaire en cliquant <a href="http://marsoui-actualite.com/anniver_ajout.php?code=45cb83974b630c21adf76cb415e70b9d">ici</a>.<br/><br/>

Ignorez ce message si cela n'est pas votre intention  <br/>
Si vous ne voulez plus être deranger par ce genre de message cliquez  <a href="http://marsoui-actualite.com/anniver_ajout.php?code=45cb83974b630c21adf76cb415e70b9d&BL=1">ici</a>.<br/>
142.169.28.201.<br/><br/>

Bien à vous,<br/>
Marsoui-actualite.com




Que dois-je modifier dans le script Pour respecter les règles antispam ?


Merci à l'avance de votre soutient


redfo1 - April 1, 2005 05:57 PM (GMT)
Re,

Je me suis inscrit sur http://www.marsoui-actualite.com/anniver_ajout.php... et je n'ai reçu qu'un seul e-mail ?! (j'utilise Gmail)
Par contre, d'après l'e-mail que j'ai reçu, je me demande si ton serveur n'a pas des problèmes pour envoyer les e-mails au format HTML.
Pour ce qui est des règles anti spam, malheureusement je ne vois pas grand chose à faire : il faut réussir en empêcher l'envoi de 2 e-mails. Mais tu pourrais aussi prevenir sur la page d'inscription que suite à un bug, l'usager risque de recevoir 2 e-mails d'inscription.

@+

redfo1 - April 2, 2005 06:18 AM (GMT)
Re,

Bon en fait j'aurais dû y penser plus tôt : je viens de tester avec hotmail, et je reçois 2 e-mails identiques. Avec Gmail, toujours un seul (dsl je crée bp de comptes dans ta base de données). Avec le script sur mon serveur, je ne reçois qu'un e-mail, mais qui est aussi classé comme spam par hotmail. Donc :
- pour que l'e-mail ne soit pas classé comme spam, il faut changer son contenu, je ne sais pas comment il faut le modifier exactement, mais je crois que des mots tel que inscription, et surtout cliquer sont à éviter. De nombreux sites disent à leurs nouveaux inscrits utilisateurs de hotmail d'ajouter l'e-mail d'où provient la confirmation à leur "safelist".
- ton serveur a un problème avec l'envoi d'e-mails puisqu'il n'est au moins pas capable d'envoyer un e-mail au format HTML. Est-ce dû à une trop vieille version de PHP, d'Apache ? Je ne sais pas mais le problème ne vient pas du script, qui tourne très bien sur mon serveur. Je pense qu'il faudrait signaler ces problèmes à l'admin pour qu'il fasse les mise à jour ou les paramétrages nécessaires.

@+

frabern - April 5, 2005 04:19 PM (GMT)
J'ai communiqué chez mon hébergeur, un technicien m'a dit que le script semblait bon mais ne passait les flitres antispam. Il m'a conseillé de downloader une class "mime mail ". Ca m'a pas aider grandement.

Je cherche encore le moyen de modifier le script pour le rendre conforme à ces normes. Car, au risque de me répéter, le script convient parfaitement à mon application.


si tu trouves une solution tu me fais part

merci

redfo1 - April 6, 2005 06:08 AM (GMT)
Bonjour,

j'ai trouvé cette class mime mail, http://www.phpguru.org/static/mime.mail.html , qui a l'air connue. Je ne vois pas trop comment ça pourrait aider à passer les filters anti-spam mais bon, tu peux toujours l'essayer. Par contre je n'ai pas eu le temps de regarder comment ça marche, mais vu qu'il y a plein d'exemples, ça doit pas être trop dur.

@+




Hosted for free by InvisionFree