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

Eléphant du PHP | 289 Messages

01 avr. 2005, 19:58

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???

Eléphant du PHP | 281 Messages

01 avr. 2005, 20:05

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.

Eléphant du PHP | 289 Messages

01 avr. 2005, 20:16

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
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

01 avr. 2005, 20:16

$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
   }

Eléphant du PHP | 289 Messages

01 avr. 2005, 20:33

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
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

01 avr. 2005, 21:25

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:

Eléphant du PHP | 281 Messages

01 avr. 2005, 21:30

Ca revient au même que ce que j'ai dit

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

01 avr. 2005, 21:58

Peut-être, mais moi je fournis le code ! :langue:

Eléphant du PHP | 289 Messages

03 avr. 2005, 13:00

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:
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)