Posez votre question Signaler

Eviter doublons dans une base de donnee [Résolu]

billboy - Dernière réponse le 18 févr. 2009 à 15:22
Bonjour,
je créé un formulaire avec un ajout de pseudo. Mon problème est le suivant: si un je saisi un pseudo déjà présent dans la bbd, il s'enregistre quand même. Pourriez-vous m'indiquer comment résoudre ce petit souci?
merci.
Lire la suite 

Eviter doublons dans une base de donnee »

18 réponses
Réponse
+3
moins plus
function user_exists($login)
{
$sql = 'SELECT `id`
FROM `ma table`
WHERE `login` = \'' . addslashes($login) . '\'
LIMIT 1';
$res = mysql_query($sql) or die (mysql_error());
return (mysql_num_rows($res) == 1);
}
Ajouter un commentaire
Réponse
+1
moins plus
Dans la même mesure, j'aimerai vérifier que mon champs "date" n'est pas déjà dans la base sinon ca retourne une erreur mais pas seulement. J'aimerai en plus effectuer une modification dans la base, si la personne conforme qu'elle souhaite écraser le contenu précédent.

Je suis pour le moment que sur la partie "vérification" du champs qui ne fonctionne pas bien sur :p. Je vous joints mon code qui est un peut plus complexe que le précédent puisque j'ai une boucle "for" qui me permet d'ajouter autant d'entré que d'utilisateurs. En gras le code de vérification


<?php
if(isset($_POST['valider']))
{

$indice = $_POST['numIndice'];
$valider = $_POST['valider'];
$date = $_POST['date'];

function user_exists($date)
{
$sql = 'SELECT date FROM presence WHERE date = \'' . addslashes($date) . '\' LIMIT 1';
$res = mysql_query($sql) or die (mysql_error());
return (mysql_num_rows($res) == 1);
}


if(empty($_POST["date"]))
{
echo "Attention un des champs n'est pas correctement remplit.<a href='accueil.php'>Verifier</a>.";
}


else
{
if (user_exists($date))
{
echo('date deja enregistrer!<br />');
}
else
{ 


if ( $indice > 0 ) {

for ( $i=0; $i < $indice; $i++ )
{

$nservice=$_POST['nservice'.$i];
$agent=$_POST['agent'.$i];
$nchrono=$_POST['nchrono'.$i];
$etat=$_POST['etat'.$i];
$login=$_POST['login'.$i];

$requete ="INSERT INTO presence (id,nservice,date,agent,nchrono,etat,login) values ('','$nservice','$date','$agent','$nchrono','$etat','$login')";

mysql_query($requete);

}

mysql_close();
echo "La date &agrave; bien &eacute;t&eacute; prise en charge pour les ".$indice." agent";

}

}
else
echo "Merci de bien remplir le formulaire";
?>

 vous pouvez retourner au <a href="accueil.php">menu principal</a>
Ajouter un commentaire
Réponse
+0
moins plus
Met le tuple "pseudo" en clef primaire, sa devrait éviter les doublons
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

le plus simple est de faire une premiere requette afin de verifier
si l'utilisateur n'existe pas deja.
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

Il te suffit de mettre ton champs pseudo comme clé primaire (primery key), et les doublons sur cette clef sont interdit.

@Bientôt
Ajouter un commentaire
Réponse
+0
moins plus
je ne peut pa metre le pseudo en en cle primaire car je possede un ID.

mindslight, pourais tu m'indiquer quel requette pourai m'aider? merci
Ajouter un commentaire
Réponse
+0
moins plus
re,

tu peux aussi utiliser des clefs primaires composites.
Ajouter un commentaire
Réponse
+0
moins plus
quel sont les champs de ta table et le nom de ta table sql ?
Ajouter un commentaire
Réponse
+0
moins plus
je suis novice en ph peut tu m'expliquer ce que c'est une cle primaire composite sil te plait?? merci
Ajouter un commentaire
Réponse
+0
moins plus
ma table:
id
nom
prenom
adress
pseudo
login
Ajouter un commentaire
Réponse
+0
moins plus
une clef primaire composite est une clef generer sur plusieurs champs,
mais je pense que de faire une pre-requette est plus simple
Ajouter un commentaire
Réponse
+0
moins plus
merci,

je redige ta requette tout de suite...
Ajouter un commentaire
Réponse
+0
moins plus
ok merci
Ajouter un commentaire
Réponse
+0
moins plus
ok je vais tester sa tout de suite .
Ajouter un commentaire
Réponse
+0
moins plus
voici mon code :

<?
include ('config.php');
$login=$_POST['login'];
$mdp=$_POST['mdp'];

if(empty($_POST["login"])||empty($_POST["mdp"]))
{
echo "Atention un des champs n'est pas correctement remplit.<a href='adminlogin.php'>Verifier</a>.";
}


else
{
$req=" INSERT INTO jean (login, mdp) values ('$login','$mdp')";
mysql_query($req);
mysql_query($query);
include("enregistrement.php");
}
?>


pourais tu m'indiquer ou je dois mettre la fonction que tu m'a proposer?merci
Ajouter un commentaire
Réponse
+0
moins plus
<?php
include ('config.php');
$login=$_POST['login'];
$mdp=$_POST['mdp'];

function user_exists($login)
{
$sql = 'SELECT `id`
FROM `ma table`
WHERE `login` = \'' . addslashes($login) . '\'
LIMIT 1';
$res = mysql_query($sql) or die (mysql_error());
return (mysql_num_rows($res) == 1);
}


if(empty($_POST["login"])||empty($_POST["mdp"]))
{
echo "Atention un des champs n'est pas correctement remplit.<a href='adminlogin.php'>Verifier</a>.";
}


else
{
if (user_exists($login))
{
echo('utilisateur deja enregistrer!<br />');
}
else
{
$req=" INSERT INTO jean (login, mdp) values ('$login','$mdp')";
mysql_query($req) or die(mysql_error());
}
include("enregistrement.php");
}
?>
Ajouter un commentaire
Réponse
+0
moins plus
petite remarque pour ameliorer ton code:

- utilise plus de fonction.
- toujours utiliser mysql_query($req) or die(mysql_error());
- protege t'es requette contre les vilains hacker ;-) avec des addslashes() comme dans ma fonction
Ajouter un commentaire
Réponse
+0
moins plus
merci beaucoup sa fonctionne . a+
Ajouter un commentaire
Ce document intitulé « eviter doublons dans une base de donnee » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?