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 multiple depuis un tableau


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Par défaut Mise à jour multiple depuis un tableau
    Bonjour,

    J'ai cherché un peu sur le net, mais je n'ai pas trouvé de solution concrète.
    J'ai une page qui affiche par une boucle plusieurs lignes de données d'une table dans une formulaire. Je veux ensuite enregistrer toutes les modifications apportées.
    Pour le moment, j'ai un update classique, et donc, seule la dernière ligne est mise à jour Pas les précédentes.
    J'aimerais donc savoir comment mettre à jour toutes les lignes de la table.

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Bonjour,

    Serait-il possible de voir ton code?
    Et en faisant une boucle while sa ne fonctionnerai pas?

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    En mettant les id des enregistrements dans un hidden et les autres champs dans un input ou select ayant les mêmes name en tableau dans chaque ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($row=mysql_fetch_array($result))
    {
        echo '<input type="hiden" value="'.$row[0]'" name="id[]"/>';
        echo '<input type="text" value="'.$row[1]'" name="champ[]"/>';
    }
    et dans le mise à jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($_POST['id'] as $key=> $value)
    {
      $query="UPDATE table SET colonne1='".$_POST['champ'][$key]."' WHERE $cle='".$value."'";
    ...
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Par défaut
    Merci pour ces réponses rapides, mais je ne vois pas comment procéder exactement

    Je ne connais pas foreach, comment l'intégrer dans mon code ?

    Voici mon code qui affiche les formulaire pour compléter/modifier
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <form id="form1" name="form1" method="post" action="update.php">
    <button type="submit" value="envoyer" />
      <table width="100%" class="resultats">
        <tr>
          <th width="17%" class="resultats" scope="col">Nom</th>
          <th width="14%" scope="col">Prénom</th>
          <th width="7%" scope="col">Classe</th>
          <th width="13%" scope="col">Date de naissance</th>
          <th width="7%" scope="col">Inscription</th>
          <th width="18%" scope="col">N° élève</th>
          <th width="24%" scope="col">Remarques</th>
        </tr>
        <?php
    // Connexion
    require_once('login.php');
     
    // Variables
    $nom = $_POST['nom'];
    $prenom = $_POST['prenom'];
    $classe = $_POST['classe'];
     
    // On se connecte à la base
    $connexion = mysql_connect("$host_bdd", "$user_bdd", "$pass_bdd");
    mysql_select_db("$bdd");
     
    // On effectue la recherche de l'élève
    mysql_query("SET NAMES UTF8"); 
    $sql = "SELECT * FROM eleves WHERE nom LIKE '".$nom."%' AND prenom LIKE '".$prenom."%' AND classe LIKE '".$classe."%'";
    $requete = mysql_query($sql,$connexion);
    mysql_close();
     
     
    // On affiche les résultats
    while ($resultats = mysql_fetch_array($requete))
    {
     
    if ($resultats['nom'] == NULL)
    {
    echo "Erreur";
    }
     
    else
    {
    ?>
        <tr>
          <td class="resultats"><?php echo $resultats['nom'] ?></td>
          <td><?php echo $resultats['prenom'] ?></td>
          <td><?php echo $resultats['classe'] ?></td>
          <td><?php echo $resultats['naissance'] ?></td>
          <td><label>
            <input name="inscrit" type="checkbox" id="inscrit" value="1" <?php if ($resultats['inscrit']=="1") {echo "checked=\"checked\"";} ?> />
          </label>
          <input name="id" type="hidden" id="id" value="<?php echo $resultats['id'] ?>" /></td>
          <td><label>
            <input name="no_eleve" type="text" class="no_eleve" id="no_eleve" value="<?php echo $resultats['no_eleve'] ?>" size="13" maxlength="7" />
          </label></td>
          <td><label>
            <textarea name="remarques" cols="45" rows="5" class="remarques_results" id="remarques"><?php echo stripslashes($resultats['remarques']) ?></textarea>
          </label></td>
        </tr>
    <?php
    }
    } //on ferme while
    ?>
      </table>
     
     
    </form>
    Et ensuite, dans update.php, je fais un simple UPDATE.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Il faut que changes le nom de tes champs en y ajoutant l'id, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input name="<?php 'inscrit_'.$resultats['id'] ?>" type="checkbox" id="inscrit" value="1" <?php if ($resultats['inscrit']=="1") {echo "checked=\"checked\"";} ?> />
    Et ensuite tu fais une boucle dans laquelle tu met à jour tous les élèves, en reprenant les nom de tes champs.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Par défaut
    Ok, mais ensuite, comment je procède ?
    Je met quoi dans l'expression de la boucle ? Et comment peut on récupérer les variables vu que leur identifiant POST ne fait que changer à cause de l'id ?

    Merci d'avance.

  7. #7
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    c'est expliqué comment récupérer les valeurs avec le code là :

    Citation Envoyé par andry.aime Voir le message
    Bonjour,
    En mettant les id des enregistrements dans un hidden et les autres champs dans un input ou select ayant les mêmes name en tableau dans chaque ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($row=mysql_fetch_array($result))
    {
        echo '<input type="hidden" value="'.$row[0]'" name="id[]"/>';
        echo '<input type="text" value="'.$row[1]'" name="champ[]"/>';
    }
    et dans le mise à jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($_POST['id'] as $key=> $value)
    {
      $query="UPDATE table SET colonne1='".$_POST['champ'][$key]."' WHERE $cle='".$value."'";
    ...
    }

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Par défaut
    Oui mais je ne comprends pas bien la démarche à effectuer...

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Et bien avec ma méthode il te suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    while ($resultats = mysql_fetch_array($requete))
    {
    mysql_query('update eleves set inscrit='.$_POST['inscrit_'.$resultats['id']]....);
     
    }
    ou requete et la meme requete que toute a l'heure.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Par défaut
    [J'ai modifié "inscrit" par "photo"]
    Je crois avoir compris.

    Voilà ce que j'ai fait :

    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
    // On se connecte à la base
    $connexion = mysql_connect("$host_bdd", "$user_bdd", "$pass_bdd");
    mysql_select_db("$bdd");
     
    // On effectue la recherche de l'élève
    $sql = "SELECT id FROM eleves ORDER BY id";
    $requete = mysql_query($sql,$connexion);
     
     
     
     
    while ($resultats = mysql_fetch_array($requete))
    {
    mysql_query("UPDATE eleves SET photo=".$_POST['photo_'.$resultats['id']]", cheque=".$_POST['cheque_'.$resultats['id']]", remarques=".$_POST['remarques_'.$resultats['id']]);
    }
    Mais ça me rend un erreur : unexpected T_CONSTANT_ENCAPSED_STRING à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("UPDATE eleves SET photo=".$_POST['photo_'.$resultats['id']]", cheque=".$_POST['cheque_'.$resultats['id']]", remarques=".$_POST['remarques_'.$resultats['id']]);

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Tu as oublier un plusieurs points :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("UPDATE eleves SET photo=".$_POST['photo_'.$resultats['id']].", cheque=".$_POST['cheque_'.$resultats['id']].", remarques=".$_POST['remarques_'.$resultats['id']]);

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Par défaut
    Bon, je ne comprend pas, j'ai ça maintenant :
    Parse error: syntax error, unexpected $end
    J'ai bien vérifié s'il ne manquait pas une accolade ou parenthèse, mais rien...

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Bon et bien pour bien faire, si tu as des champs texte que tu met à jour il faut les entourer de " sinon sa ne marchera pas, ensuite il faut rajouter une clause where dans ton update sinon tu vas mettres à jour toutes les lignes de la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query('UPDATE eleves SET photo='.$_POST['photo_'.$resultats['id']].', cheque='.$_POST['cheque_'.$resultats['id']]', remarques="'.$_POST['remarques_'.$resultats['id']].'" where id='.$resultat['id']);

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Par défaut
    Non, ça ne marche toujours pas (unexpected $end) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query('UPDATE eleves SET photo='.$_POST['photo_'.$resultats['id']].', cheque='.$_POST['cheque_'.$resultats['id']].', remarques='.$_POST['remarques_'.$resultats['id']].' WHERE id='.$resultats['id']);

  15. #15
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Et bien fait plutot comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("UPDATE eleves SET photo=".$_POST['photo_'.$resultats['id']].", cheque=".$_POST['cheque_'.$resultats['id']].", remarques=".$_POST['remarques_'.$resultats['id']]." WHERE id=".$resultats['id']);
    Par contre si remarque est un champ texte il faut faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("UPDATE eleves SET photo=".$_POST['photo_'.$resultats['id']].", cheque=".$_POST['cheque_'.$resultats['id']].", remarques=\"".$_POST['remarques_'.$resultats['id']]."\" WHERE id=".$resultats['id']);

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Par défaut
    Alors, le problème de la page qui ne s'affiche pas est réglé. Mais il y a un autre problème.
    L'update ne se fait pas. Il affiche
    Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampplite\htdocs\test\boutons\search.php on line 40

    Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\xampplite\htdocs\test\boutons\search.php on line 40
    Ensuite, ça me fait 2000 fois ça... Car ça veut tous les mettre à jour, même ceux où il n'y aura rien à faire. Ce n'est pas grave, mais pas super... C'est un peu lourd comme requête je trouve.
    Je suis désespéré

  17. #17
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Bah la c'est que tu n'utilise pas le bon nom d'utilisateur et mot de passe puisqu'il n'arrive pas à se connecter.

    Vérifie tes identifiants de connection

  18. #18
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Re,
    Simple quote mais pas double quote pour les champs texte:
    mysql_query("UPDATE eleves SET photo=".$_POST['photo_'.$resultats['id']].", cheque=".$_POST['cheque_'.$resultats['id']].", remarques=\"".$_POST['remarques_'.$resultats['id']]."\" WHERE id=".$resultats['id']);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("UPDATE eleves SET photo=".$_POST['photo_'.$resultats['id']].", cheque=".$_POST['cheque_'.$resultats['id']].", remarques='".$_POST['remarques_'.$resultats['id']]."' WHERE id=".$resultats['id']);

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Par défaut
    Il me dit toujours mauvais mot de passe
    Pas possible, je n'ai pas touché aux login, je les introduis via un require_once...

  20. #20
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Par défaut
    Fais comme sa pour te connecter à la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // On se connecte à la base
    $connexion = mysql_connect("$host_bdd", "$user_bdd", "$pass_bdd");
    mysql_select_db("$bdd",$connexion);

Discussions similaires

  1. Mise à jour datagridview depuis différentes fenêtres
    Par Machine Head dans le forum Windows Forms
    Réponses: 8
    Dernier message: 29/07/2009, 10h40
  2. [DOM] IE vs FF : mise à jour dynamique d'un tableau
    Par vichenze dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 13/06/2008, 10h14
  3. Pb de mise à jour à partir d'un tableau Calc
    Par ft290 dans le forum Requêtes
    Réponses: 9
    Dernier message: 21/04/2008, 19h56
  4. Mise à jour table depuis autre table
    Par dual77 dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/01/2007, 21h01
  5. [VB.NET 2.0] Mise à jour contrôle depuis xml
    Par nicolb dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/04/2006, 09h21

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