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 :

Update SET erroné [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut Update SET erroné
    Bonjour,

    J'essai de faire une maj des informations utilisateurs via un formulaire. Je n'ai aucune erreur lorsque j'applique ces MAJ mais ça ne les enregistres pas dans la BDD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function update_settings(&$frm) {
    global $SESSION;	
    $sql = "
    UPDATE utilisateurs SET
    email = '$frm[email]'
    ,adresse = '".htmlspecialchars($frm['adresse'], ENT_QUOTES)."'
    ,code_postal = '$frm[code_postal]'
    ,ville = '".strtoupper(htmlspecialchars($frm['ville'], ENT_QUOTES))."'
    WHERE id_utilisateurs = '".intval($frm['id_utilisateurs'])."'
    ";
    $qid = mysql_query($sql);
    }
    Une idée

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Fais un echo de ta requête.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    Je n'ai rien qui s'affiche alors que qu'il devrait y avoir un NULL si il n'y a rien...

    J'ai testé la requete sous phpmyadmin et ça passe sans problème

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Non, je te demande un echo de ta requête ($sql).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    j'ai fais un echo $sql; et ça ne m'affiche rien

  6. #6
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Citation Envoyé par djinko
    j'ai fais un echo $sql; et ça ne m'affiche rien
    Tu fais bien cet echo dans la fonction ?
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    Oui, je l'avais mis en dessous de $qid et rien se s'affichait. Placé au dessus et ça fonctionne

    Y'a un problème à ce niveau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE id_utilisateurs = '".intval($frm['id_utilisateurs'])."'
    Car il renvoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE id_utilisateurs = '0'

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Donc a priori le problème vient du contenu de $frm['id_utilisateurs'], non ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    Ouaip!

    J'ai cela comme bout de code, je ne vois pas ce qui manque...

    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
     
    if (sizeof($HTTP_POST_VARS) > 0) {
    $frm = $HTTP_POST_VARS;
    $message_erreur = valide_form($frm, $erreurs);
    if (empty($message_erreur)) {
    update_settings($frm);
    $noticemsg = "La modification de vos paramètres a été effectuée";
    }
    } else {
    $frm = charge_infos_utilisateurs();
    }
    function charge_infos_utilisateurs() {
    $qid = mysql_query("SELECT * FROM utilisateurs
    WHERE
    id_utilisateurs = '".addslashes($_SESSION['utilisateur']['id_utilisateurs'])."'
    ");	
    return mysql_fetch_array($qid);
     
    }
    function update_settings(&$frm) {
    global $SESSION;	
    $sql = "
    UPDATE utilisateurs SET
    email = '$frm[email]'
    ,adresse = '".htmlspecialchars($frm['adresse'], ENT_QUOTES)."'
    ,code_postal = '$frm[code_postal]'
    ,ville = '".strtoupper(htmlspecialchars($frm['ville'], ENT_QUOTES))."'
    WHERE id_utilisateurs = '".intval($frm['id_utilisateurs'])."'
    ";
    $qid = mysql_query($sql);
    }
    Je n'ai pas rajouté le bout de code de la fonction valide_form pour ne pas être embrouillé mais il est dans la page

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Quelques remarques :
    1) $HTTP_POST_VARS est déprécié. Tu dois utiliser $_POST.
    2) $_SESSION est un tableau superglobal : inutile de le déclarer en global dans une fonction.
    3) Fais un var_dump($frm) dans ta fonction update_settings(&$frm)

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    Merci pour les remarques , je ferai les modifs

    En ce qui concerne le var_dump, cela affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    array(11) { 
    ["email"]=> string(9) "toto@toto.fr" 
    ["adresse"]=> string(19) "12 rue de la chance" 
    ["code_postal"]=> string(5) "02000" 
    ....etc....
    "Modifier les paramètres" }

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Il manque juste le id_utilisateurs dans ton post

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    ola, je m'égare

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    array(11) { 
    ["email"]=> string(9) "toto@toto.fr" 
    ["adresse"]=> string(19) "12 rue de la chance" 
    ["code_postal"]=> string(5) "02000" 
    ....etc....
    "Modifier les paramètres" }
    UPDATE utilisateurs SET 
    email = 'tata@tata.fr' 
    ,adresse = '12 rue de la chance' 
    ,code_postal = '14000' 
    WHERE id_utilisateurs = '0'

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Non, dans le var_dump.
    => je veux vérifier le contenu de ta variable pour voir ce qui cloche.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    Le résultat de var_dump est complet au dessus

    Le code de la page modif :

    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
     
    if (sizeof($HTTP_POST_VARS) > 0) {
    $frm = $HTTP_POST_VARS;
    $message_erreur = valide_form($frm, $erreurs);
    if (empty($message_erreur)) {
    update_settings($frm);
    $noticemsg = "La modification de vos paramètres a été effectuée";
    }
    } else {
    $frm = charge_infos_utilisateurs();
    }
    if (empty($noticemsg)) 
    include("modeles/modif_form.php");
    else {
    echo $noticemsg;
    }
    function charge_infos_utilisateurs() {
    $qid = mysql_query("SELECT * FROM utilisateurs
    WHERE
    id_utilisateurs = '".addslashes($_SESSION['utilisateur']['id_utilisateurs])."'
     
    ");
    return mysql_fetch_array($qid);
    }
    function valide_form(&$frm, &$erreurs) {
    $erreurs = array();
    $msg = array();
    if (empty($frm['email'])) {
    $erreurs['email'] = true;
    $msg['email'] = " Adresse électronique manquante";
    }
    return $msg;
    }
    function update_settings(&$frm) {
    var_dump($frm);
    global $SESSION;	
    $sql = "
    UPDATE utilisateurs SET
    email = '$frm[email]'
    ,adresse = '".htmlspecialchars($frm['adresse'], ENT_QUOTES)."'
    ,code_postal = '$frm[code_postal]'
    ,ville = '".strtoupper(htmlspecialchars($frm['ville'], ENT_QUOTES))."'
    WHERE id_utilisateurs = '".intval($frm['id_utilisateurs'])."'
     
    #- On s'assure que la méthode est bien POST
    if(!$_SERVER['REQUEST_METHOD'] == "POST")
    {
      die ("pas d'autorisation pour visualiser cette page.");
      exit;  
    }
    echo $sql;
    $qid = mysql_query($sql);
     
    }
    Le code de la page modif_form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form name="entryform" method="post" 
    action="<?php echo $_SERVER['PHP_SELF']?>">
    <input name="email" type="text" class="formulaire1" 
    value="<?php echo stripslashes(vb($frm['email']))?>" 
    size="30" />
    etc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function vb(&$var, $default="") { 
    return isset($var) ? $var : $default;
    }
    C'est tout ce que j'ai...

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    ta variable $frm ne contient que ["email"], ["adresse"] et ["code_postal"] ?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    Non pas exactement. Elle contient plusieurs champs mais identique à ceux là, juste le nom qui change.

    C'est une galère mais il faut que j'y arrive

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Justement, donne-moi le var_dump complet de ta variable, ou au moins le contenu de ['id_utilisateurs'] ! Sinon, on ne saura pas pourquoi il renvoie '0' comme id !

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    J'ai fais un VAR_DUMP dans la fonction function update_settings(&$frm) {
    sous la requete sql comme suit :
    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
     
    function update_settings(&$frm) {
    global $SESSION;
     
    $sql = "UPDATE utilisateurs SET
    adresse = '".htmlspecialchars($frm['adresse'], ENT_QUOTES)."'
    ,code_postal = '$frm[code_postal]'
    ,ville = '".strtoupper(htmlspecialchars($frm['ville'], ENT_QUOTES))."'
    ,pays = '".htmlspecialchars($frm['pays'], ENT_QUOTES)."'
    ,telephone = '$frm[telephone]'
    ,description = '".htmlspecialchars($frm['description'], ENT_QUOTES)."
    ,site_internet = '$frm[site_internet]'
     
    WHERE id_utilisateurs = '".intval($frm['id_utilisateurs'])."'
    ";
    var_dump($frm,$sql);
    $qid = mysql_query($sql);
    }
    et voici la réponse :
    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
     
    array(11) { 
    ["adresse"]=> string(6) "38 rue" 
    ["code_postal"]=> string(5) "52000" 
    ["ville"]=> string(4) "LANGRES" 
    ["pays"]=> string(6) "France" 
    ["telephone"]=> string(7) "1321321" 
    ["description"]=> string(15) "123132101521432" 
    ["site_internet"]=> string(17) "http://www.toto.fr" 
    ["submit"]=> string(23) "Modifier les paramètres" } 
    string(299) " UPDATE utilisateurs SET 
    adresse = '38 rue' 
    ,code_postal = '52000' 
    ,ville = 'LANGRES' 
    ,pays = 'France' 
    ,telephone = '1321321' 
    ,description = '123132101521432 
    ,site_internet = 'http://www.toto.fr' WHERE id_utilisateurs = '0' "
    Voilà

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 181
    Points : 74
    Points
    74
    Par défaut
    J'ai trouvé pour retrouver le bon ID mais par contre, l'enregistrement des modifications ne se font toujours pas dans la table :

    Il manquait cette ligne dans le formulaire de modification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="id_utilisateurs" value="<?php echo $_SESSION['utilisateur']['id_utilisateurs']?>" />

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

Discussions similaires

  1. requete update set
    Par wissem_dev dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/04/2007, 13h25
  2. [MySQL] Update SET
    Par djinko dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 29/03/2006, 14h47
  3. UPDATE * SET php/mysql
    Par Invité dans le forum Requêtes
    Réponses: 13
    Dernier message: 28/03/2006, 11h47
  4. [INTERBASE][UPDATE SET WHERE] problème de requete
    Par exclusif dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/03/2006, 21h10
  5. Réponses: 2
    Dernier message: 02/12/2005, 17h40

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