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 :

insert into doublons [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut insert into doublons
    bonjour à tous,

    Simple documentaliste en proie à la programmation, j'ai un souci avec ma requête SQL et mon code PHP (rien que ça me direz-vous...).

    Je vous explique :

    j'ai 3 tables : photo indexer indexp
    objectif : création d'un formulaire pour la table indexer
    pb : je n'arrive pas à empêcher lenregistrement de doublons dans cette table

    NB : je sais que DISTINCT peut servir mais pas malheureusement dans une requête INSERT (seulement SELECT)
    je sais que l'on peut préciser un UNIQUE mais l'unicité s'applique sur deux champs et pas un !!!

    Bref, je ne vois pas comment empêcher les doublons sur l'ensemble de la table c'est-à-dire sur le couple IDP et IDM (clés étrangères présentes dans ma table indexer)

    Pour plus d'information, voici en résumé mon formulaire et mon fichier de traitement :

    Code html : 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
    25
    26
    27
    <form ACTION="f_traitement_indexer.php" METHOD="get" NAME="f_saisie_indexer">
     
    <table>
     
    <tr><td>veuillez saisir les différents renseignements demandés afin d'enregistrer les nouvelles correspondances</td></tr>
     
    <tr><td>numéro de saisie de la photo : </td>
    <td><INPUT TYPE="TEXT" NAME="IDP" VALUE="" SIZE="30" MAXLENGTH="20"></td></tr>
     
    <tr><td>numéro de saisie du mot-clé : </td>
    <td><INPUT TYPE="TEXT" NAME="IDM" VALUE="" SIZE="30" MAXLENGTH="20"></td></tr>
     
    <tr><td><INPUT TYPE="reset" VALUE="effacer"></td></tr>
    <tr><td><INPUT TYPE="submit" VALUE="valider"></td></tr>
     
     
    <tr><td>pour retrouver le numéro de saisie de la photo en question, 
    <a href="popup/tableau_saisie_photo_popup.php" onclick="window.open(this.href,'nom_fenetre','width=900 , Height=400, scrollbars=yes, rezisable=yes');return false;">
    cliquez ici</a></td></tr>
     
    <tr><td>pour retrouver le numéro de saisie du mot-clé en question, 
    <a href="popup/tableau_saisie_index_popup.php" onclick="window.open(this.href,'nom_fenetre','width=500 , Height=400, scrollbars=yes, rezisable=yes');return false;">
    cliquez ici</a></td></tr>
     
    </table>
     
    </form>
    et...
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?
     
    //recuperation des variables formulaires et affectation dans des variables php
     
    $IDP=$_GET['IDP'];
    $IDM=$_GET['IDM'];
     
    //conditions indispensable pour valider l'enregistrement
     
    if($IDP=='' AND $IDM=='')
    {
    	echo "
    	tralalilala
    	";
    	exit();
    }
    elseif($IDP=='')
    {
    	echo "
    	tralalilala
    	";
    	exit();
    }
    elseif($IDM=='')
    {
    	echo "
    	tralalilala
    	";
    	exit();
    }
     
    //connexion à la base mysql club et message si probleme
     
    $connexion=mysql_connect('localhost','root','') or die ("tralalilala");
    mysql_select_db ('phototheque');
     
     
    //envoi de la requête SQL a la base de donnees
     
    $query=mysql_query ("insert into indexer (IDP,IDM) VALUES ('$IDP','$IDM')") or die ("tralalilala");
     
    //fermeture de la connection
     
    mysql_close($connexion);
     
    ?>
    je me dis qu'il faut rajouter un else stipulant que si la valeur de (IDP+IDM) est différente de celle déjà présente dans la base, alors c'est bon...

    Mais, comment on traduit ça en PHP...?

    PS : si un tutoriel (que je n'ai pas trouvé) explique tout ça, merci de me le préciser.

    Cordialement,
    un documentaliste à l'arrache

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 72
    Par défaut
    Tu peux tester avant la requete d'insertion la présence de tes deux enregistrements dans la table 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
    16
    17
    //Vérification que les données ne sont pas deja enregistrées
    	$sql_recherche = "SELECT * FROM indexer WHERE idp='$idp' AND idm='$idm'";
    	$res_recherche = mysql_query($sql_recherche) or die('Erreur SQL : <br />'.$sql);	
     
    //Si aucun enregistrement n'existe :
    	if (mysql_num_rows($res_recherche) != 0) {			
     
    //envoi de la requête SQL a la base de donnees
     
    $query=mysql_query ("insert into indexer (IDP,IDM) VALUES ('$IDP','$IDM')") or die ("tralalilala");
     
    //fermeture de la connection
     
    mysql_close($connexion);
    } else {
    echo "Enregistrement déja présent.....";
    }

  3. #3
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut
    merci du conseil !!! j'ai testé mais c'est toujours pareil, j'ai toujours des doublons..

    pourtant, c'est bien ça...? :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <?
     
    //recuperation des variables formulaires et affectation dans des variables php
     
    $IDP=$_GET['IDP'];
    $IDM=$_GET['IDM'];
     
    //conditions indispensable pour valider l'enregistrement
     
    if($IDP=='' AND $IDM=='')
    {
    echo "
    tralalilala
    ";
    exit();
    }
    elseif($IDP=='')
    {
    echo "
    tralalilala
    ";
    exit();
    }
    elseif($IDM=='')
    {
    echo "
    tralalilala
    ";
    exit();
    }
     
    //connexion à la base mysql club et message si probleme
     
    $connexion=mysql_connect('localhost','root','') or die ("tralalilala");
    mysql_select_db ('phototheque');
     
    //Vérification que les données ne sont pas deja enregistrées
    	$sql_recherche = "SELECT * FROM indexer WHERE idp='$idp' AND idm='$idm'";
    	$res_recherche = mysql_query($sql_recherche) or die ('Erreur SQL : <br />'.$sql);	
     
    //Si aucun enregistrement n'existe :
    	if (mysql_num_rows($res_recherche) != 0) {	
     
    //envoi de la requête SQL a la base de donnees
     
    $query=mysql_query ("insert into indexer (IDP,IDM) VALUES ('$IDP','$IDM')") or die ("tralalilala");
     
    //fermeture de la connection
     
    mysql_close($connexion);
    } else {
    echo "Enregistrement déja présent.....";
    }
     
    ?>
    un autre me dit d'utiliser un COUNT... ce serait préférable, ou pas...?

  4. #4
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    http://www.developpez.net/forums/sho...d.php?t=256065

    Ca pourrait être sympa déjà de suivre les conseils donnés en réponse sur le forum pour commencer

    Et pour ton test je crois que tu fais le contraire, si un enregistrement existe déjà dans la base tu fais l'ajout sinon tu ne le fais pas.

  5. #5
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut
    pardon, autant pour moi.

    Je vais tenter d'améliorer mes méthodes de recherche sur le site.

    En espérant ne plus poser une seule question,
    Au revoir.

  6. #6
    Membre confirmé Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Par défaut
    malgré le fait que ce message soit résolu, je transmet la solution

    J'ai commis une erreur dans la création de ma base.

    Pour demander à ce qu'un couple de données soit unique, il suffit de préciser lors de la création de la table : PRIMARY KEY (attribut1,attribut2).

    J'ai mal écrit la fonction et maintenant ça marche

    bonne journée

  7. #7
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Citation Envoyé par camzo
    pardon, autant pour moi.

    Je vais tenter d'améliorer mes méthodes de recherche sur le site.

    En espérant ne plus poser une seule question,
    Au revoir.
    Autant je conçois que la fonction de recherche sur le site n'est pas forcément facile à manipuler, autant là je parle d'un topic que tu as créé très récemment, d'où ma remarque au passage (si tu lis pas les réponses quel intérêt ?).

    Citation Envoyé par camzo
    malgré le fait que ce message soit résolu, je transmet la solution
    Encore heureux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Insert into sans doublon
    Par BenoitMaillot dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/12/2012, 22h40
  2. Réponses: 1
    Dernier message: 25/10/2011, 17h36
  3. [MySQL] Doublons dans un insert into pourquoi ?
    Par pasbonte dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/02/2009, 22h13
  4. Réponses: 1
    Dernier message: 18/05/2006, 17h57
  5. [VBA-A] INSERT INTO + PBL DE DOUBLONS
    Par forsay1 dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/04/2006, 11h45

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