IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Eviter les doublons à l'insertion dans une base [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut Eviter les doublons à l'insertion dans une base
    Bonjour,

    J'ai crée un formulaire que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <form name="style" method="post" action="validation_rubrique.php" enctype="multipart/form-data">
    <table width="849">
      	<tr>
    		<td align="center">&nbsp;</td>
    		<td colspan="2" align="center"><div align="left" class="Style5">Saisir une nouvelle rubrique </div></td>
    	</tr>			  	
    	<tr>
    		<td width="265" align="left"><strong>Nom de la nouvelle rubrique :</strong></td>
    		<td colspan="2" align="left"><input type="text" name="rubrique" size="50"></td>
    	</tr>
    	<tr>
    		<td width="265" align="left"><strong>Nom du fichier :</strong></td>
    		<td colspan="2" align="left"><input type="text" name="nomfic" size="50"></td>
    	</tr>		
    	<tr>
    		<td height="39" align="center">&nbsp;</td>
    		<td width="77" align="center"><div align="left"><input type="button" name="Submit3" value="Valider" onClick="securite();"></div></td>
    		<td width="420" align="center"><div align="left"><input type="reset" name="annuler" value="Effacer"></div></td>
    	</tr>
    	<tr>
    		<td colspan="3"><hr></td>				
    	</tr>
    </table>
    </form>
    Et je voudrais qu'à l'insertion il vérifie si les données n'existe pas déjà. Pour l'instant j'ai fais comme ceci mais le controle ne se fait pas, comment faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?
     
    	require("config.php");
     
    	$req2="select nom_style FROM style;";
    	$res2=mysql_query($req2);							
    	echo"$res2";
    		if($_POST['rubrique']!=$res2)
    		{
    			$req = "insert into style values('', '".$_POST['rubrique']."', '".$_POST['nomfic']."')";
    			$verif = mysql_query($req);
    		}
     
    	/*include("liens_internet.php");*/
    ?>
    Merci davance

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je pense que tu devrais revoir le schéma de ta base de données. Dans l'autre sujet (ici) c'est un peu le même thème.

    Tu dois utiliser la clef primaire ou les clefs uniques dans la structure de ta table. MySQL se chargera tout seul de ne pas introduire des tuples dont l'identifiant existe déjà.

    Le souci avec ta vérification actuelle est que tu n'as pas mis de WHERE dans ton SELECT, ce qui fait qu'il va te donner tous les tuples de ta base. Après le mysql_query(), tu dois parcourir tous ces résultats avec mysql_fetch_...().
    Le mieux est d'utiliser la clef primaire ou les clefs uniques.

  3. #3
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Tu ne peux pas faire un echo de $res2 directement!

    Tu dois obligatoirement récupérer tes données avec un mysql_fetch_array ou un mysql_fetch_row.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat=mysql_fetch_row($res2);
    Et ensuite pour ton test, tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_POST['rubrique']!=$resultat[0])
    Je t'invite à aller consulter les excellents tutoriels et faq ici: http://php.developpez.com/

    Tu y trouveras beaucoup de réponses.

  4. #4
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    J'ai ce que tu as dis mais l'insertion se fait comme même

  5. #5
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    J'ai le champ rubrique et nomfic en unique dans ma base de donnée désormais donc logiquement l'insertion ne se fait pas. Le problème c'est que rien ne le dit à l'utilisateur que l'insertion n'a pas pu avoir lieu.

  6. #6
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Citation Envoyé par leloup84
    J'ai ce que tu as dis mais l'insertion se fait comme même
    Pourtant ça n'apparaît pas dans ton code...

  7. #7
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    oui mais j'ai fais cette midification depuis que tu me l'as dit comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?
     
    	require("config.php");
     
    	$req2="select nom_style FROM style where nom_style<>'".$_POST['rubrique']."';";
    	$res2=mysql_query($req2);
    	$resultat=mysql_fetch_row($res2);							
    	if($_POST['rubrique']!=$resultat[0])
    		{
    			$req = "insert into style values('', '".$_POST['rubrique']."', '".$_POST['nomfic']."')";
    			$verif = mysql_query($req);
    		}
     
    	/*include("liens_internet.php");*/
    ?>

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    leloup, maintenant que ta table est correctement structurée, tu n'as plus besoin de SQL pour vérifier si l'insertion peut se faire ou non. À la place, récupère la valeur de retour de mysql_query() et gère les erreurs avec mysql_error().

  9. #9
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Fais un echo de $resultat[0] et de $_POST['rubrique'] pour vérifier s'ils sont différents ou non.

  10. #10
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?
     
    	require("config.php");
     
    	$req2="select nom_style FROM style where nom_style<>'".$_POST['rubrique']."';";
    	$res2=mysql_query($req2);
    	$resultat=mysql_fetch_row($res2);							
    	if($_POST['rubrique']==$resultat[0])
    	{
    		msgbox("Rubrique déjà existente");
    	}
    	else
    	{
    		$req = "insert into style values('', '".$_POST['rubrique']."', '".$_POST['nomfic']."')";
    		$verif = mysql_query($req);
    	}
     
    	/*include("liens_internet.php");*/
    ?>
    Voilà comment je mis prend donc si je fais une insertion d'une donnée qui existe déjà çà devrait m'afficher le message non ?

  11. #11
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Oui, ça me semble correct, c'est pour ça que je te demande de faire les echos de mon post précédent, pour essayer de vérifier les données...

  12. #12
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    pour $resultat il m'affiche Array

  13. #13
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    et pour $_POST['rubrique'] il m'affiche bien le nom de ma rubrique

  14. #14
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Tu fais bien un :

  15. #15
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    ok c'est bon çà marche maintenant çà coince au niveau du message d'erreur pourquoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to undefined function msgbox()

  16. #16
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Citation Envoyé par leloup84
    ok c'est bon çà marche maintenant çà coince au niveau du message d'erreur pourquoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to undefined function msgbox()
    C'était quoi l'erreur?

    L'erreur sur msgbox, c'est parce que tu appelles une fonction qui n'est pas définie. Cette fonction est-elle codée dans la même page ou dans un autre script?
    Si c'est un autre script, as-tu fais l'include correspondant?

  17. #17
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?
     
    	require("config.php");
     
    	$req2="select nom_style FROM style where nom_style='".$_POST['rubrique']."';";
    	$res2=mysql_query($req2);
    	$resultat=mysql_fetch_row($res2);
     
    	if($_POST['rubrique']==$resultat[0])
    	{
    		msgbox("Rubrique déjà existente");
    	}
    	else
    	{
    		$req = "insert into style values('', '".$_POST['rubrique']."', '".$_POST['nomfic']."')";
    		$verif = mysql_query($req);
    	}
     
    	/*include("liens_internet.php");*/
    ?>
    Tu vois je fais le msgbox dans le même script et il me met l'erreur au niveau dee cette ligne

  18. #18
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Citation Envoyé par leloup84
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?
     
    	require("config.php");
     
    	$req2="select nom_style FROM style where nom_style='".$_POST['rubrique']."';";
    	$res2=mysql_query($req2);
    	$resultat=mysql_fetch_row($res2);
     
    	if($_POST['rubrique']==$resultat[0])
    	{
    		msgbox("Rubrique déjà existente");
    	}
    	else
    	{
    		$req = "insert into style values('', '".$_POST['rubrique']."', '".$_POST['nomfic']."')";
    		$verif = mysql_query($req);
    	}
     
    	/*include("liens_internet.php");*/
    ?>
    Tu vois je fais le msgbox dans le même script et il me met l'erreur au niveau dee cette ligne
    Non, là tu fais un appel à la fonction msgbox() mais elle n'est définie nul part!

    Plus simple, remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox("Rubrique déjà existente");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Rubrique déjà existente";
    Et alors quelle était l'erreur pour ton précédent problème?

  19. #19
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    Ok comme cela çà marche mais le message s'affiche sur une page toute blanche ce n'est pas super. Moi je voulais que cela s'affiche comme un message d'alerte (les petites fenêtres grise comme quand l'on fait un contrôle sur un formulaire)

  20. #20
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Alors là, il faut passer par du javascript:

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Requête d'insertion dans une base ACCESS
    Par kurul1 dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/11/2006, 17h41
  2. stocker les nom de fichiers dans une base
    Par Corben dans le forum Windows
    Réponses: 2
    Dernier message: 04/01/2006, 15h50
  3. [Xquery] faire un insert dans une base
    Par Batou dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 13/12/2005, 01h07
  4. [C#] Insertion dans une base Access .mdb
    Par borgfabr dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/03/2005, 15h30
  5. Réponses: 10
    Dernier message: 24/02/2005, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo