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 SQL Discussion :

Problème d'UPDATE : tous les enregistrements ne passent pas


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 6
    Points
    6
    Par défaut Problème d'UPDATE : tous les enregistrements ne passent pas
    Bonjour à tous !

    Comme je viens de l'annoncer dans l'intitulé, je souhaite faire des enregistrements dans ma bdd via un update, mais certains champs disparaissent.

    Je m'explique :
    Lors de l'update, seuls les champs contenance_boisson01 et ID semblent passer. Les champs nom_boisson et prix_boissons01 sont effacés et aucun update ne se fait à leur niveau !!!

    Voici mon code pour que vous puissiez m'aider :

    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
     
    $<div>
    $<?php
    $if (!isset($_POST['envoyer'])) {
            $chargeModifSofts = mysql_query('SELECT * FROM `boissons` WHERE `famille_boisson` = "softs"');
    	while ($afficheModifSofts = mysql_fetch_array($chargeModifSofts)) {
    ?>
    	<form method="post" action="#">
    		<input type="hidden" name="IDForm" value="<?php echo $afficheModifSofts['ID']; ?>" />
    		<table style="margin: 10px; width: auto;">
    			<tr>
    				<td style="padding: 5px; text-align: right;">
    				        Nom du Soft : 
    			        </td>
    			        <td style="padding: 5px;">
    				        <input type="text" name="nomSoft" value="<?php echo $afficheModifSofts['nom_boisson']; ?>" />
    			        </td>
    			</tr>
    			<tr>
    				<td style="padding: 5px; text-align: right;">
    					Contenance du Soft : 
    				</td>
    				<td style="padding: 5px;">
    					<input type="text" name="contenanceSoft" value="<?php echo $afficheModifSofts['contenance_boisson01']; ?>" />
    				</td>
    			</tr>
    			<tr>
    				<td style="padding: 5px; text-align: right;">
    					Prix du Soft : 
    				</td>
    				<td style="padding: 5px;">
    					<input type="text" name="prixSoft" value="<?php echo $afficheModifSofts['prix_boisson01']; ?>" />
    				</td>
    			</tr>
    			<tr>
    				<td style="padding: 5px;" colspan="2">
    					<input type="submit" name="envoyer" value="Modifier" style="background-color: #510003; border: 1px solid #ffffff; color: #ffffff;" />
    				</td>
    			</tr>
    		</table>
    	</form>
    	<?php
    	}
    }
    	else {
    	if (isset($_POST['envoyer'])) {
    		$nomSoft = mysql_real_escape_string(htmlentities($_POST['nomSoft']));
    		$contenanceSoft = mysql_real_escape_string(htmlentities($_POST['contenanceSoft']));
    		$prixSoft = mysql_real_escape_string(htmlentities($_POST['prixSoft']));
    		$IDForm = mysql_real_escape_string(htmlentities($_POST['IDForm']));
    		$updateModifSofts = mysql_query("UPDATE `boissons` SET `nom_boisson` = '$nomSoft', `contenance_boisson01` = '$contenanceSoft', `prix_boisson01` = '$prixSoft' WHERE `ID` = '$IDForm'") or die (mysql_error());
    		echo 'Tout Bon !';
    		echo $nomSoft, $contenanceSoft, $prixSoft;
    	}
    }
    ?>
    </div>
    Merci d'avance à tous ceux qui voudront bien se pencher sur cette énigme !

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Afin de s'assurer que le problème ne vient pas du php, je vous conseille de tester directement votre requête UPDATE sur la BDD.

    Il est également de bon ton d'isoler seulement le code SQL dans un forum dédié au langage SQL...

    Cordialement,

    Arkhena

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Bonjour et merci Arkhena !

    Tout d'abord, désolé pour tout le code que j'ai placé. Il aurait effectivement été plus simple de ne placer que la requête !

    Pour ce qui est de la requête, je l'ai testée sous phpmyadmin et elle fonctionne lorsque je remplace les variables par les valeurs en dur !

    C'est d'ailleurs pour cela que je ne comprends absolument pas que mon upadate ne fonctionne pas pour tous les champs dans mon code.

    Mon incompréhension est totale !!! D'autant que l'echo sur les variables (voir code ci-dessus) fonctionne bien : les valeurs s'affichent bien...

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    J'extrais la requête de ton code et je la mets en forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE `boissons` 
    SET `nom_boisson` = '$nomSoft', 
      `contenance_boisson01` = '$contenanceSoft', 
      `prix_boisson01` = '$prixSoft' 
    WHERE `ID` = '$IDForm'
    ID n'est-il pas un entier auto-incrémenté ? ==> inutile de lui passer une valeur entre apostrophes.
    prix_boisson01 n'est-il pas un nombre ? ==> Idem !

    Fait un echo de la requête avant de l'envoyer au serveur pour vérifier son texte exact.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Merci à toi aussi, CinePhil, de m'aider dans ma quête !

    Je viens de faire l'echo sur ma requête et il me ressort bien les valeurs que je rentre dans mon formulaire !!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE `boissons` 
    SET `nom_boisson` = 'Coca-Cola', `contenance_boisson01` = '33cl', `prix_boisson01` = '3,00' 
    WHERE `ID` = 20
    Tous mes champs de bdd sont des varchar, sauf comme tu l'as remarqué, l'ID qui lui est bien un entier en auto-incrément. J'ai donc enlevé les apostrophes autour de la variable $IDForm.

    L'incompréhension demeure quant à l'update !

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Petite précision :
    Le même phénomène étrange continue de se produire ; à savoir que nom_boisson et prix_boisson01 ne sont pas updatés, contrairement à contenance_boisson01 dans l'ID concerné !


  7. #7
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Et cette requête fonctionne dans phpMyAdmin ?

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Est-ce normal que le nom de vos colonnes soient encadrés par des quotes ?
    Les colonnes ne sont pas des valeurs de type chaîne de caractère ...
    Allez savoir ce que le moteur comprend ...

    @++

  9. #9
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Est-ce normal que le nom de vos colonnes soient encadrés par des quotes ?
    Les colonnes ne sont pas des valeurs de type chaîne de caractère ...
    Allez savoir ce que le moteur comprend ...

    @++
    Ce ne sont pas des quotes mais (en français) des apostrophes inversées qui sont la marque des noms de colonnes chez MySQL. La syntaxe sans ces ` est acceptée par MySQL mais un outil comme phpMyAdmin les ajoute systématiquement.

    C'est vrai que nanti pourrait essyer d'écrire sa requête en PHP sans les `, ce qui est plus conforme à la norme SQL.

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    MySQL autorise d'encadrer les noms de colonne par des quotes inversées comme Access le fait avec des crochets.
    Cela n'est pas en accord avec la norme... mais ces produits ne sont pas à une a-normalité près...

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 10h33
  2. update count pour tous les enregistrements
    Par gloppy dans le forum Requêtes
    Réponses: 0
    Dernier message: 30/03/2011, 12h06
  3. état avec tous les enregistrements d'un formulaire
    Par Arkalys dans le forum Access
    Réponses: 9
    Dernier message: 30/09/2005, 12h45
  4. Afficher tous les enregistrements d'une table
    Par bertrand_declerck dans le forum QuickReport
    Réponses: 2
    Dernier message: 08/07/2005, 09h35
  5. faire somme de tous les enregistrements identiques
    Par Keraccess dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/07/2005, 12h03

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