Page 1 sur 1

éviter les doublons lors d'un enregistrement !?!?!?

Posté : 01 avr. 2005, 19:58
par FAbrice
Bonsoir tout le monde du forum 8)

une petiote question en cette belle soirée d'avril

comment peut-on vérifier les données d'une table lors d'un enregistrement pour éviter les doublons???

je m'explique.

g une table avec les colonnes suivantes: ID et actions.

actuellement, j'enregistre sans probleme mes données. (ID est la clée et est en auto-incrémente).

je cherche le moyen pour eviter d'insérer une action déjà existante dans la table lors de l'enregistrement!

est ce que quelqu'un aurait une solution???

Posté : 01 avr. 2005, 20:05
par Ouaibou
Bonsoir,

Il me semble que lorsque tu cré une table tu peux choisir une option unique.

Tu as le choix entre primaire, index et unique. Essai avec unique peut être que ça marche. Mais de toute façon le mieux est de vérifier avec php si il existe pas un champs avec les même attributs.

Pour cela tu fait une requête pour sélectionner l'attribut donc tu veux vérifier le "doublonnage". Ensuite tu récupère le nombre d'attributs trouvé grace à la reqûete faite précédemment :
$nb = mysql_num_rows($sql);
Si $nb est supérieur à 1 c'est qu'il y a un double.

Posté : 01 avr. 2005, 20:16
par FAbrice
alut

ton code est en fait une ruse par rapport a ce que cherche! 8)
ca peut marcher!!!

ce que je cherche a faire, c une méthode que l'on utilise souvent sous XL en VBA. on vérifié dans la table colonne (ici "actions") que la nouvelle valeur n'y est pas déja présente!

en ce qui concerne les clées unique, elle est déja utilisé sur la colonne ID.

merci de ton aide,
FAb

Posté : 01 avr. 2005, 20:16
par albat
$req1 = "SELECT count(actions) AS total FROM table WHERE actions=".$new_action;
// exécution de la requête
if ($total>0)
   echo "L'action ".$new_action." est déjà enregistrée."
   else
   { $req2 = "INSERT INTO table (actions) VALUES ('".$new_action."')";
   // exécution de la requête
   }

Posté : 01 avr. 2005, 20:33
par FAbrice
alut

une petite question:
le code que tu viens de me fournir, il ne remplace en rien mon code actuel? il vient juste en -update :)

(je te pose cette question car je n'ai pas le fichier ce soir, mais je l'aurais demain pour faire le test)

meri bcq,
FAb

Posté : 01 avr. 2005, 21:25
par albat
Le code que je t'ai donné est incomplet.
Il manque l'exécution des requêtes (les mysql_fetch_assoc, les extract, etc.)

Cependant, il a pour effet de :
1. vérifier si la variable fournie par l'utilisateur est ou non déjà présente dans la base (requête 1)
2. insérer cette valeur - nouvelle - dans la base si elle n'y est pas déjà (requête 2)

Tu as donc là tout le squelette pour construire ton appli. :wink:

Posté : 01 avr. 2005, 21:30
par Ouaibou
Ca revient au même que ce que j'ai dit

Posté : 01 avr. 2005, 21:58
par albat
Peut-être, mais moi je fournis le code ! :langue:

Posté : 03 avr. 2005, 13:00
par FAbrice
alut :)

dsl pour le delais mais vu le tps qu'il a fait hier ...... 8)

j'ai essayé d'adapter ton bout de code mais sans succes :roll: ( ici, la colonnes actions est remplacée par la colonne 'nom')

en fournissant le code, je pense que 'lon pourra mieux cibler le pb:
<?php require_once('../../Connections/ateliermeca.php'); ?>
<?php
$currentPage = $_SERVER["PHP_SELF"];

$maxRows_mba = 11;
$pageNum_mba = 0;
if (isset($_GET['pageNum_mba'])) {
  $pageNum_mba = $_GET['pageNum_mba'];
}
$startRow_mba = $pageNum_mba * $maxRows_mba;

mysql_select_db($database_ateliermeca, $ateliermeca);
$query_mba = "SELECT Nom FROM personnel ORDER BY Nom ASC";
$query_limit_mba = sprintf("%s LIMIT %d, %d", $query_mba, $startRow_mba, $maxRows_mba);
$mba = mysql_query($query_limit_mba, $ateliermeca) or die(mysql_error());
$row_mba = mysql_fetch_assoc($mba);

if (isset($_GET['totalRows_mba'])) {
  $totalRows_mba = $_GET['totalRows_mba'];
} else {
  $all_mba = mysql_query($query_mba);
  $totalRows_mba = mysql_num_rows($all_mba);
}
$totalPages_mba = ceil($totalRows_mba/$maxRows_mba)-1;

$queryString_mba = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_mba") == false && 
        stristr($param, "totalRows_mba") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_mba = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_mba = sprintf("&totalRows_mba=%d%s", $totalRows_mba, $queryString_mba);
?>
voila le pb.

merci de votre aide,
FAb qui lui fourni les problèmes :oops: