Contrôler que les valeurs n'existent pas dans la tables

Mammouth du PHP | 545 Messages

06 janv. 2006, 00:44

Salut,

J'ai fait un petit script pour insérer des enregistrements dans une table mais au cas où (je perd mon latin) comment être certain que les valeurs ne sont pas existantes?

Un peu plus d'explication: je dois insérer plusieurs paramétres pour identifier une personne mais elle pourrait malgré tout avoir le même nom et prénom ... c'est pour cela que j'ai inclus en plus la date de naissance, y'aura moins de risque que les 3 concordes!

Voici mon code:

<?php require_once('../../Connections/kainb_database.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO acrho_participant (nom, prenom, date_naissance, sexe) VALUES (%s, %s, %s, %s)",
                       GetSQLValueString($_POST['nom'], "text"),
                       GetSQLValueString($_POST['prenom'], "text"),
                       GetSQLValueString($_POST['naissance'], "date"),
                       GetSQLValueString($_POST['sexe_part'], "text"));

  mysql_select_db($database_kainb_database, $kainb_database);
  $Result1 = mysql_query($insertSQL, $kainb_database) or die(mysql_error());

  $insertGoTo = "table_participants.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}

mysql_select_db($database_kainb_database, $kainb_database);
$query_news_part = "SELECT * FROM acrho_participant";
$news_part = mysql_query($query_news_part, $kainb_database) or die(mysql_error());
$row_news_part = mysql_fetch_assoc($news_part);
$totalRows_news_part = mysql_num_rows($news_part);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Enregistrement des participants</title>
</head>

<body>

<table width="702" border="0" cellpadding="0" cellspacing="0">
  <!--DWLayoutTable-->
  <tr>
    <td width="46" height="27">&nbsp;</td>
    <td width="624">&nbsp;</td>
    <td width="32">&nbsp;</td>
  </tr>
  <tr>
    <td height="195">&nbsp;</td>
    <td valign="top">      <form name="form1" method="POST" action="<?php echo $editFormAction; ?>">
        <table width="100%"  border="1" cellspacing="0" cellpadding="0">
          <tr>
            <td>Nom du coureur </td>
            <td><input name="nom" type="text" id="nom" maxlength="45"></td>
          </tr>
          <tr>
            <td>Pr&eacute;nom du coureur </td>
            <td><input name="prenom" type="text" id="prenom" maxlength="45"></td>
          </tr>
          <tr>
            <td height="54">Sexe</td>
            <td><p>
              <label>
              <input name="sexe_part" type="radio" value="H" checked>
    Homme</label>
              <br>
              <label>
              <input name="sexe_part" type="radio" value="D">
    Femme</label>
              <br>
            </p></td>
          </tr>
          <tr>
            <td>Date de naissance </td>
            <td><input name="naissance" type="text" id="naissance" value="AAAA-MM-JJ" maxlength="10"></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td><input type="submit" name="Submit" value="Envoyer">
            <input type="reset" name="Submit" value="Réinitialiser"></td>
          </tr>
        </table>
        <input type="hidden" name="MM_insert" value="form1">
    </form></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td height="20"></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td height="125"></td>
    <td valign="top"><!--DWLayoutEmptyCell-->&nbsp;</td>
    <td></td>
  </tr>
  <tr>
    <td height="49"></td>
    <td>&nbsp;</td>
    <td></td>
  </tr>
</table>
</body>
</html>
<?php
mysql_free_result($news_part);
?>
Si quelqu'un peut m'aider?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Mammouth du PHP | 19672 Messages

06 janv. 2006, 01:04

Techniquement, rien n'interdit que deux Jean Dupond soient nés le 1er février de la même année, un à Nancy, l'autre à Bordeaux. Le seul point qui permettrait de les différencier, ce serait leur numéro INSEE... auquel tu n'as pas accès et dont tu n'aurais de toutes façon pas le droit de te servir.

Ceci dit, c'est aussi à ca que sert une clé primaire dans une table : les autre champs peuvent comporter des doublons, mais pas la clé primaire ni les index UNIQUE..

En fin de compte, quel est donc le problème que tu voudrais résoudre ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 545 Messages

06 janv. 2006, 01:20

Re,

Toi qui connais si bien mes tables pour m'avoir filer un gros coup de main, celle que j'ai appelé 'acrho_participant' comporte comme champs: ID_coureur, nom, prenom, date_naissance et sexe.
Lors de l'encodage, je voudrais qu'il soit impossible d'insérer une même personne! C'est pourquoi, je pensais faire un test sur le nom, le prénom et la date de naissance ... un des 3 doit être différent! Est-ce possible?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Mammouth du PHP | 19672 Messages

06 janv. 2006, 01:24

Une idée comme ça : ton participant est membre d'un club, mais peut-être aussi d'une fédération avec un numéro de licence ... numéro unique sauf erreur de ma part. Tu pourrais l'utiliser en clé même si tu ne l'affiches pas sur le site.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 545 Messages

06 janv. 2006, 11:18

Salut,

En Belgique, il n'est pas obligatoire de faire partie d'une fédération donc pas de numéro! De plus, je vais refaire les classement depuis 24 ans (début de l'ACHRO - http://www.acrho.be) et certains coureurs ne sont malheureusement plus de ce monde.

Je pense que pour cette table, je vais refaire un listing du type http://www.kain-bruyere.be/administrato ... ipants.php avec en fin de ligne un bouton 'Editer' et 'Supprimer' cela risque d'être plus simple même si ce sont des milliers d'entrées aux quellles il faudra jeter un oeil!

Néanmoins, cela m'intéresse de savoir comment on pourrait contrôler les entées dans une double afin qu'il n'y pas de doublon ! ? !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Mammouth du PHP | 19672 Messages

06 janv. 2006, 11:22

Avec une requête tout simplement :

Code : Tout sélectionner

SELECT COUNT(*) FROM table WHERE nom = 'Nom à vérifier' AND prenom = 'prenom a verifier' AND date_naiss = 'date naissance à vérifier';
Et tu récupères le nombre trouvé, si c'est différent de zéro, tu sauras qu'il y a déjà une ligne avec le même nom/prénom/date de naissance enregistré, il te restera à contrôler si c'est effectivement la même personne ou si c'est un hasard qui fait que deux personnes différentes ont ces mêmes éléments en commun.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: