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 :

Transformer une chaine SQL en plusieurs


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    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 : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Transformer une chaine SQL en plusieurs
    Salut tout le monde,

    J'ai un super code qui me permet de mettre à jour ma base de données MYSQL.

    La chaine SQL est générée automatiquement, ce qui est une très bonne chose (merci à Sabotage et Celira).

    Le seul "hic", c'est qu'il n'est capable que de mettre à jour une seule donnée à la fois.

    Si je modifie le matricule, nom et prénom d'un enregistrement, il ne mettra à jour que le matricule.

    Voici la chaine SQL générée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE decisions SET Code_Decision= '1' ,Nom_Decision= 'Ajourné' ,Code_Decision= '2' ,Nom_Decision= 'Satisfaction' 
    WHERE Code_Decision= '1' AND Nom_Decision= 'Ajourné' AND Code_Decision= '2' AND Nom_Decision= 'Satisfaction'
    Je pense que le problème vient du 'AND' car on cherche un enregistrement dont le Code_Decision= '1' et le Nom_Decision= 'Ajourné' et le Code_Decision= '2' et le Nom_Decision= 'Satisfaction'

    Je peux bien sûr me tromper.

    Je pense que deux update seraient plus adaptés ?

    Voici le code PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $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>';
    	}
    et

    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());
     
     
    }
    Qu'en pensez-vous ?

    Merci d'avance pour l'aide.

    beegees

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    Pour moi la requete est bonne.

    as tu essayé de la passer directement dans une console mysql ou dans l'exécuteur de requetes de phpmyadmin ? (ou de n'importe quelle interface de gestion de ta base)

  3. #3
    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
    Par défaut
    il faut remettre a vide tes variables dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     foreach ($_POST['new'] as $key=>$NomCol) {
     $sqlset = array();
     $sqlwhere = array();
     foreach ($_POST['new'][$key] AS $NomCol=>$value) 
     {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre expérimenté
    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 : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par sabotage Voir le message
    il faut remettre a vide tes variables dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     foreach ($_POST['new'] as $key=>$NomCol) {
     $sqlset = array();
     $sqlwhere = array();
     foreach ($_POST['new'][$key] AS $NomCol=>$value) 
     {
    Bonjour Sabotage,

    J'ai ajouté le code que tu m'as communiqué, ça ne change malheureusement rien.

    Voici quand même la chaine SQL après l'ajout du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE decisions SET Code_Decision= '1' ,Nom_Decision= 'AjournéBB' ,Code_Decision= '2' ,Nom_Decision= 'SatisfactionBB' WHERE Code_Decision= '1' AND Nom_Decision= 'Ajourné' AND Code_Decision= '2' AND Nom_Decision= 'Satisfaction'
    et voici le nouveau code au cas où :

    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
    foreach ($_POST['new'] as $key=>$NomCol) {
     $sqlset = array();
     $sqlwhere = array();
     
     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());
     
     
    }
    echo $sql;
    Beegees

  5. #5
    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
    Par défaut
    il y a $ligne au ligne de $nligne dans la construction du formulaire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre expérimenté
    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 : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par sabotage Voir le message
    il y a $ligne au ligne de $nligne dans la construction du formulaire.
    Merci Sabotage,

    ça à l'air de fonctionner maintenant mais je ne vais pas crier victoire trop tôt.

    Merci encore pour l'aide que tu m'as apporté et qui franchement, m'a été d'une grande utilité.

    beegees

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/06/2006, 11h18
  2. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  3. Réponses: 2
    Dernier message: 14/01/2005, 15h40
  4. Ecrire une requete SQL sur plusieurs lignes
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 14h47
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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