Mettre à jour chaque ligne du champ [Résolu]

Signaler
Messages postés
3
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
8 décembre 2010
-
cs_ludwig59
Messages postés
128
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
6 mai 2011
-
Bonjour à tous
j'ai un petit souci sur mon code, je vous montre ma base + le code

la base de donnee :
ID | temps
1 | 35
2 | 25
3 | 15

et voici le code php
<?php
// Connection à la base de donnee
try
{
$bdd = new PDO('mysql:host=(serveur);dbname=(base)', '(login)', '(mdp)');
}
catch(exception $e)
{
die('erreur : '.$e->getmessage());
}

// Demande les infos du champ "temps"
$demande = $bdd->query('SELECT temps FROM (base)');
while ($resultat= $demande->fetch())
{
                $variable = $resultat['temps'] - 1;
$change = $bdd->exec('UPDATE (base) SET temps=\'' . $variable  . '\'');
}
$demande->closeCursor();
?>


Le problème est :
en résultat j'ai
ID | temps
1 | 14
2 | 14
3 | 14

hors j'aurais voulu avoir
ID | temps
1 | 34
2 | 24
3 | 14

voila en espérant ne pas mettre trompée de section
je vous remercie d'avance

6 réponses

Messages postés
128
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
6 mai 2011
2
Ben c'est ce que fait la requête UPDATE mis ci-dessus.

<?php
// Connection à la base de donnee
try
{
$bdd = new PDO('mysql:host=(serveur);dbname=(base)', '(login)', '(mdp)');
}
catch(exception $e)
{
die('erreur : '.$e->getmessage());
}

// Demande les infos du champ "temps"
$demande = $bdd->query('SELECT temps FROM (base)');
while ($resultat= $demande->fetch())
{
    // pour chaque enregistrement on deduit 1
    $change = $bdd->exec('UPDATE (base) SET temps=temps-1 WHERE ID = \'".$resultat['ID']."\'');

}
$demande->closeCursor();
?>

Messages postés
128
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
6 mai 2011
2
Bonjour

le résultat final est normal car vous ne précisez pas quel enregistrement vous voulez modifier.

Remplacer la requête update par :

$change = $bdd->exec('UPDATE (base) SET temps=\'' . $variable  . '\' WHERE ID = \'".$resultat['ID']."\'');
Messages postés
3
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
8 décembre 2010

enfaite je souhaite que cela change pour toute les lignes du champs en faite que cela déduit 1 pour chaque ligne même si ce n'est pas la même valeur à la base pas que pour une seule ligne
Messages postés
3
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
8 décembre 2010

je te remercie j'ai compris ce qui n'allais pas et en plus maintenant sa marche
merci beaucoup
Messages postés
122
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
30 décembre 2010

Hello,

Petit question : Pourquoi faire des boucles inutiles ?

Une requête de ce type devrait faire l'affaire non ?

UPDATE (base) SET temps=temps-1
Messages postés
128
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
6 mai 2011
2
Oui bien vu morpheus57

Autant pour moi ^^