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

Langage PHP Discussion :

intégrer une chaine sql update dans PHP


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut intégrer une chaine sql update dans PHP
    Bonjour tout le monde,

    Ce code permet de sélectionner une table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $table = $_POST['select_Nom_Tables'];
    $_SESSION['LaTable'] = $table;
    Vue que c'est une variable $_SESSION, je peux l'utiliser partout dans le site pendant la session de l'utilisateur.

    Le code ci-dessous me permet d'afficher un tableau avec le nom des cellules et leur valeur :

    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
    echo '<form action="MettreAJour.php?NbLignes='.mysql_num_rows($query).'" method="post" name="frmSaisie" id="frmSaisie">';
     
     
     
    echo '<tr>';
    for($i=0;$i<mysql_num_fields($query);$i++)
        {
        echo '<th>'.mysql_field_name($query,$i).'</th>';
        }
    echo '</tr>';
    while($row = mysql_fetch_array($query,MYSQL_ASSOC)) 
    {
    		#print_r($row);
    		$compteur+=1;
     
    		echo '<tr>';
    		foreach($row as $NomCol => $Valeur)
            {
    			//création d'un input visible pour montrer la valeur des champs et un input invisible pour retourner les valeurs
    			echo '<td> <textarea>'.$Valeur.'</textarea> <input name="'.$NomCol.$compteur.'" type="hidden" id="'.$NomCol.$compteur.'" value="'.$Valeur.'"/></td>';
     
     
    		}
    			echo '</tr>';
    }
    echo '<input type="submit" name="Submit" value="Mettre la table à jour" />' ; 
     
    echo '</p>
    </form>';
    J'utilise la valeur de la variable $_SESSION['LaTable'] pour essayer de mettre à jour une table avec les données récupérées par le form:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query(update $_SESSION['LaTable'].[$i] set $_POST['$NomCol'])
    Cela ne fonctionne pas.

    Sauriez-vous m'aider svp ?

    Cela est la dernière étape de ma page php

    Merci d'avance.

    beegees

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    UPDATE table SET colonne = valeur

    Sinon c'est quoi ce .[$i] dans $_SESSION['LaTable'].[$i] ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par sabotage Voir le message
    UPDATE table SET colonne = valeur

    Sinon c'est quoi ce .[$i] dans $_SESSION['LaTable'].[$i] ?
    Merci pour ta réponse.

    Voici le début de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "UPDATE $_SESSION[LaTable] SET";
    ça, je suis pratiquement sûr que c'est correct

    Ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "UPDATE $_SESSION[LaTable] SET $_POST[$NomCol]";
    me donne ceci :

    UPDATE decisions
    donc il ne m'affiche pas de nom de colonne après le set

    Maintenant je me pose trois questions :

    1) Comment terminer cette chaine sql pour qu'elle devienne dynamique, c'est à dire qu'elle mette à jour les champs de la table que je lui ai indiqué dans $_SESSION[LaTable]

    2) Comment lui indiquer qu'elle doit mettre à jour l'enregistrement n°1 avec les données de la 1ère cellule, l'enregistrement 2 avec les données de l'enregistrement 2....
    3) vue que l'on récupère les données envoyées par formularie dans le script appelant, est-ce que variable = $_POST[$colonne] est nécessaire ?

    C'est à ça que sert le $1 (enfin, à quoi il devrait servir).

    à nouveau, je suis presque à la fin de cette importante page.

    Merci d'avance pour votre aide.

    beegees

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Fiou c'est peut etre pas le code dont je serais le plus fier dans ma vie et je ne garantie pas que ca marche mais il est l'heure de dormir :

    En gros on recupere dans un tableau "new" la nouvelle valeur pour la colonne $NomCol et dans un tableau "old" la valeur actuelle (et oui pour faire l'update il faut bien pouvoir reperer quel enregistrement on modifie et on ne peut le faire que par ses anciennes valeurs puisque tu ne differencie pas un index).

    formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $nligne = 0;
    while($row = mysql_fetch_array($query,MYSQL_ASSOC)) 
    {
    echo '<tr>';
    foreach($row as $NomCol => $Valeur)
            {
               echo '<td> <textarea name="new[' . $ligne . '][' . $NomCol . ']" . $>'.$Valeur.'</textarea> <input name="old[' . $ligne . '][' . $NomCol . ']" type="hidden"  value="'.$Valeur.'"/></td>';	
    	}
    $nligne++;
    			echo '</tr>';
    }
    update
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach ($_POST['new'] as $key=>$NomCol) {
          foreach ($_POST['new'][$key] as $NomCol=>$value) {
                 $sqlset[] = $NomCol . "=" . $value;
                 $sqlwhere[] = $Nomcol . '=' . $_POST['old'][$key][$NomCol]
            }
    $sql = 'UPDATE $_SESSION['LaTable'] SET ' . implode(",", $sqlset) . ' WHERE ' . implode(" AND ", $sqlwhere);
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut Sabotage,

    Sincèrement, merci pour le code que tu as écris pour moi, surtout à cette heure là

    Bon, je testé, il me semble qu'il y'a un petit problème.

    Le problème se pose lors de la mise à jour, j'obtiens à chaque fois ce message :

    Parse error: syntax error, unexpected '}' in C:\wamp\www\MettreAJour.php on line 39
    La ligne 39 correspond à :

    il dit donc que } n'est pas attendu, le problème doit venir de plus haut.

    Je me demandais si c'étais normal d'avoir "" et '' dans ces deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sqlset[] = $NomCol . "=" . $value;
                  $sqlwhere[] = $Nomcol . '=' . $_POST['old'][$key][$NomCol]
    Encore un tout grand à toi.

    beegees

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il manque un point-virgule a la fin de la ligne precedente.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Il manque un point-virgule a la fin de la ligne precedente.
    Bien vu

    Merci.

    J'obtiens un autre message d'erreur

    Parse error: syntax error, unexpected T_STRING in C:\wamp\www\MettreAJour.php on line 40
    Voici la ligne 40 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = 'UPDATE $_SESSION['LaTable'] SET ' . implode(",", $sqlset) . ' WHERE ' . implode(" AND ", $sqlwhere);
    Encore un grand merci à toi

    beegees

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Problème de concaténation de variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = 'UPDATE ' . $_SESSION['LaTable'] . ' SET ' . implode(",", $sqlset) . ' WHERE ' . implode(" AND ", $sqlwhere);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Celira Voir le message
    Problème de concaténation de variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql = 'UPDATE ' . $_SESSION['LaTable'] . ' SET ' . implode(",", $sqlset) . ' WHERE ' . implode(" AND ", $sqlwhere);
    Bonjour Celira,

    Merci pour ta réponse.

    En effet, le problème se trouvait bien là, merci beaucoup.

    Maintenant, plus de message d'erreur mais la table ne se met pas à jour.

    Les changements ne sont pas enregistrés

    Voici ce que me donne un echo $sql :

    UPDATE decisions SET Code_Decision=1 WHERE =1UPDATE decisions SET Code_Decision=1,Nom_Decision=Ajournéwwww WHERE =1 AND =Ajourné
    il faudrait donc arriver à faire ceci :

    UPDATE decisions SET Code_Decision=1 WHERE Code_Decision =1 UPDATE decisions SET Code_Decision=1,Nom_Decision=Ajournéwwww WHERE Code_Decision =1
    et retirer :

    AND =Ajourné
    Merci pour votre aide et votre dévouement sans faille.

    beegees

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai loupé un C majuscule dans $NomCol
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sqlwhere[] = $NomCol . '=' . $_POST['old'][$key][$NomCol]
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par sabotage Voir le message
    J'ai loupé un C majuscule dans $NomCol
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sqlwhere[] = $NomCol . '=' . $_POST['old'][$key][$NomCol]
    Bonjour,

    Bien vu Sabotage

    La gentille Celira a corrigée les dernières petites erreurs avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     foreach ($_POST['new'] as $key=>$NomCol) 
     
     {
     foreach ($_POST['new'][$key] AS $NomCol=>$value) 
     {
                  $sqlset[] = $NomCol . "= '" . $value ."' ";
     
                  $sqlwhere[] = $NomCol . "= '" . $_POST['old'][$key][$NomCol] . "' ";
      }
    $sql = 'UPDATE ' . $_SESSION['LaTable'] . ' SET ' . implode(",", $sqlset) . ' WHERE ' . implode(" AND ", $sqlwhere); 
     
    $execution=mysql_query($sql, $link)or die($query . " - " . mysql_error());
     
    }
    Un grand merci à toi et à Celira

    beegees

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

Discussions similaires

  1. [XL-2010] Intégrer une commande SQL (complexe) dans une macro
    Par urbandot dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 14/11/2011, 10h50
  2. Mettre des guillemets dans une chaine SQL dans du VBA ?
    Par Marie_2116 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/07/2007, 10h43
  3. Réponses: 14
    Dernier message: 10/01/2007, 10h12
  4. Réponses: 3
    Dernier message: 20/05/2006, 23h28
  5. intégrer une base de donnée dans sql server
    Par gock dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 11/01/2006, 23h27

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