eviter les doublons en php

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 : eviter les doublons en php

par Invité » 01 févr. 2007, 12:12

Merci les gas !! ca marche maintenant !!

par HUE Christophe » 31 janv. 2007, 23:58

Salut a toi,

T’a plein de façon de faire...
Mais avant tout, et le plus propre est de modifier ta table pour éviter les doublons. (Normalement, elle devrait déjà avoir une clé primaire).
Exécute le SQL suivant pour éviter les doublons :

Code : Tout sélectionner

CREATE UNIQUE INDEX test_i1 on test (email, site_id) ou CREATE UNIQUE INDEX test_i2 on test (email) /*Un mail unique dans la table*/
Ensuite, le code...
Simple et sans message et sans contrôle!
@mysql_query("INSERT INTO test(email,site_id) VALUES('$email','$siteId')");  
Avec suppression force avant l'insertion :
mysql_query("DELETE FROM test WHERE email='$email' AND site_id='$siteId'");
mysql_query("INSERT INTO test(email,site_id) VALUES('$email','$siteId')");
Avec mise a jour (Uniquement si on veux changer le site_id d'un mail. Cas du mail unique) :
//selection d'existance
mysql_query("SELECT email, site_id FROM test WHERE email='$email'");
//test si on trouve un enregistrement
if($row = mysql_fetch_array($result, MYSQL_ASSOC)){
     //enregistrement trouvé - mise à jour
     mysql_query("UPDATE test SET site_id='$siteId' WHERE email='$email'");
}else{
     //email inconnu - ajout
     mysql_query("INSERT INTO test(email,site_id) VALUES('$email','$siteId')");
} 
Pour lire un select:
mysql_query("SELECT email, site_id FROM test");
echo "<table>
            <tr><td>Email</td><td>Site ID</td></tr>\n";
//Boucle sur les enregsitrements et place les lignes dans le tableau $row
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){
   echo "\t<tr><td>".$row["email"]."</td><td>".$row["site_id"]."</td></tr>\n";
}
echo "</table>\n";
Attention, pas de copier coller sans comprendre.
Je n'ai ni tester ni relu... donc quelle que erreur possible!

_______________________
Utile pour être compris : Convention de codage bien fait : http://www.gaidot.net/regis/publication ... le.fr.html
(La page semble être accesible que de temps en temps - domage)

par Truc » 31 janv. 2007, 18:38

peut être mais on ne connais pas ta classe "mysql"

comment accèdes tu au données d'une requete select ? c'est tout suffit de regarder dans la classe ou un code qui y ressemble (requete SELECT)

par cy4nur3 » 31 janv. 2007, 15:47

Bah je veux bien adapté mais je ne connais pas grand chose en php !!
Je code avec les bribes de tuto qu'il y a sur le net !!

par cy4nur3 » 31 janv. 2007, 15:44

Voici mon script en PHP !


Code : Tout sélectionner

<? if(isset($_POST) && strlen($_POST['mail']) > 0 ) { if(isset($_POST['inscription']) == true) { if(ereg("^(.+)@(.+)\\.(.+)$", $_POST['mail'])) { $retour = $bdd->query("SELECT email FROM test WHERE email = '".$_POST['mail']."'"); if($retour) { hydrus_utils_alert("E-mail existant !!"); } else { $requete_txt = "INSERT INTO test ( `email` , `site_id` ) VALUES ( '".$_POST['mail']."', '".$site_id."');"; $bdd->query($requete_txt); hydrus_utils_alert("Votre adresse a bien été enregistrée"); } } else { hydrus_utils_alert("Veuillez entrer une adresse valide !"); } } else if(isset($_POST['desinscription']) == true) { if(ereg("^(.+)@(.+)\\.(.+)$", $_POST['mail'])) { $requete_txt = "DELETE FROM `test` WHERE `email` = '".$_POST['mail']."' AND `site_id` = '".$site_id."' "; $bdd->query($requete_txt); hydrus_utils_alert("Votre adresse a bien été supprimée"); //print("Votre adresse a bien été supprimée"); } else { hydrus_utils_alert("Veuillez entrer une adresse valide !"); } } } ?>
Voili voilou

par Truc » 31 janv. 2007, 15:41

// a adapter selon ta configuration, utilisation de la méthode "query()"
		$retour = $bdd->query("SELECT email FROM test WHERE email = '".$_POST['mail']."'");
la méthode renvoie "TRUE" apparemment... as tu adapté

par Ultim4T0m » 31 janv. 2007, 15:38

Montre nous plutôt ton code, sans, on ne peut pas faire grand chose.

Et tant qu'à faire, montre nous aussi la structure de ta table, sait-on jamais.

par cy4nur3 » 31 janv. 2007, 15:18

Je suis dégouté ca ne fonctionne pas !!
il ne m'insere pas le mail ! il me ts qu'il est deja dans la base or que la base et vide.

par Truc » 31 janv. 2007, 14:13

Bah moi je veux bien mais si c'est pas ton rôle... un admin réseau n'est pas [forcément] développeur (moi je suis plutot moyen en réseau => j'y touche pas :wink: )
tu me dis de mettre un if mais je ne vois pas ou !
test if() avant cette ligne :
$requete_txt = "INSERT INTO `test` ( `email` , `site_id` ) VALUES ( '".$_POST['mail']."', '".$site_id."');";
Pas assez clair :-k

C'est une question de logique, il faut tester avant d'enregistrer :

if(isset($_POST['inscription']) == true)
{
	if(ereg("^(.+)@(.+)\\.(.+)$", $_POST['mail']))
	{
		// a adapter selon ta configuration, utilisation de la méthode "query()"
		$retour = $bdd->query("SELECT email FROM test WHERE email = '".$_POST['mail']."'");
		if($retour)
		{
			hydrus_utils_alert("E-mail existant !!");
		}
		else
		{
			// On peut enregistrer 
			$requete_txt = "INSERT INTO `test` ( `email` , `site_id` ) VALUES ( '".$_POST['mail']."', '".$site_id."');";
			$bdd->query($requete_txt);  
			hydrus_utils_alert("Votre adresse a bien été enregistrée");		
		}
	}
	else
	{
		hydrus_utils_alert("Veuillez entrer une adresse valide !");
	}
} 

par albat » 31 janv. 2007, 13:51

j'ai chié dans les tables !!
Modération :
cy4nur3, sur PHPFrance, le forum étant public,
nous veillons particulièrement à l'expression correcte des membres.

Ainsi, nous refusons les propos contestables,
le style SMS, les fautes d'orthographe, etc.

Merci d'écrire correctement :
j'ai chié dans l'étable
:langue:

par cy4nur3 » 31 janv. 2007, 13:22

Je sais mais j'ai fais du copier coller et j'ai chié dans les tables !!
Etant donné que je ne connais pas trop le code PHP bah tu me dis de mettre un if mais je ne vois pas ou ! Je debute vraiment ! Je cherche un peu partout sur les forum mais c'est pas evident !!
j'e n'ai pas été formé sur le code mais j'ai eu une formation d'Administrateur réseau !
forcément c'est pas evident ! Donc si tu pouvais m'aider un peu plus je te serai reconnaissant !!
Merci

par Truc » 31 janv. 2007, 12:43

tu ne travailles pas sur les mêmes tables tu ne peut donc vérifier l'existance d'un mail :-k

Tout ce que tu as à faire est un SELECT avec un clause WHERE sur l'email POST et un test if() avant cette ligne :
$requete_txt = "INSERT INTO `test` ( `email` , `site_id` ) VALUES ( '".$_POST['mail']."', '".$site_id."');";
tu le fait après... forcément les données sont déjà enregistrées !

eviter les doublons en php

par cy4nur3 » 31 janv. 2007, 11:15

Bonjour,

Je vous explique mon petit problème.
Je dois refaire un bout de code en php pour un site web. Mon boss m'a demandé d'eviter les doublons dans ma base de donnée! C'est a dire que si une personne rentre une adresse mail et bien mon code doit verifier l'adresse dans la base avant de l'enregistrer ! Si celle ci existe je dois afficher un message sinon l'enregistrer dans la base
Voici mon code !!
<?
if(isset($_POST) && strlen($_POST['mail']) > 0 )		
{
	if(isset($_POST['inscription']) == true)
	{
	if(ereg("^(.+)@(.+)\\.(.+)$", $_POST['mail']))
		{
	$requete_txt = "INSERT INTO `test` ( `email` , `site_id` ) VALUES ( '".$_POST['mail']."', '".$site_id."');";
   $bdd->query($requete_txt);  
   hydrus_utils_alert("Votre adresse a bien été enregistrée");
	//print("Votre adresse a bien été enregistrée");
		}
			else
			{
	hydrus_utils_alert("Veuillez entrer une adresse valide !");
			}
	}
else if(isset($_POST['desinscription']) == true)
	{
	if(ereg("^(.+)@(.+)\\.(.+)$", $_POST['mail']))
		{
	    $requete_txt = "DELETE FROM `test` WHERE `email` = '".$_POST['mail']."' AND `site_id` = '".$site_id."' ";
		$bdd->query($requete_txt);
		hydrus_utils_alert("Votre adresse a bien été supprimée");
		//print("Votre adresse a bien été supprimée");
		}
			else
			{
	hydrus_utils_alert("Veuillez entrer une adresse valide !");
			}
	}
}
?>
Ca c'est le code qui ne verifie pas l'adresse!
Maintenant voici ce que j'ai fais mais ca ne fonctionne pas !! Ne vous moquez pas trop de moi je debute en php !!
<?
 mysql_connect("localhost"); 
 mysql_select_db("test"); 
 
if(isset($_POST) && strlen($_POST['mail']) > 0 )		
{
	if(isset($_POST['inscription']) == true)
	{
	if(ereg("^(.+)@(.+)\\.(.+)$", $_POST['mail']))
		{
	$requete_txt = "INSERT INTO `test` ( `email` , `site_id` ) VALUES ( '".$_POST['mail']."', '".$site_id."');";
    $bdd->query($requete_txt);  
    hydrus_utils_alert("Votre adresse a bien été enregistrée");

$sql = "SELECT * FROM corolle_mailing WHERE email='".$mail."'"; 
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
$res = mysql_num_rows($req); 
if($res!=0)
{ 
echo '<font color="red">Désolé, mais plusieurs infos existent déjà dans notre base.</font>'; 
} 
else // Les infos n'existent pas, on insère les informations du formulaire dans la table 
{ 

// insertion des valeurs dans la base 
$query = "DELETE FROM `test` WHERE `email` = '".$_POST['mail']."' AND `site_id` = '".$site_id."' ";
$result= mysql_query($query);  
} 
mysql_close();
	//print("Votre adresse a bien été enregistrée");
		}
			else
			{
	hydrus_utils_alert("Veuillez entrer une adresse valide !");
			}
	}
else if(isset($_POST['desinscription']) == true)
	{
	if(ereg("^(.+)@(.+)\\.(.+)$", $_POST['mail']))
		{
	    $requete_txt = "DELETE FROM `test` WHERE `email` = '".$_POST['mail']."' AND `site_id` = '".$site_id."' ";
		$bdd->query($requete_txt);
		hydrus_utils_alert("Votre adresse a bien été supprimée");
		//print("Votre adresse a bien été supprimée");
		}
			else
			{
	hydrus_utils_alert("Veuillez entrer une adresse valide !");
			}
	}
}
?>
Merci d'avance ..