recherche doublon avant insert into

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 : recherche doublon avant insert into

par web_cap » 11 janv. 2008, 19:26

bonjour a tous,

bon, mon probleme persiste et malgres mes recherches et mes test, ca fonctionne pas comme je veux

J'ai teste sans les insert into, et ca marche
c'est a dire que les message affiches sont corrects

Par contre, avec les insert into, le message est pas bon

:cry:

Merci a toute personne ayant une idées pour m'eclairer

par web_cap » 07 janv. 2008, 14:36

merci de ta reponse

j'ai change la requete mais j'ai le meme resultat
c'est pas le bon message qui s'affiche

j'ai toujours la variable $res=1 avant le if et $res=2 apres pourtant les insert into sont bien executees |*()

pour le mail.php j'initialise pas la variable $res voici le code:
<?php
$expediteur   = "[email protected]";
$reponse      = $expediteur;
$codehtml=
"<html><body background='http://www.toto.fr/images/image3.gif'  topmargin='0' leftmargin='0' rightmargin='0' bottommargin='0' marginwidth='0' marginheight='0'>" .
"<div align='center'>".
"<table border='0' width='80%'>".
"<tr>".
"<td colspan='3' valign='top' height='1'>".
"<img border='0' src='http://www.toto.fr/images/image.gif' width='239' height='133'>".
"<br />".
"<br />".
"</td>".
"</tr>".
"<tr>".
"<td width='20%'>&nbsp</td>".
"<td width='43%' rowspan='2'>".
"<p align='justify'>".
"Bonjour Mme, Mr <b> $prenom $nom</b>,\n nous allons vous faire parvenir le(s) catalogue(s) :".
"<br />".
"<ul>".
"<li> catalogue piscine modulaire</li>".
"<li> catalogue piscine monocoque</li>".
"<li> catalogue abri de piscine</li>".
"</ul>".
"<br />".
"que vous avez choisi(s) ".
"<br />".
"<br />".
"à l'adresse suivante :".
"<br />".
"<br />".
"<b> $prenom $nom</b>".
"<br />".
"<b>$adresse</b>".
"<br />".
"<b>$cp $ville</b>".
"<br />".
"</td>".
"<td width='20%'>&nbsp;</td>".
"</tr>".
"<tr>".
"<td width='14%'>&nbsp;</td>".
"<td width='20%'>&nbsp;</td>".
"</tr>".
"<tr>".
"<td width='14%'>&nbsp;</td>".
"<td width='43%'>&nbsp;</td>".
"<td width='20%'>&nbsp;</td>".
"</tr>".
"</table></div>".
"</body></html>";
mail($mail,
     "Confirmation de votre demande de catalogues",
     $codehtml,
     "From: $expediteur\r\nReply-To: $reponse\r\nContent-Type: text/html; charset=\"iso-8859-1\"\r\n");
?>
je vois pas du tout :cry:

par steph29 » 07 janv. 2008, 13:40

deja la premiere requete je la ferais de ce type:
$sql = "SELECT id FROM $table WHERE nom='$nom' and prenom='$prenom' and cp='$cp' and ville='$ville' LIMIT 1";

on cherche si il y'en a au moins un, ca va plus vite... et pas la peine d'embeter mysql avec le distinct..

sinon dans ton include mail.php tu ne ressette pas $res par hasard?

par web_cap » 07 janv. 2008, 13:28

bonjour et merci de ta réponse

donc j'ai modifie le code comme suit:
<?
//recuperation dernier enregistrement
$result = mysql_query("SELECT id_client FROM $table ORDER BY id_client DESC LIMIT 0,1");
$row = mysql_fetch_array($result);
$id_client=$row["id_client"]+1;
$res=0;
//recherche dans table client si client existe ( avec meme nom,prenom,cp,ville)
$sql = "SELECT distinct id FROM $table WHERE nom='$nom'  and prenom='$prenom' and cp='$cp' and ville='$ville'";
$req = mysql_query($sql);
$res= mysql_num_rows($req);
echo"test 1 = $res";
if ($res<1){
//client pas dans table
// remplir bd + envois mail + message de confirmation
$titre="MERCI D'AVOIR REMPLI LE FORMULAIRE.";
$res=0;
$remplir1="INSERT INTO $table(id,id_client,ip,date,heure,nom,prenom,adresse,cp,ville,tel,email) VALUES('$id_client','$id_client','$IP','$date','$heure','$nom','$prenom','$adresse','$cp','$ville','$tel','$mail')";
$req1 = mysql_query($remplir1) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$remplir2="INSERT INTO $table2(id_client,date,heure,commentaire) VALUES('$id_client','$date_contact','$heure_contact','$msg')";
//$req2 = mysql_query($remplir2) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$remplir3="INSERT INTO $table3(id_client,piscine_beton,piscine_coque,abris_piscine,projet,periode) VALUES('$id_client','$modulaire','$coque','$abri','$projet','$mois')";
//$req3 = mysql_query($remplir3) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
//ajouter envois mail html personnalise php
include('includes/mail.php');
//fin envois mail html personnalise php
}
else{
//client deja dans table + message le client existe
$titre="Vous avez déja fait une demande de doc.<br>Si ce n'était pas le cas, merci de nous appeler.";
$res=2;}
echo"test 2 = $res";
mysql_query("OPTIMIZE TABLES {$table};");
mysql_query("OPTIMIZE TABLES {$table2};");
mysql_query("OPTIMIZE TABLES {$table3};");
mysql_close ($connect);
?> 
<table border="0" width="100%" id="table1" height="100%" cellspacing="0" cellpadding="0"> 
    <tr> 
        <td align="left" valign="top" height="1"> 
            <img border="0" src="images/logo-piscine-capblue.gif" width="299" height="116"> 
        </td> 
        <td width="315" rowspan="3" align="center" valign="top"> 
        <table border="0" width="100%" id="table2" height="100%" cellspacing="0" cellpadding="0"> 
            <tr> 
                <td height="10" bgcolor="#FC5187"> 
                <p style="margin:10px; " align="center"> 
                <b><font face="arial" size="2" color="#000080"> 
                <?
				// le titre en fonction si nouveau client ou deja dans la table
				echo"$titre";?> 
                </font></b></p></td> 
            </tr> 
            <tr> 
                <td align="justify" <?if ($res<1){}else{?>background="images/capblue-piscine.gif"<?}?>> 
            <font face="MS Sans Serif" size="1"> 
            <p style="margin:10px; "> 
            <?
			//message remerciement 
            if ($res<1){
			echo "Bonjour Mme, Mr <b> $prenom $nom</b>,\n nous allons vous faire parvenir le(s) catalogue(s) :"; 
			echo "<br />";
			echo "<ul>";
			if ($modulaire !=""){echo"<li> catalogue piscine modulaire</li>";} 
            if ($coque !=""){echo"<li> catalogue piscine monocoque</li>";} 
            if ($abri !="" ){echo"<li> catalogue abri de piscine</li>";}
			echo "</ul>";
			echo "<br />";
			echo " à l'adresse suivante :";
			echo "<br />";
			echo "<br />";
			echo "<b> $prenom $nom</b>";
			echo "<br />";
			echo "<b>$adresse</b>";
			echo "<br />";
			echo "<b>$cp $ville</b>";
			echo "<br />";
			echo "<br />";
			echo "Un mail de confirmation avec la synthèse des renseignements founis vous à été envoyé à l'adresse mail suivante :";
			echo "<br />";
			echo "<br />";
			echo "<b>$mail</b>";
			}
			else{
			}?> 
            </p></font> 
            </td> 
            </tr> 
        </table> 
        </td> 
    </tr> 
    <tr> 
        <td align="left" valign="top"> 
        <p style="margin-left: 30px; margin-top: 10px"><b> 
        <font color="#000080" face="Arial">Pour nous contacter</font></b></p> 
        <p style="margin-left: 30px; margin-top: 0; margin-bottom: 0"><b> 
        <font size="2" face="Arial"><font color="#000080">SNPI- </font> 
        <a target="_self" href="http://www.toto.fr/"><font color="#000080">toto</font></a><font color="#000080"> <br> 
        </font> 
        </font></b><font face="MS Sans Serif" size="2">Siège social :<br> 
        adresse<br> 
        adresse<br> 
        ville- France<br> 
        </font><br> 
        <font size="2" face="MS Sans Serif">Tél. </font> 
        <span style="font-size: 9.0pt; font-family: MS Sans Serif">tel</span><font size="2" face="MS Sans Serif"><br> 
        Fax </font><span style="font-size: 9.0pt; font-family: MS Sans Serif"> 
        fax</span></p> 
        <p style="margin-left: 30px; margin-top: 0; margin-bottom: 0">&nbsp;</p> 
        <p style="margin-left: 30px; margin-top: 0; margin-bottom: 0">&nbsp;</p> 
        <p style="margin-left: 30px; margin-top: 0; margin-bottom: 0"> 
        <span style="font-family: MS Sans Serif; font-size: 9pt">@mail : 
        <a href="mailto:[email protected]">[email protected]</a></span></p> 
        <p style="margin-left: 30px">&nbsp;</td> 
    </tr> 
    <tr> 
        <td align="left" valign="bottom" height="1"> 
        </td> 
    </tr> 
</table> 
je fais afficher la variable $res avant et apres la condition qui permets le remplissage de la table si le client n'est pas enregistre
dans ce cas, un message de remerciement est affiche et un mail envoye
dans l'autre, un message comme quoi le client est deja enregistre

maintenant avec ta modif

Code : Tout sélectionner

if ($res<1) {
#-o c'est ok j'ai un seul enregistrement et un seul envoi de mail, Merci steph29 =D>

par contre, le message affiche n'est pas le bon :cry:
quand je test la variable $res avant le if, cette variable se trouve a 1 meme si le client n'est pas dans la table :twisted: :evil: et a 2 apres :evil: :twisted:
Bien d'apres ce que j'ai fait, $res devrait etre a 0 si le client n'existe pas et a 2 si le client existe
Mais elle est toujours a 2 :oops: je pige pas

merci d'avance pour vos commentaires

Franchement, je seche :oops:

par steph29 » 07 janv. 2008, 12:13

c'est moi ou la ligne :

Code : Tout sélectionner

if ($res<=1) {
devrait etre :

Code : Tout sélectionner

if ($res<1) {
dans le premier cas si tu as UN ou moins d'un resultat a ta requete d'unicite, tu fais une insertion
dans le deuxieme cas, si c'est inferieur a 1 ;)

par web_cap » 05 janv. 2008, 18:27

bonjour et mes meilleurs voeux pour 2008

bien j'ai teste en or die mais aucune erreur ce presente

je redonne mon code, j'ai surement loupe quelque chose
<?
include('includes/config.php');
$connect=mysql_connect($host, $user,$password);
$connect_bd=mysql_select_db($bdd);
$table="client";
$table2="client_contact";
$table3="client_projet";
$date=date("Y-m-d");
$heure = date("H:i");
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    $IP = $_SERVER['HTTP_X_FORWARDED_FOR'];  
    elseif(isset($_SERVER['HTTP_CLIENT_IP']))    
    $IP = $_SERVER['HTTP_CLIENT_IP'];    
    else 
    $IP = $_SERVER['REMOTE_ADDR'];   
$modulaire = $_POST['piscine_modulaire'];
$coque = $_POST['piscine_coque'];
$abri = $_POST['abris_piscine'];
$projet = $_POST['projet'];
$mois = $_POST['mois'];
$mail = $_POST['email'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$adresse = $_POST['adresse'];
$cp = $_POST['cp'];
$ville = $_POST['ville'];
$tel = $_POST['telephone'];
$date_contact = $_POST['date_contact'];
$heure_contact=$_POST['heure_contact'];
$msg=$_POST['msg'];
$result = mysql_query("SELECT id_client FROM $table ORDER BY id_client DESC LIMIT 0,1");
$row = mysql_fetch_array($result);
$id_client_0=$row["id_client"];
$id_client_1=$row["id_client"]+1;
$res=0;
$titres=0;
$sql = "SELECT distinct id FROM $table WHERE nom='$nom'  and prenom='$prenom' and cp='$cp' and ville='$ville'";
$req = mysql_query($sql);
$res= mysql_num_rows($req);
if ($res<=1) { 
// remplir bd 
$titre="MERCI D'AVOIR REMPLI LE FORMULAIRE."; 
$titres='0';
$remplir1="INSERT INTO $table(id,id_client,ip,date,heure,nom,prenom,adresse,cp,ville,tel,email) VALUES('$id_client_1','$id_client_1','$IP','$date','$heure','$nom','$prenom','$adresse','$cp','$ville','$tel','$mail')";
$req1 = mysql_query($remplir1) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$remplir2="INSERT INTO $table2(id_client,date,heure,commentaire) VALUES('$id_client_1','$date_contact','$heure_contact','$msg')";
$req2 = mysql_query($remplir2) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$remplir3="INSERT INTO $table3(id_client,piscine_beton,piscine_coque,abris_piscine,projet,periode) VALUES('$id_client_1','$modulaire','$coque','$abri','$projet','$mois')";
$req3 = mysql_query($remplir3) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
//ajouter envois mail html personnalise php
include('includes/mail.php');
//fin envois mail html personnalise php
} 
else{ 
$titre="Vous avez déja fait une demande de doc.<br>Si ce n'était pas le cas, merci de nous appeler.";
} 
mysql_query("OPTIMIZE TABLES {$table};");
mysql_query("OPTIMIZE TABLES {$table2};");
mysql_query("OPTIMIZE TABLES {$table3};");
mysql_close ($connect);
?>
<table border="0" width="100%" id="table1" height="100%" cellspacing="0" cellpadding="0">
	<tr>
		<td align="left" valign="top" height="1">
			<img border="0" src="images/logo-piscine-capblue.gif" width="299" height="116">
		</td>
		<td width="315" rowspan="3" align="center" valign="top">
		<table border="0" width="100%" id="table2" height="100%" cellspacing="0" cellpadding="0">
			<tr>
				<td height="10" bgcolor="#FC5187">
				<p style="margin:10px; " align="center">
				<b><font face="arial" size="2" color="#000080">
				<?echo"$titre";?>
				</font></b></p></td>
			</tr>
			<tr>
				<td align="justify" <?if ($res<=1){}else{?>background="images/capblue-piscine.gif"<?}?>>
			<font face="MS Sans Serif" size="1">
			<p style="margin:10px; ">
			<?
			if ($res<=1){
			echo "Bonjour Mme, Mr <b> $prenom $nom</b>,\n nous allons vous faire parvenir le(s) catalogue(s) :";
			echo "<br />";
			echo "<ul>";
			if ($modulaire !="") {
			echo"<li> catalogue piscine modulaire</li>";
			}
			if ($coque !="") {
			echo"<li> catalogue piscine monocoque</li>";
			}
			if ($abri !="" ){
			echo"<li> catalogue abri de piscine</li>";
			}
			echo "</ul>";
			echo "<br />";
			echo " à l'adresse suivante :";
			echo "<br />";
			echo "<br />";
			echo "<b> $prenom $nom</b>";
			echo "<br />";
			echo "<b>$adresse</b>";
			echo "<br />";
			echo "<b>$cp $ville</b>";
			echo "<br />";
			echo "<br />";
			echo "Un mail de confirmation avec la synthèse des renseignements founis vous à été envoyé à l'adresse mail suivante :";
			echo "<br />";
			echo "<br />";
			echo "<b>$mail</b>";
			}
			else{
			}
			?>
			</p></font>
			</td>
			</tr>
		</table>
		</td>
	</tr>
	<tr>
		<td align="left" valign="top">
		<p style="margin-left: 30px; margin-top: 10px"><b>
		<font color="#000080" face="Arial">Pour nous contacter</font></b></p>
		<p style="margin-left: 30px; margin-top: 0; margin-bottom: 0"><b>
		<font size="2" face="Arial"><font color="#000080">SNPI- </font>
		<a target="_self" href="http://www.toto.fr/"><font color="#000080">toto</font></a><font color="#000080"> <br>
		</font>
		</font></b><font face="MS Sans Serif" size="2">Siège social :<br>
		adresse<br>
		adresse<br>
		ville- France<br>
		</font><br>
		<font size="2" face="MS Sans Serif">Tél. </font>
		<span style="font-size: 9.0pt; font-family: MS Sans Serif">tel</span><font size="2" face="MS Sans Serif"><br>
		Fax </font><span style="font-size: 9.0pt; font-family: MS Sans Serif">
		fax</span></p>
		<p style="margin-left: 30px; margin-top: 0; margin-bottom: 0">&nbsp;</p>
		<p style="margin-left: 30px; margin-top: 0; margin-bottom: 0">&nbsp;</p>
		<p style="margin-left: 30px; margin-top: 0; margin-bottom: 0">
		<span style="font-family: MS Sans Serif; font-size: 9pt">@mail :
		<a href="mailto:[email protected]">[email protected]</a></span></p>
		<p style="margin-left: 30px">&nbsp;</td>
	</tr>
	<tr>
		<td align="left" valign="bottom" height="1">
		</td>
	</tr>
</table>
merci d'avance de vos reponses

par web_cap » 28 déc. 2007, 14:05

merci, je vais regarde ca

je vous tiens au courant

par d0m » 28 déc. 2007, 13:25

pas d'erreur sql en rajoutant
or die(mysql_error())
?

par web_cap » 28 déc. 2007, 10:30

bonjour

merci avant tout de ta reponse

j'ai vu que tu avais test mon formulaire

excuse mon ignorance mais je test ce que tu m'as suggere mais sans succes

merci

par d0m » 28 déc. 2007, 10:08

enlèves déjà les quotes dans ta requête pour les informations qui ne sont pas des chaines de caractères, et au passage sort les variables php de la chaine :
$query = "SELECT id_client
          FROM " . $table ."
          WHERE nom='".$nom."'
          AND prenom='".$prenom."'
          AND cp='".$cp."' 
          AND ville='".$ville."'";

....

$remplir="INSERT INTO ".$table."(id,id_client,ip,date,heure,nom,prenom,adresse,cp,ville,tel,email)
VALUES(".$id_client.",".$id_client.",'".$IP."','".$date."','".$heure."','".$nom."','".$prenom."','".$adresse."',".$cp.",'".$ville."','".$tel."','".$mail."')"
Il semble que tu veuilles eviter les doublons de personnes, donc tu pourrais mettre les informations nom, prenom, cp et ville en clé.

recherche doublon avant insert into

par web_cap » 27 déc. 2007, 22:20

bonjour

voila mon soucis,
je recherche si le client a deja fait une demande avant de l'inserer dans ma base

Code : Tout sélectionner

CREATE TABLE `client` ( id int(200) NOT NULL default '0', id_client int(100) NOT NULL default '0', ip text NOT NULL, `date` date NOT NULL default '0000-00-00', heure time NOT NULL default '00:00:00', nom text NOT NULL, prenom text NOT NULL, adresse text NOT NULL, cp int(5) NOT NULL default '0', ville text NOT NULL, tel text NOT NULL, email text NOT NULL, UNIQUE KEY id_client (id_client) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

$query = "SELECT id_client FROM $table WHERE nom='$nom' and prenom='$prenom' and cp='$cp' and ville='$ville'";
$result = mysql_query($query);
$res = mysql_num_rows($result); 
echo"$res";
// Recuperation des resultats
if ($res==0) {
// remplir bd
$titre="MERCI D'AVOIR REMPLI LE FORMULAIRE.";
//ajouter envois mail html personnalise php
}
else{
$titre="Vous avez déja fait une demande de doc.<br>Si ce n'était pas le cas, merci de nous appeler.";
echo"result1 $res";
}
comme ceci tout fonctionne (verification doublon)
mais il se trouve que le client est enregistrer 2 fois en meme tepms dans la table
je trouve pas malgres mes recherches
voici le code avec le insert into
$sql = "SELECT distinct id FROM $table WHERE nom='$nom'  and prenom='$prenom' and cp='$cp' and ville='$ville'";
$req = mysql_query($sql);
$res= mysql_num_rows($req);
if ($res<=1) { 
// remplir bd 
$titre="MERCI D'AVOIR REMPLI LE FORMULAIRE."; 
$remplir="INSERT INTO $table(id,id_client,ip,date,heure,nom,prenom,adresse,cp,ville,tel,email) VALUES('$id_client','$id_client','$IP','$date','$heure','$nom','$prenom','$adresse','$cp','$ville','$tel','$mail')";
$req2 = mysql_query($remplir);//or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
//ajouter envois mail html personnalise php 
} 
else{ 
$titre="Vous avez déja fait une demande de doc.<br>Si ce n'était pas le cas, merci de nous appeler.";
} 

voici le code qui affiche les messages
<table border="0" width="100%" id="table2" height="100%" cellspacing="0" cellpadding="0">
<tr>
<td height="10" bgcolor="#FC5187">
<p style="margin:10px; " align="center">
<b><font face="arial" size="2" color="#000080">
<?echo"$titre";?>
</font></b></p></td>
</tr>
<tr>
<td align="justify" [php]<?if ($res==0){}else{?>background="images/capblue-piscine.gif"<?}?>
>
<font face="MS Sans Serif" size="1">
<p style="margin:10px; ">
<?
if ($res==0){
echo "Bonjour Mme, Mr <b> $prenom $nom</b>,\n nous allons vous faire parvenir le(s) catalogue(s) :";
echo "<br />";
echo "<ul>";
if ($modulaire !="") {
echo"<li> catalogue piscine modulaire</li>";
}
if ($coque !="") {
echo"<li> catalogue piscine monocoque</li>";
}
if ($abri !="" ){
echo"<li> catalogue abri de piscine</li>";
}
echo "</ul>";
echo "<br />";
echo " à l'adresse suivante :";
echo "<br />";
echo "<br />";
echo "<b> $prenom $nom</b>";
echo "<br />";
echo "<b>$adresse</b>";
echo "<br />";
echo "<b>$cp $ville</b>";
echo "<br />";
echo "<br />";
echo "Un mail de confirmation avec la synthèse des renseignements founis vous à été envoyé à l'adresse mail suivante :";
echo "<br />";
echo "<br />";
echo "<b>$email</b>";
}
else{
}
?>
</p></font>
</td>
</tr>
</table>
[/php]
merci beaucoup de votre aide
cordialement