UPDATE ?

Eléphanteau du PHP | 17 Messages

28 avr. 2008, 10:40

Bonjour à tous,
je vous écris car je bute sur le même problème depuis plusieurs jour.

J'ai un formulaire que je remplis pour mettre à jour un site, il y a dans ce formulaire un champ 'position' qui détermine la position de l'article dans le site. Je voudrais que à chaque envoi du formulaire la table 'print' se mette à jour. J'ai donc créé un champ 'printPos' qui prend la valeur du champ 'position' du formulaire. Il faudrait donc que le champ 'printPos' de la table s'incrémente de 1 quand ce champ est supérieur ou égal au champ 'position' envoyé par le formulaire.

J'ai fait plusieur essais après avoir cherché dans des forum, des sites etc mais en vain.

Je pense quand même que la solution se trouve du côte de UPDATE, j'ai donc fait cette requete :

Code : Tout sélectionner

"UPDATE `print` SET printPos = printPos+1 WHERE printPos >= " . $_POST['position'];
Mais cela ne fonctionne pas...

Je fonctionne avec easyphp et mysql

La table 'print' :

CREATE TABLE `print` (
`printId` int(11) NOT NULL auto_increment,
`printNom` varchar(50) NOT NULL,
`printDesc` varchar(250) NOT NULL,
`printImg` varchar(50) NOT NULL,
PRIMARY KEY (`printId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Je me demandais donc si quelqu'un ici avait un peu de temps pour jeter un oeil sur mon pb.

Merci d'avance à vous

Mammouth du PHP | 19672 Messages

28 avr. 2008, 12:00

Il n'y a pas de colonne printPos dans ta table, cette requête n'a donc absolument aucune chance d'aboutir :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 17 Messages

28 avr. 2008, 12:12

oups désolé c'est une vieille version de la table.
La voici mise à jour, désolé :oops:

CREATE TABLE `print` (
`printId` int(11) NOT NULL auto_increment,
`printNom` varchar(50) NOT NULL,
`printDesc` varchar(250) NOT NULL,
`printImg` varchar(50) NOT NULL,
`printPos` int(5) NOT NULL,
PRIMARY KEY (`printId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Mammouth du PHP | 19672 Messages

28 avr. 2008, 12:17

Qu'est-ce que retourne MySQL lorsque tu exécutes ta requête ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 17 Messages

28 avr. 2008, 12:28

Il ne me retourne aucune erreur, mais il prend en compte le numéro que je viens de saisir dans le formulaire si bien qu'il se trouve directement dans la table.

En gros si je met dans mon formulaire le champ position à 1, il met dans la table le champ printPos à 1 et le passe directement à 2 vu qu'il vient de l'entrer dans la table.

Je voudrais juste que lorsque je rentre un article avec un numéro de position déjà présent dans la table il ajoute 1 a tout les printPos supérieur ou égale à la position envoyée pour l'inséré dedans.

Mais avec UPDATE SQL ne me retourne aucun message d'erreur.

PS: merci pour l'attention, je dois pas très bien m'expliquer du fait que je débute...

Mammouth du PHP | 19672 Messages

28 avr. 2008, 13:17

Alors il doit y avoir un problème avec la valeur récupérée dans $_POST.

Je viens de faire un petit essai et ça fonctionne parfaitement :

Code : Tout sélectionner

mysql> CREATE TABLE `test` ( -> `test_id` int(11) NOT NULL auto_increment, -> `test_texte` varchar(255) NOT NULL, -> `test_pos` smallint(5) NOT NULL, -> PRIMARY KEY (`test_id`) -> ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.11 sec) mysql> mysql> INSERT INTO `test` (`test_texte`, `test_pos`) VALUES -> ('texte 1', 1), -> ('texte 2', 2), -> ('texte 3', 3), -> ('texte 4', 4), -> ('texte 5', 5), -> ('texte 6', 6), -> ('texte 7', 7); Query OK, 7 rows affected (0.02 sec) Records: 7 Duplicates: 0 Warnings: 0 mysql> mysql> SELECT * FROM `test`; +---------+------------+----------+ | test_id | test_texte | test_pos | +---------+------------+----------+ | 8 | texte 1 | 1 | | 9 | texte 2 | 2 | | 10 | texte 3 | 3 | | 11 | texte 4 | 4 | | 12 | texte 5 | 5 | | 13 | texte 6 | 6 | | 14 | texte 7 | 7 | +---------+------------+----------+ 7 rows in set (0.00 sec) mysql> mysql> UPDATE `test` -> SET test_pos = test_pos + 1 -> WHERE test_pos >= 4; Query OK, 4 rows affected (0.05 sec) Rows matched: 4 Changed: 4 Warnings: 0 mysql> mysql> SELECT * FROM `test`; +---------+------------+----------+ | test_id | test_texte | test_pos | +---------+------------+----------+ | 8 | texte 1 | 1 | | 9 | texte 2 | 2 | | 10 | texte 3 | 3 | | 11 | texte 4 | 5 | | 12 | texte 5 | 6 | | 13 | texte 6 | 7 | | 14 | texte 7 | 8 | +---------+------------+----------+ 7 rows in set (0.00 sec)
Comme tu peux le voir, le résultat entre les deux SELECT * a changé.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 17 Messages

28 avr. 2008, 14:07

Chez moi aussi ça marche mais le problème c'est qu'avec le INSERT avant le UPDATE, la position que je viens d'ajouter est mise dans la table avant la requête UPDATE si bien que la position qui s'ajoute s'auto-incrémente de 1.
En écrivant ce message je me suis dis qu'il n'y avait qu'a mettre la requête UPDATE avant INSERT....

... et ça fonctionne :D :D

Merci à toi pour ton aide
bonne continuation et porte toi bien :)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 avr. 2008, 14:20

Modération :
grinding_yanus, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

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