modifier uniquement la dernière ligne

Eléphant du PHP | 93 Messages

16 oct. 2005, 01:50

Bonjour,

je souhaite modifier la dernière ligne d'une table.
Uniquement la dernière, pas les autres.

Mon code est le suivant, et cela ne fonctionne pas :

mysql_query("UPDATE recettes SET $recettedepense = $recettedepense +$somme ORDER BY id limit 0,1");
j'ai donc également testé ceci d'après ce que j'ai trouvé dans les archives de ce forum :
mysql_select_db("colons"); // Sélection de la base colons  

$req1="select max(id) from recettes"; 
$res1=mysql_query($req1); 
$idmax1=mysql_result($res1, 0, 0); 


if(isset($_POST) && !empty($_POST['somme']) && !empty($_POST['recettedepense'])) { 
extract($_POST);

mysql_query("UPDATE recettes SET $recettedepense=$recettedepense+$somme where id=idmax1");
Mais ça ne fonctionne pas non plus.

Quelqu'un a-t-il une idée ? :?

Merci d'avance...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 oct. 2005, 02:18

mysql_query("UPDATE recettes SET $recettedepense = $recettedepense +$somme ORDER BY id limit 0,1");
Normal, il n'est pas possible de mettre ORDER BY et LIMIT dans un requete UPDATE.

je suis quasi sur que si tu fait afficher ta requete tu n'aura pas ce que tu veut.
et puis tu fait un calcul "$recettedepense+$somme" OK mais tu l'affecte a "$recettedepense", est ce que ce champ porte le nom que le NOMBRE avec lequel tu fait le calcul ?! De plus tu compare a une valeur en dure et non une variable => where id=idmax1
verifis ça deja :wink:
$sql="UPDATE recettes SET $recettedepense=$recettedepense+$somme where id=$idmax1";
echo $sql; //affichage de la requete générée
mysql_query($sql);

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

16 oct. 2005, 08:30

Le problème est peut-être plus simple que ça:

Code : Tout sélectionner

UPDATE recettes SET $recettedepense=...etc
Est-ce que $recettedepense correspond à un champ de la table ?

Ensuite, le schéma d'une requête UPDATE est le suivant:

Code : Tout sélectionner

UPDATE nom_de_la_table SET nom_du_champ = 'valeur' WHERE champ_repère = 'valeur_repère'
Ce qui peut se traduire par: Mettre à jour dans la table ABCD le champ xyz en lui affectant la valeur 12345 dans la ligne où le champ cle_primaire a telle_valeur. Note que si tu ne mets pas de clause WHERE, toutes les lignes de la table seront mises à jour. Et comme la mentionné Truc, on ne met ni clause ORDER BY ni clause LIMIT dans un requête UPDATE.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 93 Messages

18 oct. 2005, 03:30

Je vous remercie !

ça marche.

Alors, pour répondre quand même à vos questions,
Est-ce que $recettedepense correspond à un champ de la table ?
je précise évidemment que $recettedepense correspondait à une variable qui renvoyait au champ sélectionné par l'utilisateur dans un formulaire.
Donc, c'est bien un champ dans une table de ma BDD.
echo $sql;
a bien affiché la requête qui est désormais la bonne grâce à ta manière de la présenter.
Je te remercie, c'était la solution.

Je mets ci-dessous le code pour ceux qui chercheront à sélectionner uniquement la dernière ligne dans une table.

MERCI ENCORE ! :P
mysql_connect("localhost", "root", ""); // Connexion à MySQL 
mysql_select_db("colons"); // Sélection de la base colons  
$req1="select max(id) from recettes"; 
$res1=mysql_query($req1); 
$idmax1=mysql_result($res1, 0, 0); 

if(isset($_POST) && !empty($_POST['somme']) && !empty($_POST['recettedepense'])) { 
extract($_POST);
$recettedepense=$_POST['recettedepense'];
$sql="UPDATE recettes SET $recettedepense=$recettedepense+$somme where id=$idmax1";  
mysql_query($sql); 

$sql="UPDATE depenses SET $recettedepense=$recettedepense+$somme where id=$idmax1";  //affichage de la requete générée 
mysql_query($sql);