Php mettre a jour une table

mica - 9 sept. 2008 à 10:26
Xil Messages postés 350 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 11 juin 2009 - 9 sept. 2008 à 15:43
Bonjour,

J'ai un problème lors d'une requête a la table. J'aimerais mettre à jour des données dans une table pour la totalité des champs présent d'une table ... mon soucis c'est que les données ne sont pas mises à jour indépendament mais prennent toutes la même valeur :(

mon code

$reponse = mysql_query("SELECT * FROM Table1 ");
$donnees = mysql_fetch_array($reponse);
while ($donnees = mysql_fetch_array($reponse) )
{
$valuer1 = $donnees['valeur1'];
$valeur2 = $donnees['valeur2'];

$valeur1 = $valeur1 + $plus1;
$valeur2 = $valeur2 + $plus2;

mysql_query("UPDATE Table SET valeur1='valeur1', valeur2='$valeur2' ");

}

d'avance merci
A voir également:

14 réponses

Bonjour

Dans ton UPDATE, il faut ajouter un WHERE pour dire quels enregistrements tu veux modifier. Sans WHERE, ils sont tous modifiés.
0
j'ai essayé suivant tes conseils de la sorte

je rajoute $id=$donnees['id']; et WHERE id=$id"); de la sorte =

$reponse = mysql_query("SELECT * FROM Table1 ");
$donnees = mysql_fetch_array($reponse);
while ($donnees = mysql_fetch_array($reponse) )
{
$valuer1 = $donnees['valeur1'];
$valeur2 = $donnees['valeur2'];
$id=$donnees['id'];

$valeur1 = $valeur1 + $plus1;
$valeur2 = $valeur2 + $plus2;

mysql_query("UPDATE Table SET valeur1='valeur1', valeur2='$valeur2' WHERE id=$id");

}

Mais ça ne marche pas ça ne me mets plus à jour les données des autres champs ... en fait un seul champs est mis à jour et non toute la table :(
0
Nous nous sommes mal compris. Je croyais que c'était ce que tu voulais. J'ai l'impression que tu inverses les termes champ et enregistrement.

Quand tu dis "les données prennent toutes la même valeur" que veux tu dire ? avec l'UPDATE (avec ou sans WHERE) les champs valeur1 et valeur2 prennent deux valeurs différentes, sauf si $valeur2='valeur1'.
Tu as une faute de frappe dans le UPDATE : tu as oubhlié un $ dans valeur1='$valeur1'. D'ailleurs, si c'est une valeur numérique, il est inutile de mettre des apostrophes autour de $valeur1.
0
oui en effet je me suis mal exprimé pour indiquer ma table
voici comment elle est consituée

enregistrement 1 , valeur1 , valeur2 , id
enregistrement 2 , valeur1 , valeur2 , id
enregistrement 3 , valeur1 , valeur2 , id
enregistrement 4 , valeur1 , valeur2 , id
...

donc je voudrais que toutes les valeurs 1 et 2 de chaque id soit mis a jour par une augmentation commune ... mon soucis c'est que les valeur de chaque id sont modifié et prennetn toutes les données de la premiere valeur alors qu'a la base elles sont ou peuvent etre differente

pour le $ oublié c'est une faute de frappe dans le post ... sinon penses tu que les ' posent un probleme car en effet ce sont des valeurs numeriques
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
L'apostrophe n'est pas un problème. Il est inutile, pas nuisible.
Pour comprendre ce qui se passe, peux-tu ajouter un echo $valeur1,' ',$valeur2; juste avant ton UPDATE ?
et faire un copier-coller du script plutôt que de le recopier à la main car il y a une autre faute de frappe ($valuer1 au lieu de $valeur1)
0
dans le résultat de mon echo toutes les réponses possèdent les même valeur 1 et 2 :( j'aimerais qu'elles soient différentes si elles sont différentes à la base ...


<?php
mysql_connect("...","...","...") or die ("Erreur lors de connexion a la bdd 1");
mysql_select_db("...") or die ("Erreur lors de connexion a la bdd 2");

$plus1=50000;
$plus2=1;

$reponse = mysql_query("SELECT * FROM Table1 ");
$donnees = mysql_fetch_array($reponse);
while ($donnees = mysql_fetch_array($reponse) )
{
$valeur1 = $donnees['valeur1'];
$valeur2 = $donnees['valeur2'];
$id=$donnees['id'];
$valeur1 = $valeur1 + $plus1;
$valeur2 = $valeur2 + $plus2;

echo $valeur1;
echo $valeur2;

mysql_query("UPDATE Table SET valeur1='valeur1', valeur2='$valeur2' WHERE id=$id");
}

mysql_close();
?>
0
$donnees = mysql_fetch_array($reponse); 
while ($donnees = mysql_fetch_array($reponse) ) 

Avec ça, tu sautes la 1ère réponse. Est-ce fait exprès ? Mais ça n'est pas le problème.

Tu n'as pas corrigé le $ qui manque dans l'update... valeur1= '$valeur1' (en tous cas ça ne se voit pas) . As-tu vraiment fait un copier-coller ?

Je refuse de croire les echo affichent 1 et 2 alors que tu as ajouté 5000 à la ligne précédente. Qu'est-ce que ça affiche vraiment? ça risque de ne pas être très lisible sans espaces ni passages à la ligne ...
0
le echo affiche 150000 12 et en effet sans espace entre les prochaines valeurs ... pourquoi tu me dis que ca saute une ligne ? ca ne prends pas la premiere ligne mais la deuxieme ??? pour le $ en effet il y ai c'est quand j'ai modifié le nom de ma valeur que je l'ai zappé mais le code c'est ça avec les variables modifié mais ca change rien en soit ...

ou est mon soucis alors ? est-ce faisable au moins ? je serais étonné que ca le soit pas quand meme mais je n'y arrive vraiment pas :( ...
au lieu d'afficher
150000 12150000 12150000 12150000 12 j'iamerais bien qu'il prenne en compte que chaque enregistrement n'est pas forcemement a 100000 et 11 avant l'update certains sont a 500000 et 13 et d'autre a 50000 et 25 et j'aimerais qu'il augmente chaque données de +50000 d'une part et +1 d'autre part

merci de votre aide
0
up
0
up
un peu de patience, il m'arrive de déjeuner...
pouir ce qui est de sauter la 1ère ligne, c'est facile à expliquer.
quand tu fais ton premier $donnees = mysql_fetch_array($reponse); tu extrais une ligne de résultats.
Mais tu n'en fais rien ! aussitôt derrière, tu fais while ($donnees = mysql_fetch_array($reponse) ) ce extrait la seconde ligne. La première n'a pas subi le traitement qu'il y a dans la boucle.

<gras>ça y est ! </gra> enfin j'espère.
Tu lis dans la table Table et tu updates dans Table1 ! ce n'est pas la même table !
0
désolé le up ne t'était pas destiné c'était surtout si d'autre personne avait une idée ... en effet j'avais une erreur pour la table d'upgrade mais ça ne change rien :( les valeurs de mes echos sont toujours les même alors qu'elles devraient être différentes ... merci de ton aide
0
J'ai du mal à te suivre: tu disais que ça affichait 1 et 2 et finalement c'est 150000 et 12 ? Et d'où vient cet espace entre chaque groupe de 15000012 ?
Peux tu remettre le script par copier coller ( et copier-coller uniquement) et recopier aussi ce qui sort réellement à l'écran ( pas 10 pages non plus, quelques lignes). J'ai dit copier, pas décrire.
0
encore une fois je me suis mal exprimé je disais que ça affichais la valeur1 et la valeur2 (du coup j'ai noté valeur 1 et 2) désolé décidément je suis pas très clair :(

pour l'espace entre les 150000 et 12 ils y étaient c'etait un copier collé partiel et la en relançant le script ils n'y sont plus ??? mais bon le soucis n'est pas la ... j'arrive pas a updater a chaque enregistrement ...


je viens de penser a passer par un for avec l'incrementation du i sur les id mais bon y a pas plus simpliste ?
0
résolu merci de ta patience toto ;) ... au plaisir
0
Xil Messages postés 350 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 11 juin 2009 257
9 sept. 2008 à 15:43
Sinon,

mysql_query("UPDATE table SET valeur1 = valeur1 + 50000, valeur2 = valeur2 +1");

Et rien d'autre.

Toutes les valeur1 de la table seront augmentée de 50000 et toutes les valeur2 seront augmentées de 1.
Sans avoir besoin de faire un SELECT et un mysql_fetch_array, qui sont nettement plus longs.
0