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 :

[Conception] INSERT fonctionne a moitié, UPDATE Fonctionne, comprends pas?


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut [Conception] INSERT fonctionne a moitié, UPDATE Fonctionne, comprends pas?
    Bonjour le forum,

    Juste une petite aide, je ne comprends pas pourquoi ce code ne fonctionne qu'a moitié :


    <?PHP

    $server = "";
    $user = "";
    $password = "";
    $base = "";
    $table = $_GET['table'];
    mysql_connect($server,$user,$password);
    mysql_select_db($base);

    $leg=substr($stade,0,1);

    $result=mysql_query("SELECT * FROM $table WHERE mail='$mail'") or die(mysql_error());
    $nbre_rangs=mysql_num_rows($result);
    if ($nbre_rangs == 1)
    {
    $modif=mysql_query("UPDATE $table SET stade='$stade', legende='$leg', reponse='$reponse', motif='$motif' WHERE nom='$nom'") or die(mysql_error()); if (!$modif)
    { return(FALSE); }
    }
    else
    {
    $odif=mysql_query("INSERT INTO $table VALUES ('$stade','$leg','$reponse','$motif')") or die(mysql_error());
    if (!$modif)
    { return(FALSE); }
    }
    echo "$leg";
    ?>
    Ce code (valide.php) fait suite a un fomulaire qui renvoie les infos dans ma BDD via action="valide.php".

    JE comprends pas pourquoi il faut que j'appel deux fois le code (valide.php) pour que cela fonctionne, c'est comme si l'insert ne fonctionnait pas et que l'update seul fonctionnait.

    J'en deduit ca car en fait l'insert fonctionnerai qu'a moitié, et il faut un update derriere pour que la BDD soit completement remplie .

    Je me suis dis que cela pouvait venir eventuellement de la variable ;
    $leg=substr($stade,0,1);

    qui était peut etre mal placée.........peut etre trop top dans le code.

    Je précise également que si j'enleve la variable $leg=substr($stade,0,1);
    et que je mette directement legende='substr($stade,0,1)', cela ne fonctionne pas.....


    MErci pour votre aide, j'ai du mal a comprendre.

    Bonne journée

  2. #2
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Salut

    Déjà, c'est louche ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $odif=mysql_query("INSERT INTO $table VALUES.........
    Ensuite, ton formulaire envoie en mode Post ou Get ?
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  3. #3
    Membre confirmé Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    Points : 587
    Points
    587
    Par défaut
    Bonjour,

    1) d'ou viennent et comment viennent les variables $stade, $motif, $nom,..
    2) remarque conceptuelle tu insère un if après chaque query
    $modif=mysql_query("UPDATE $table SET stade='$stade', legende='$leg', reponse='$reponse', motif='$motif' WHERE nom='$nom'") or die(mysql_error()); if (!$modif)
    { return(FALSE); }
    or d'après moi (corrigez-moi si je me trompe) le or die arrête le script si il y a une erreur. donc le if ne sera jamais à false puisque si il l'est c'est qu'il y a une erreur et à ce moment le die ferme le script
    3) vraiment pour le fun : si par hasard tu as une inscription en double, la condition mysql_num_rows retournera un nombre différent de 1 et donc tu feras un insert --> tu crées un troisième enregistrement. AMHA il faudrait tester la non-réponse plutot que l'unicité de celle-ci.
    [gilled] pour post ou get
    Lu kinze d' awousse, la Vierje arandje û dusbrôle lu timp.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    J'avais pas fait gaffe pour le odif, normalement c'est modif

    Ensuite je suis bien en POST

    MErci de ta prémière réponse

  5. #5
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par kaolivier
    J'avais pas fait gaffe pour le odif, normalement c'est modif

    Ensuite je suis bien en POST

    MErci de ta prémière réponse
    $table = $_GET['table'];
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Marche toujours pas completement la fonction INSERT avec ce code :

    mysql_connect($server,$user,$password);
    mysql_select_db($base);

    $result=mysql_query("SELECT * FROM $table WHERE mail='$mail'");
    $nbre_rangs=mysql_num_rows($result);
    $leg=substr($stade,0,1);
    if ($nbre_rangs == 1)
    {
    $modif=mysql_query("UPDATE $table SET stade='$stade', legende='$leg', reponse='$response', motif='$motif' WHERE nom='$nom'"); if (!$modif)
    { return(FALSE); }
    }
    else
    {
    $modif=mysql_query("INSERT INTO $table VALUES ('$stade','$leg','$reponse','$motif')");
    if (!$modif)
    { return(FALSE); }
    }

    De plus je ne comprends pas car si je fais :
    echo "$leg";
    echo "$motif";

    Les infos apparaissent pas mais $motif n'est pas inséré dans la BDD


    OK pour GET et POST mais cela n'explique pas pourquoi l'UPDATE fonctionne et pourquoi l'INSERT ne fonctionne pas competement car une seule partie des infos sont bien insérée.

    Merci de votre patience.

  7. #7
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    1/ Comme suggéré par papyphp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    $modif=mysql_query("INSERT INTO $table VALUES ('$stade','$leg','$reponse','$motif')")
    or die(mysql_error());
    2/ c'est mieux ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    $modif=mysql_query("INSERT INTO $table(stade, legende, repose, motif) VALUES ('$stade','$leg','$reponse','$motif')")
    or die(mysql_error());
    3/Et enfin, ta requête ne peut pas fonctionner car il n'y a pas que 4 champs dans ta table comme le laisse soupçonner ta requête d'insertion.
    Il y a aussi les champs mail, nom....et peut-être d'autres ? hum !

    Donc c'est logique que ton update fonctionne puisque tu ne sélectionnes que les champs à modifier.
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Plus rien ne fonctionne

    Je vais revoir tout ça cet aprés midi

    Merci

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Je comprends pas il y a toujours deux variables qui ne fonctinnent pas voic le code complet :


    $leg=substr($stade,0,1);

    mysql_connect($server,$user,$password);
    mysql_select_db($base);

    $result=mysql_query("SELECT * FROM $table WHERE mail='$mail'");
    $nbre_rangs=mysql_num_rows($result);
    if ($nbre_rangs == 1)
    {
    echo "$tauxn";
    echo "$frp";

    $modif=mysql_query("UPDATE $table SET stade='$stade', nom='$nom', prenom='$prenom', adresse_postale='$adresse', mail='$mail', telephone='$tel', mise_a_jour='$maj', taux_nature='$tauxn',frais_b='$frb', frais_n='$frn', frais_p='$frp', legende='$leg'' WHERE nom='$nom'");
    if (!$modif)
    { return(FALSE); }
    }
    else
    {
    $modif1=mysql_query("INSERT INTO $table(stade, nom, prenom, adresse_postale, mail, telephone, mise_a_jour, taux_nature, frais_b, frais_n, frais_p, legende, reponse, motif) VALUES ('$stade', '$nom','$prenom', '$adresse','$mail','$tel','$maj','tauxn','$frb','$frn','$frp','$leg','$reponse','$motif')");
    if (!$modif1)
    { return(FALSE); }
    }
    ?>
    Les deux echos me renvoient bien les valeurs présentes dans le formulaire (tauxn=3 et frp=3000), mais quand je regarde ma BDD il est inscrit dedans :

    pour tauxn > j'ai le mot tauxn alors que je devrais avoir la valeur correspondante soit 3
    pour frp >, je n'ai rien, c'est vide alors que je devrais avoir la valeur correspondante soit 3000

    Je suis un peu desespéré, car je ne comprends pas le PB

  10. #10
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par kaolivier

    Les deux echos me renvoient bien les valeurs présentes dans le formulaire (tauxn=3 et frp=3000), mais quand je regarde ma BDD il est inscrit dedans :

    pour tauxn > j'ai le mot tauxn.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    $modif1=mysql_query("INSERT INTO $table(stade, nom, prenom, adresse_postale, mail, telephone, mise_a_jour, taux_nature, frais_b, frais_n, frais_p, legende, reponse, motif) 
    VALUES ('$stade', '$nom','$prenom', '$adresse','$mail','$tel','$maj','tauxn','$frb','$frn','$frp','$leg','$reponse','$motif')");
    ==>>$tauxn

    S'cuse-moi de te le dire, mais il y a de la négligence dans ce que tu fais...tu te relis ?
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 85
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Alain31 --> <-- kaolivier.....

    Ton script devrait fonctionner avec la dernière réponse de Alain31tl.

    Bonne chance...

  12. #12
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Je comprend plus trop ou est le probleme la ?
    Il faut un code et des explications precises .... Car "le code fonctionne a moitié" ... hum hum
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par alain31tl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    $modif1=mysql_query("INSERT INTO $table(stade, nom, prenom, adresse_postale, mail, telephone, mise_a_jour, taux_nature, frais_b, frais_n, frais_p, legende, reponse, motif) 
    VALUES ('$stade', '$nom','$prenom', '$adresse','$mail','$tel','$maj','tauxn','$frb','$frn','$frp','$leg','$reponse','$motif')");
    ==>>$tauxn

    S'cuse-moi de te le dire, mais il y a de la négligence dans ce que tu fais...tu te relis ?
    Merci pour la flagelation, mais je ne suis pas amateur .

    Effectivement, lorsque j'ai mis le code sur ce post j'ai mal copié, mais dans mon code le $ se trouve bien devant tauxn, et de plus il y a bien aussi dans le code mal écrit sur ce post un $frp de partout et pourtant avec $tauxn, ce sont les deux variables qui ne fonctionnent pas..............


    Merci a tous

  14. #14
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Pas amateur, mais 6 couilles quand même dans 10 lignes de script !
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Mais la "couille" c'est surtout que ç ane marche toujours pas............

    Donc si j'ai fait des erreurs c'est parce que j'ai fait des teste aussi, car les erreurs ne sont pas les memes d'un code a l'autre dans mon post, donc......soyons un tout petit peu compréhensif, je suis sur le PB depuis exactement 22H non stop..........

    Merci de ta gentillesse et de ta comprehension

    Je prefere laisser tomber, merci en tout cas a tous du temps que vous avez consacré a m'aider meme si le resultat na été satisfaisant par ma faute.

    J'apprécie énormement ce forum et je respect tous ses membres pour tout le temps qu'ils consacrent a aider les autres.

    Bonne journée a tous...

  16. #16
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Bon !

    Dans l'ordre des choses :

    Pour $tauxn....c'est réglé ? inséré dans ta table ?
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

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

Discussions similaires

  1. Ma jolie macro fonctionne mais je ne comprends pas pourquoi ^
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/07/2007, 06h06
  2. Réponses: 1
    Dernier message: 22/05/2007, 12h51
  3. stencil buffer : comprend pas son fonctionnement
    Par casafa dans le forum OpenGL
    Réponses: 8
    Dernier message: 28/04/2007, 08h53
  4. [MySQL] UPDATE fonctionne sur un hébergement et pas sur l'autre
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/05/2006, 10h00
  5. gestionnaire fonctionnant à moitié
    Par Pallas4 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 02/05/2006, 18h23

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