Vérif doublon avant insertion en base

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 : Vérif doublon avant insertion en base

Re: Vérif doublon avant insertion en base

par sam12 » 11 févr. 2013, 19:05

Pour compléter, si on en croit la doc:
la vielle ligne sera effacée avant que la nouvelle ne soit insérée.
Donc on n'update pas la ligne, on l'efface l'ancienne et on rajoute la nouvelle ;)
Quand vous utilisez une commande REPLACE, mysql_affected_rows() retournera 2 si une nouvelle ligne en remplace une existante, et cela parce qu'il y aura eu une insertion puis une suppression.
Ou comment se contredire en 4 lignes de doc :D
Suppression et insertion ou insertion et suppression, telle est la question.

Re: Vérif doublon avant insertion en base

par Pitet » 11 févr. 2013, 18:24

Salut,

Pour vérifier si une insertion avec le même num a déjà été faite, tu dois faire deux requêtes : une première requête pour vérifier si la ligne existe déjà. La deuxième requête sera soit une insertion (INSERT) si la ligne n'existe pas, sinon elle sera une mise à jour (UPDATE) de la ligne existante.

// première requête pour vérifier si la ligne avec le même num existe déjà
$sql = "SELECT num FROM postes WHERE num = $num";
$res = mysql_query($sql);

if (mysql_num_rows($res) == 0) {
// aucune ligne déjà insérée avec le même num : on peut insérer la nouvelle ligne
$sql = "INSERT INTO postes (num,num_serie,marque,designation,conf,gestionnaire,situation,position,login) VALUES ('$num','$num_serie','$marque','$designation','$conf','$gestionnaire','$situation','$position','$login')";
[...]
} else {
// au moins une ligne avec le même num déjà insérée : on met à jour la ligne existante
$sql = "UPDATE postes SET num_serie = '$num', marque = '$marque', [...] WHERE num = '$num'";
}

Depuis la version 5.0 de Mysql, tu peux également utiliser la commande mysql REPLACE (http://dev.mysql.com/doc/refman/5.0/fr/replace.html) comme ceci :

$sql = "REPLACE INTO postes (num,num_serie,marque,designation,conf,gestionnaire,situation,position,login) VALUES ('$num','$num_serie','$marque','$designation','$conf','$gestionnaire','$situation','$position','$login')";

Cette requête est équivalente au code écrit ci-dessus. La commande REPLACE va insérer ou mettre à jour la ligne en base de données en vérifiant si une ligne avec le même num existe déjà. Attention, il faut que ta table 'postes' ai un champ déclaré en tant que PRIMARY KEY. J'ai supposé que ton champ 'num' est bien la clé primaire de ta table 'postes'.

Vérif doublon avant insertion en base

par biddal » 11 févr. 2013, 17:50

Bonjour,
Je fais un ajout dans une base de donnée! Mon code fonctionne seulement lorsque je fais l'ajout il ne vérifie pas si le numéro que j'ai saisi existe déjà ou pas dans la base dans quel cas il ne fait pas l'ajout!
Voici mon code:
$sql="insert into postes (num,num_serie,marque,designation,conf,gestionnaire,situation,position,login) VALUES ('$num','$num_serie','$marque','$designation','$conf','$gestionnaire','$situation','$position','$login')";
				//tester si le $num saisi existe déjà dans la base dans le champ 'num' 
				@mysql_db_query($bdd,$sql,$id_link);  //insertion des caracteristiques du poste.
				//$cpp.="Mise en base effectuée!";
				include "accueil/accueil.php";
Ci joint ma connection à la base:
$adresse="localhost";
$log="root";
$pass="";
$bdd="gestion_stock";
	
$id_link=mysql_connect($adresse,$log,$pass) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base");
Quelqu'un pourrait il m'aider pour faire au plus simple?
Meri d'avance!