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 :

Requête de mise à jour qui n'effectue pas la modif [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Femme Profil pro
    Développeur informatique et création d'images animées et fixes de synthèse
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique et création d'images animées et fixes de synthèse
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    Points : 150
    Points
    150
    Par défaut Requête de mise à jour qui n'effectue pas la modif
    Bonjour @ tous !

    J'ai créé une requête de mise à jour qui n'a pas l'air de fonctionner correctement. En effet, après avoir testé les diverses variables (qui sont toutes correctes) qui doivent mener au traitement final (UPDATE), rien ne se passe au point de vue modif.
    J'ai cherché pendant un bon moment, ai nettoyé le code, l'ai indenté correctement et là, décidément, je en trouve pas le problème.... Aussi, si vous pouviez gentiment me dépanner, ce serait très salutaire....

    Voici le fameux 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
    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
     
    <?php
    	include "../commun/connexion.inc.php";
    ?>
     
    <?php
    	$update=$_POST['update'];
    ?>
     
    <!-- Page à protéger -->
    <HTML>
    	<HEAD>
    		<title>Modif des comptes ANOnymes.</title>
    	</HEAD>
    	<BODY>
    		<?php
    			foreach ($update as $key=>$val){
    				//echo $val;
    				$sql1="SELECT structure FROM utilisateurs WHERE UT_ID='$val'";
    				$res1=mysql_query($sql1)or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error());
    				$donnstruct=mysql_fetch_array($res1);
    				if ($donnstruct > 0 ) {
    					echo " - ".$donnstruct['structure'];
    					$i='1';
    					while ($donnstruct = mysql_fetch_array($res1)){
    						//echo " - ".$donnstruct['structure'];
    						if ($donnstruct['structure'] == "D"){
    							$sql="UPDATE utilisateurs SET type = 'ADD' WHERE UT_ID='$val'";
    							$req=mysql_query($sql);
    						}
    						if ($donnstruct['structure'] == "N"){
    							$sql="UPDATE utilisateurs SET type = 'USN' WHERE UT_ID='$val'";
    							$req=mysql_query($sql);
    						}
    						if ($donnstruct['structure'] == "S"){
    							$sql="UPDATE utilisateurs SET type = 'USS' WHERE UT_ID='$val'";
    							$req=mysql_query($sql);
    						}
    						if ($donnstruct['structure'] == "C"){
    							$sql="UPDATE utilisateurs SET type = 'USC' WHERE UT_ID='$val'";
    							$req=mysql_query($sql);
    						}
    					$i++;
    					}
    					mysql_free_result ($res1);					
    				} else echo "vide";				
    			}
    			mysql_close();
    			//header('Location: protect/tboard_N1.php');
    			exit;
    		?>
    		<a href="stop2.php">Déconnection</a>
    	</BODY>
    </HTML>
    D'avance, merci beaucoup du temps que vous voudrez bien accorder à ce sujet.

  2. #2
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut !

    Tu peux essayer de remplacer cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         $donnstruct=mysql_fetch_array($res1);
                    if ($donnstruct > 0 ) {
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          $nb_donnstruct=mysql_num_rows($res1);
                    if ($nb_donnstruct > 0 ) {
    Autre conseil, utilise la concaténation pour intégrer tes variables dans une chaîne de caractères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql1="SELECT structure FROM utilisateurs WHERE UT_ID='".$val."' ";
    Sinon, à quoi te sert ton compteur $i ??

    Voilà je n'ai pas testé mais ça devrait déjà corrigé quelques erreurs !

    A++

  3. #3
    Membre habitué
    Femme Profil pro
    Développeur informatique et création d'images animées et fixes de synthèse
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique et création d'images animées et fixes de synthèse
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    Points : 150
    Points
    150
    Par défaut
    Bonjour djayp et merci pour ta réponse rapide !

    J'ai rectifié ce que tu m'as signalé, mais la modification ne se fait toujours pas....

    Pour ce qui est du compteur i, je voulais être sûr de passer sur toutes les lignes trouvées pour que le traitement de modification s'effectue correctement, mais peine perdue apparemment !

  4. #4
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Ok, alors essaie de résoudre le problème étape par étape en affichant des messages d'erreurs avec "echo" :

    - Est-ce que tu as des utilisateurs dans ta table
    - Est-ce que ta connexion à ta bdd fonctionne
    - Est-ce que tu arrives jusqu'à ta boucle while
    - Est-ce que le champs "type " de ta table utilisateurs existe ?
    - etc...
    - et finalement, est-ce que tes utilisateurs ne sont en fait pas déjà à jour ?

    A++

  5. #5
    Membre habitué
    Femme Profil pro
    Développeur informatique et création d'images animées et fixes de synthèse
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique et création d'images animées et fixes de synthèse
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    Points : 150
    Points
    150
    Par défaut

    L'exercice est profitable ! Effectivement, je n'arrive pas dans la boucle while alors que le test une ligne de code au dessus passe... mais je ne voit pas pourquoi !

    Je te remet le code avec mes commentaires de tests ainsi que le code des tests :
    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
     
    		<?php
    			foreach ($update as $key=>$val){
    				//echo $val;
    				//$sql1="SELECT structure FROM utilisateurs WHERE UT_ID='$val'";
     
    				//Test d'utilisateurs dans la table
    				$sqla="SELECT * FROM utilisateurs WHERE UT_ID='".$val."' ";
    				$resa=mysql_query($sqla);
    				$nbutil=mysql_num_rows($resa);
    				echo "nbutil : ".$nbutil;
     
    				//La connection à la base est testée dans  connexion.inc.php, c'est OK
    				$sql1="SELECT structure FROM utilisateurs WHERE UT_ID='".$val."' ";
    				$res1=mysql_query($sql1)or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error());
    				$donnstruct=mysql_fetch_array($res1);
    				//if ($donnstruct > 0 ) {
    				$nb_donnstruct=mysql_num_rows($res1);
                    if ($nb_donnstruct > 0 ) {
    					echo " - echo dans le if de la variable donnstruct : ".$donnstruct['structure']; //OK
    					//$i='1';
    					while ($donnstruct = mysql_fetch_row($res1)){
    						echo " - echo dans le while de la variable donnstruct : ".$donnstruct['structure'];
    						//Ce test ne passe plus, donc PHP ne rentre pas dans la boucle
    						if ($donnstruct['structure'] == "D"){
    							$sql="UPDATE utilisateurs SET type = 'ADD' WHERE UT_ID='$val'";
    							$req=mysql_query($sql);
    							echo $sql;
    						}
    						if ($donnstruct['structure'] == "N"){
    							$sql="UPDATE utilisateurs SET type = 'USN' WHERE UT_ID='$val'";
    							$req=mysql_query($sql);
    						}
    						if ($donnstruct['structure'] == "S"){
    							$sql="UPDATE utilisateurs SET type = 'USS' WHERE UT_ID='$val'";
    							$req=mysql_query($sql);
    						}
    						if ($donnstruct['structure'] == "C"){
    							$sql="UPDATE utilisateurs SET type = 'USC' WHERE UT_ID='$val'";
    							$req=mysql_query($sql);
    						}
    					//$i++;
    					}
    					mysql_free_result ($res1);					
    				} else echo "vide";				
    			}
    			mysql_close();
    			//header('Location: protect/tboard_N1.php');
    			//exit;
    		?>

  6. #6
    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
    Points : 15 059
    Points
    15 059
    Par défaut
    Salut,
    Dans la boucle while, tu tentes déjà à passer au deuxième ligne retourné car
    la première ligne est déjà affecté une fois dans $donnstruct et si le requête ne retourne qu'une seule ligne, ça ne passe plus.
    $donnstruct=mysql_fetch_array($res1)
    .........
    while ($donnstruct = mysql_fetch_row($res1)){

  7. #7
    Membre habitué
    Femme Profil pro
    Développeur informatique et création d'images animées et fixes de synthèse
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique et création d'images animées et fixes de synthèse
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    Points : 150
    Points
    150
    Par défaut
    Bonjour andry.aime...

    Ouille, je vais être obligé d'expliquer ce qu'il se passe en amont....
    Dans le formulaire précédent qui appelle celui-ci pour afficher le résultat et ensuite modifier les lignes de table voulues, je fait une requete qui liste dans un tableau tous les comptes anonymes.... Seulement dans ce tableau, je mets une case à cocher pour chaque ligne trouvée....

    Donc, dans le formulaire qui nous concerne ici, donc depuis le tableau et une fois coché le(s) compte(s) que je veut modifier doit se passer le fameux UPDATE, dont u as le code ci-dessus.... Si je coche une seule ligne sur X lignes trouvées, effectivement ce que tu dis ici
    si le requête ne retourne qu'une seule ligne, ça ne passe plus.
    se vérifie puisque c'est exactement ce qui arrive.

    Mais en cochant plus de 1 enregistrement dans mon tableau, l'UPDATE ne se fait pas non plus....

    Comment sortir de là ? Tu sais, en PHP, j'en suis à mes balbutiements, donc là, je décroche un peu , même carrément tout bien considéré....
    Pourrais-je solliciter gentiment un petit coup de main SV(T)P ?

  8. #8
    Membre habitué
    Femme Profil pro
    Développeur informatique et création d'images animées et fixes de synthèse
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur informatique et création d'images animées et fixes de synthèse
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    Points : 150
    Points
    150
    Par défaut
    YOUPIE ! J'ai trouvé ! Grâce à vous tous !
    Effectivement, le while ne sert à rien, je me suis fourvoyé ! Il faisait double emploi....
    Celui-ci supprimé, le code tourne comme une horloge, que je sélectionne un ou plusieurs enregistrements dans mon tableau ! Merveilleux !

    Merci bôôcoup à tous !
    Filons à l'assaut de nouveaux traitements désormais....

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

Discussions similaires

  1. requête de mise à jour qui n'a aucun effet
    Par niamo dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/06/2010, 14h00
  2. Réponses: 2
    Dernier message: 27/04/2009, 09h32
  3. [MySQL] requete PHP de mise à jour qui ne marche pas
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/04/2009, 08h56
  4. requete de mise à jour qui ne marche pas
    Par roy-mustang dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/04/2009, 08h07
  5. [SQL] Requête de mise à jour qui ne s'exécute pas !
    Par zoom61 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 21/08/2007, 11h53

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