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 :

Mise à jour de plusieurs colonnes avec foreach [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut Mise à jour de plusieurs colonnes avec foreach
    Salut et bon dimanche à tous.

    Je suis en train d'essayer un script pour faire la mise à jour sur plusieurs enregistrement provenant d'une même table à travers un formulaire sur une seule action.

    Voici le code du form (quelques balises html en moins):

    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
    <form method="post" action="modif.php" enctype="multipart/form-data">
    <?php
    $link = mysql_connect($hostname, $username, $password);
    $sql="SELECT * FROM matable WHERE type='menu' " ;
    $a = mysql_db_query($database, $sql);
    while ($b=mysql_fetch_row($a)){
    $cpt++;
    ?>
    <input name="id" type="hidden" id="id" value="<? echo $b[0] ?>">
    <input name="nom" type="text" id="nom" value="<? echo $b[2] ?>">
    <input name="desc" type="text" id="desc" value="<? echo $b[4] ?>">
    <input name="prix" type="text" id="prix" value="<? echo $b[3] ?>">
     
    <? 
    } 
    ?>
    </form>
    Et le code du fichier d'update "modif.php" :

    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
    <?php require("../connex.php"); ?>
     
    if (isset($_POST['id'])) {
    $id = $_POST['id'];
    $nom = $_POST['nom'];
    $prix=$_POST['prix'];
    $desc=$_POST['desc'];
     
    foreach ($_POST['id']  as $valeur) {
    $requete = "UPDATE matable SET nom='$nom[$valeur]', prix='$prix[$valeur]', desc='$desc[$valeur]' WHERE id = $valeur";
     $result = mysql_query($requete);
     }
    }
     
    $link = mysql_connect($hostname, $username, $password);
    $result = mysql_db_query($database, $requete);
    mysql_close($link); 
    ?>

    Mais voici le message d'erreur que me renvoie la requète:
    "Warning : invalid argument supplied for foreach() in ..."
    la ligne d'erreur étant celle-là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($_POST['id']  as $valeur) {
    Si quelqu'un d'entre vous avait une solution, ça me dépannerait super!

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    il fait faire comme ce
    name="id[]"

    et tes id doivent etre unique en html

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Merci stealth35 pour ta réponse.

    houlala, effectivement aucun message d'erreur n'est retourné par contre ça efface les enregistrements!

    Qu'est-ce que tu entends par id unique en html ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par budiartaaa Voir le message
    Merci stealth35 pour ta réponse.

    houlala, effectivement aucun message d'erreur n'est retourné par contre ça efface les enregistrements!

    Qu'est-ce que tu entends par id unique en html ?
    l'id doit etre unique, or la a chaque fois y'a id="id", id="nom"...
    sois tu fais id="id1" id2 id3, sois tu mets pas d'id

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    stealth35, merci encore d'avoir pris le temps de réfléchir sur mon post, mais je passe par une boucle pour retourner un tableau avec plusieurs lignes d'enregistrement.

    Lorsque j'envoi mon formulaire, je ne peux pas mettre un id unique.
    Sinon cela veut dire que je dois faire un update pour chaque ligne séparément. Or c'est pas le but de la manoeuvre.

    A moins qu'il ne soit pas possible de faire un update sur plusieurs lignes en même temps??? Il me semblait que c'était possible pourtant.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par budiartaaa Voir le message
    stealth35, merci encore d'avoir pris le temps de réfléchir sur mon post, mais je passe par une boucle pour retourner un tableau avec plusieurs lignes d'enregistrement.

    Lorsque j'envoi mon formulaire, je ne peux pas mettre un id unique.
    Sinon cela veut dire que je dois faire un update pour chaque ligne séparément. Or c'est pas le but de la manoeuvre.

    A moins qu'il ne soit pas possible de faire un update sur plusieurs lignes en même temps??? Il me semblait que c'était possible pourtant.
    l'id et le name sont 2 choses différentes, tu peu mettre un truc bidon dans ton id mais assure toi qu'il sois unique pour chaque element html

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    j'ai fait plusieurs tests à partit de ton idée mais ça ne fait qu'effacer l'enregistrement (même avec des attributs uniques id de mes inputs

    Personne d'autres n'a déjà eu ce cas de figure d'un update unique sur plusieurs lignes d'un tableau dynamique à partir d'une requète du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql="SELECT * FROM matable WHERE type='menu' " ;
    $a = mysql_db_query($database, $sql);
    while ($b=mysql_fetch_row($a)){
    $cpt++;
    ????

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 99
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    concernant ton formulaire :
    - change le nom des champs
    - ajoute un champs qui contiendra le maxi.

    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
     
    <form method="post" action="modif.php" enctype="multipart/form-data">
    <?php
    $link = mysql_connect($hostname, $username, $password);
    $sql="SELECT * FROM matable WHERE type='menu' " ;
    $a = mysql_db_query($database, $sql);
    while ($b=mysql_fetch_row($a)){
    $cpt++;
    ?>
    <input name="id" type="hidden" id="id_<?php echo $cpt ?>" value="<? echo $b[0] ?>">
    <input name="nom" type="text" id="nom_<?php echo $cpt ?>"  value="<? echo $b[2] ?>">
    <input name="desc" type="text" id="desc_<?php echo $cpt ?>"  value="<? echo $b[4] ?>">
    <input name="prix" type="text" id="prix_<?php echo $cpt ?>"  value="<? echo $b[3] ?>">
     
    <? 
    } 
    ?>
    <input name="total" type="hidden" id="total" value="<? echo $cpt ?>">
    Pour ton fichier update, l'idée était là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (isset($_POST['maxi'])) {
     
    for($i = 0 ; $i < $_POST['maxi'] ; $i++)
    {
      $requete = "UPDATE matable SET nom='".$_POST["nom".$i]."', prix='".$_POST["prix".$i]."', desc='".$_POST["desc".$i]."' WHERE id = '".$_POST["id".$i]."'";
     $result = mysql_query($requete);
     }
    }
     
    $link = mysql_connect($hostname, $username, $password);
    $result = mysql_db_query($database, $requete);
    mysql_close($link);
    J'espère que ca pourra t'aider

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pourquoi creer des variable en plus ?

    pour l'id il peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id_<?php echo echo $b[0]?>
    //pour le name 
    nom_<?php echo $b[0] ?> 
    //ect.
    le total c'est quoi ? ta mis mxi apres en plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i = 0 ; $i < $_POST['maxi'] ; $i++)
    sois tu parcours simplement id ($_POST['id']) avec un foreach
    sois faire un array_map sur id, name ....

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Vu que tous les éléments dans le formulaire en boucle doivent être renvoyés, il faut que chaque éléments soient uniques, aussi bien l'attribut name que id.

    Petite parenthèse.
    Si les attributs id des INPUT ne sont pas exploités (Css ou/et Javascript) ça ne sert à rien de les mettre.

    Essai comme ci-dessous, c'est théoriquement le plus adapté et plus simple au bout.
    Partie formulaire :
    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
     
    <form method="post" action="modif.php" enctype="multipart/form-data">
    <?php
    $sql = "SELECT id, nom, desc, prix FROM matable WHERE type='menu'";
    $rs_menu = mysql_query($sql);
     
    $cpt = 0;
    while ($menu = mysql_fetch_array($rs_menu)) {
    ?>
    <input name="menu[<?php echo $cpt; ?>][id]" type="hidden" id="menu[<?php echo $cpt; ?>][id]" value="<?php echo (int)$menu['id'] ?>">
    <input name="menu[<?php echo $cpt; ?>][nom]" type="text" id="menu[<?php echo $cpt; ?>][nom]" value="<?php echo $menu['nom'] ?>">
    <input name="menu[<?php echo $cpt; ?>][desc]" type="text" id="menu[<?php echo $cpt; ?>][desc]" value="<?php echo $menu['desc'] ?>">
    <input name="menu[<?php echo $cpt; ?>][prix]" type="text" id="menu[<?php echo $cpt; ?>][prix]" value="<?php echo $menu['prix'] ?>">
    <?php
        $cpt++;
    }
    ?>
    </form>
    Partie update :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    if (isset($_POST['menu'])) {
        foreach ($_POST['menu'] as $key => $menu) {
            $requete = "UPDATE matable SET nom='".$menu[$key]['nom']."', prix='".$menu[$key]['prix']."', desc='".$menu[$key]['desc']."' WHERE id = ".(int)$menu[$key]['id'];
            $result = mysql_query($requete);
        }
    }
    ?>
    Je n'est pas du tout testé, mais théoriquement ça devrait être bon.
    Aussi, c'est une mise à jour directe, sans l'ombre d'une vérification.
    Il faut au minimum rajouter des mysql_real_escape_string() pour tout ce qui est chaines de caractères.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut

    Vu que tous les éléments dans le formulaire en boucle doivent être renvoyés, il faut que chaque éléments soient uniques, aussi bien l'attribut name que id.

    Petite parenthèse.
    Si les attributs id des INPUT ne sont pas exploités (Css ou/et Javascript) ça ne sert à rien de les mettre.

    Essai comme ci-dessous, c'est théoriquement le plus adapté et plus simple au bout.
    Partie formulaire :
    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
     
    <form method="post" action="modif.php" enctype="multipart/form-data">
    <?php
    $sql = "SELECT id, nom, desc, prix FROM matable WHERE type='menu'";
    $rs_menu = mysql_query($sql);
     
    $cpt = 0;
    while ($menu = mysql_fetch_array($rs_menu)) {
    ?>
    <input name="menu[<?php echo $cpt; ?>][id]" type="hidden" id="menu[<?php echo $cpt; ?>][id]" value="<?php echo (int)$menu['id'] ?>">
    <input name="menu[<?php echo $cpt; ?>][nom]" type="text" id="menu[<?php echo $cpt; ?>][nom]" value="<?php echo $menu['nom'] ?>">
    <input name="menu[<?php echo $cpt; ?>][desc]" type="text" id="menu[<?php echo $cpt; ?>][desc]" value="<?php echo $menu['desc'] ?>">
    <input name="menu[<?php echo $cpt; ?>][prix]" type="text" id="menu[<?php echo $cpt; ?>][prix]" value="<?php echo $menu['prix'] ?>">
    <?php
        $cpt++;
    }
    ?>
    </form>
    Partie update :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    if (isset($_POST['menu'])) {
        foreach ($_POST['menu'] as $key => $menu) {
            $requete = "UPDATE matable SET nom='".$menu[$key]['nom']."', prix='".$menu[$key]['prix']."', desc='".$menu[$key]['desc']."' WHERE id = ".(int)$menu[$key]['id'];
            $result = mysql_query($requete);
        }
    }
    ?>
    Je n'est pas du tout testé, mais théoriquement ça devrait être bon.
    Aussi, c'est une mise à jour directe, sans l'ombre d'une vérification.
    Il faut au minimum rajouter des mysql_real_escape_string() pour tout ce qui est chaines de caractères.
    Je viens de tester mais j'ai un message d'erreur sur le mysql_fetch_array:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in ...
    Ca te dis qqchose RunCodePhp?

    Sinon j'ai bien essayé aussi vos pistes stealth35 et anthony89, mais il ne se passe rien après l'update... je continue de ramer dur mais bon on va bien y arriver!

    En tout les cas je pense que c'est un cas qui pourrais resservir à bien d'autres donc j'espère que vous pourrez m'aider à trouver la solution. En attendant je cherche...

  12. #12
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Warning: mysql_fetch_row():... etc ...
    Par rapport au code que j'ai effectué, je n'est pas utilisé de fonction mysql_fetch_row() mais mysql_fetch_array(), donc j'en sais trop rien comment tu as effectué tout ça.

    Remet ton code au besoin pour qu'on puisse voir comment tu l'as remanier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT id, nom, desc, prix FROM matable WHERE type='menu'";
    As tu adapté cette requête avec les noms des champs (id, nom, etc ...) de la table en question ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rs_menu = mysql_query($sql) or exit('Erreur : '.mysql_error());
    Puis rajoute un or exit() + mysq_error() au mysql_query() pour être au courant de l'erreur, car l'erreur plus haut (le mysql_fetch_row) est certainement la conséquence à une 1ère erreur en amont.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Par rapport au code que j'ai effectué, je n'est pas utilisé de fonction mysql_fetch_row() mais mysql_fetch_array(), donc j'en sais trop rien comment tu as effectué tout ça.

    Remet ton code au besoin pour qu'on puisse voir comment tu l'as remanier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT id, nom, desc, prix FROM matable WHERE type='menu'";
    As tu adapté cette requête avec les noms des champs (id, nom, etc ...) de la table en question ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rs_menu = mysql_query($sql) or exit('Erreur : '.mysql_error());
    Puis rajoute un or exit() + mysq_error() au mysql_query() pour être au courant de l'erreur, car l'erreur plus haut (le mysql_fetch_row) est certainement la conséquence à une 1ère erreur en amont.
    L'erreur pour le mysql_fetch_row() comme pour le mysql_fetch_array() provient peut-être du fait que je n'avais pas spécifié mysql_db_query.
    Ceci rectifié, je n'ai plus d'erreur, sauf qu'il ne se passe toujours rien lors de l'update.

    Voici le code d'après ton idée:

    le form:
    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
    $link = mysql_connect($hostname, $username, $password);
    $sql = "SELECT * FROM carte WHERE type='boisson'";
    $rs_menu = mysql_db_query($database, $sql) or exit('Erreur : '.mysql_error());
     
    $cpt = 0;
    while ($menu = mysql_fetch_array($rs_menu)) {
    ?>
     
    <input name="menu[<?php echo $cpt; ?>][id]" type="hidden" id="menu[<?php echo $cpt; ?>][id]" value="<?php echo (int)$menu['id'] ?>">
    <input name="menu[<?php echo $cpt; ?>][nom]" type="text" id="menu[<?php echo $cpt; ?>][nom]" value="<?php echo $menu['nom'] ?>" size="30">
    <input name="menu[<?php echo $cpt; ?>][description]" type="text" id="menu[<?php echo $cpt; ?>][description]" value="<?php echo $menu['description'] ?>" size="70">
    <input name="menu[<?php echo $cpt; ?>][prix]" type="text" id="menu[<?php echo $cpt; ?>][prix]" value="<?php echo $menu['prix'] ?>" size="5">              
    <input name="menu[<?php echo $cpt; ?>][afficher]" type="text" id="menu[<?php echo $cpt; ?>][afficher]" value="<?php echo $menu['afficher'] ?>" size="1">
     
    <?php
    $cpt++;
    }
    ?>
    Et le fichier update:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (isset($_POST['menu'])) {
        foreach ($_POST['menu'] as $key => $menu) {
            $requete = "UPDATE carte SET nom='".$menu[$key]['nom']."', prix='".$menu[$key]['prix']."', description='".$menu[$key]['description']."', afficher='".$menu[$key]['afficher']."' WHERE id = ".(int)$menu[$key]['id'];
            $result = mysql_query($requete);
        }
    }
    Merci pour votre implication les gars.

  14. #14
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    L'erreur pour le mysql_fetch_row() comme pour le mysql_fetch_array() provient peut-être du fait que je n'avais pas spécifié mysql_db_query.
    Ah la la

    Dans le code que je t'ai mis, je n'est pas utiliser mysql_db_query(), mais mysql_query().
    Pourquoi donc faire autrement ?
    Puis comme tu l'as vue cette différence, le réflexe c'est d'aller voir la doc de Php, pour au moins savoir pourquoi.
    La fonction mysql_db_query()
    Et là, tu aurais vu ceci, gras et en rouge :
    Citation Envoyé par Doc Php
    Avertissement

    Cette fonction est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.
    Et aussi :
    Citation Envoyé par Doc Php
    Cette fonction est obsolète depuis PHP 4.0.6. N'utilisez pas cette fonction. Utilisez mysql_select_db() et mysql_query() à la place.
    Donc mysql_db_query() c'est à mettre à la poubelle.
    Je ne sais où tu as trouver ça, mais faut changer de manuel si c'est le cas.


    Aussi, faire soit même un minimum de débug est relativement simple, comme afficher certaines données douteuses, ou pour visualiser/contrôler quelles soient correcte.
    C'est principalement faire des echo, print_r() ou var_dump().

    Exemple :
    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
     
    // On affiche / vérifie (provisoirement) ce que contient le tableau $_POST
    print_r($_POST);
     
    if (isset($_POST['menu'])) {
     
        echo 'On rentre bien dans la condition<br />';
     
        foreach ($_POST['menu'] as $key => $menu) {
     
            echo 'On parcourt bien chaque élément du tableau<br />';
     
            $requete = "UPDATE carte SET nom='".$menu[$key]['nom']."', prix='".$menu[$key]['prix']."', description='".$menu[$key]['description']."', afficher='".$menu[$key]['afficher']."' WHERE id = ".(int)$menu[$key]['id'];
     
            // On affiche/varifie le contenu de chaque requête
            echo $requete.'<br />';
     
            $result = mysql_query($requete);
        }
    }
    Rien qu'avec ça, on peu obtenir des infos intéressantes.

    Aussi, un autre moyen simple pour avoir d'autres infos, c'est de faire un click droit dans la page Web, puis "Code source de la page" pour visualiser le code HTML généré par Php.

    Citation Envoyé par RunCodePhp
    Il faut au minimum rajouter des mysql_real_escape_string() pour tout ce qui est chaines de caractères.
    Je ne l'ai pas vu dans ton dernier code.
    Je te recommande vraiment de les rajoutés au update (voir la doc au besoin).


    Et dernier point.
    Ca se peu qu'au niveau de la boucle foreach() du UPADTE que ça soit comme ceci $menu['nom'] au lieu de ça $menu[$key]['nom'], idem pour les autres.
    A voir et à corriger au besoin.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Ah la la

    Dans le code que je t'ai mis, je n'est pas utiliser mysql_db_query(), mais mysql_query().
    Pourquoi donc faire autrement ?
    Puis comme tu l'as vue cette différence, le réflexe c'est d'aller voir la doc de Php, pour au moins savoir pourquoi.
    La fonction mysql_db_query()
    Et là, tu aurais vu ceci, gras et en rouge :

    Et aussi :
    Donc mysql_db_query() c'est à mettre à la poubelle.
    Je ne sais où tu as trouver ça, mais faut changer de manuel si c'est le cas.


    Aussi, faire soit même un minimum de débug est relativement simple, comme afficher certaines données douteuses, ou pour visualiser/contrôler quelles soient correcte.
    C'est principalement faire des echo, print_r() ou var_dump().

    Exemple :
    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
     
    // On affiche / vérifie (provisoirement) ce que contient le tableau $_POST
    print_r($_POST);
     
    if (isset($_POST['menu'])) {
     
        echo 'On rentre bien dans la condition<br />';
     
        foreach ($_POST['menu'] as $key => $menu) {
     
            echo 'On parcourt bien chaque élément du tableau<br />';
     
            $requete = "UPDATE carte SET nom='".$menu[$key]['nom']."', prix='".$menu[$key]['prix']."', description='".$menu[$key]['description']."', afficher='".$menu[$key]['afficher']."' WHERE id = ".(int)$menu[$key]['id'];
     
            // On affiche/varifie le contenu de chaque requête
            echo $requete.'<br />';
     
            $result = mysql_query($requete);
        }
    }
    Rien qu'avec ça, on peu obtenir des infos intéressantes.

    Aussi, un autre moyen simple pour avoir d'autres infos, c'est de faire un click droit dans la page Web, puis "Code source de la page" pour visualiser le code HTML généré par Php.

    Je ne l'ai pas vu dans ton dernier code.
    Je te recommande vraiment de les rajoutés au update (voir la doc au besoin).


    Et dernier point.
    Ca se peu qu'au niveau de la boucle foreach() du UPADTE que ça soit comme ceci $menu['nom'] au lieu de ça $menu[$key]['nom'], idem pour les autres.
    A voir et à corriger au besoin.
    Merci à toi pour ton approche méthodique cela m'a tout de suite permis de voir où cela pêchait. En enlevant les [$key] dans la requète d'update cela marche effectivement bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (isset($_POST['menu'])) {
        foreach ($_POST['menu'] as $key => $menu) {
            $requete = "UPDATE carte SET nom='".$menu['nom']."', prix='".$menu['prix']."', description='".$menu['description']."', afficher='".$menu['afficher']."' WHERE id = ".(int)$menu['id'];
    		mysql_db_query($database, $requete);
        }
    }
    J'espère que tu m'en veux pas pour garder mysql_db_query mais en utilisant juste mysql_query j'ai un query vide...

    Un grand merci à tous

  16. #16
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    J'espère que tu m'en veux pas pour garder mysql_db_query mais en utilisant juste mysql_query j'ai un query vide...
    Utilisez mysql_select_db() et mysql_query() à la place.
    L'explication est là pourtant.
    Ca peu paraitre absurde, mais il faut utiliser 2 fonctions à la place.
    Prends exemple au niveau de la doc pour corriger la partie connexion.
    -> mysql_select_db()
    -> mysql_query()

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    L'explication est là pourtant.
    Ca peu paraitre absurde, mais il faut utiliser 2 fonctions à la place.
    Prends exemple au niveau de la doc pour corriger la partie connexion.
    -> mysql_select_db()
    -> mysql_query()
    Ok ça marche tout aussi bien... et en plus c'est dans les normes!
    Donc je garde!
    Merci.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/06/2015, 02h28
  2. Mise à jour d'une colonne: update avec case
    Par MangoZaz dans le forum Langage SQL
    Réponses: 9
    Dernier message: 05/09/2014, 09h55
  3. Réponses: 2
    Dernier message: 21/09/2009, 14h20
  4. [MySQL] Mise à jours de plusieurs lignes avec mysql
    Par hakou08 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/04/2009, 20h10
  5. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46

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