Page 1 sur 1

update via formulaire

Posté : 28 août 2012, 17:54
par seb59210
Bonjour,
depuis quelques heures je cherche la solution à un petit problème dans mon code.
Je veux faire un update à partir d'un formulaire,
la personne choisit l'annee et le mois puis indique la valeur
L'UPDATE se fait en se basant sur la variable annee, puis la variable mois est égale à la variable result.

Code : Tout sélectionner

<?php $cnx = mysql_connect( "localhost", "root", "" ) ; $db = mysql_select_db( "bilan" ) ; $annee = $_POST["annee"] ; $mois = $_POST["mois"] ; $result = $_POST["result"] ; echo "$annee<br>"; echo "$mois<br>"; echo "$result<br>"; $sql="UPDATE table SET '".$mois."'='".$result."' WHERE annee='".$annee."' "; mysql_query($sql, $db) or die(mysql_error()); if($sql) { echo("L'insertion a été correctement effectuée") ; } else { echo("L'insertion à échouée") ; } ?>
Merci beaucoup pour votre aide

Re: update via formulaire

Posté : 28 août 2012, 19:30
par schim59
edit : doublon

Re: update via formulaire

Posté : 28 août 2012, 19:32
par schim59
Bonjour,
j'écrirai la requête comme cela :
$sql="UPDATE table SET $mois='$result' WHERE annee=$annee";
Si $result est un INT je ne mettrrais pas de quote.

Re: update via formulaire

Posté : 28 août 2012, 19:34
par moogli
salut,

dans ta requete $mois représente un nom de champs (dans la table sql "table")

- il est plus que recomandé de ne pas nommer une table ou un champs avec un mot clef sql (ici table)
- Il est préférable de ne pas utiliser un nom de champs ainsi c'est la porte ouverte a n'importe quoi

je pense que tu voulais plutôt faire
update laTable set mois='le contenu de result' where annee='le contenu de la variable annee' and mois='le contenu de la variable mois';
pour remplacer le mois $mois de l'année $annee par $result !

il est aussi impératif d'utiliser mysql_real_escape_string pour protéger tes requêtes SQL !

il te faut aussi vérifier que les données soient bien présentent dans le tableau $_POST avant de les utiliser (tu ne peux pas être certain que se sera le cas).
pour cela utilise isset ou empty

@schim59 :gaffe à la synatxe sql. ceci n'est pas bon
$sql="UPDATE table SET mois=$mois, result=$result WHERE annee=$annee";
je n'avais pas compris la chose ainsi, je pense seb59210 devrais nous indiquer ce qui est un champ ou et sur quoi porte le prédicat !)

raaaaa tu post plus vite que ton ombre :s

@+

Re: update via formulaire

Posté : 28 août 2012, 19:36
par schim59
trop vite même apparament

Oui, quel et le cas d'utilisation ? au dela du code.

Re: update via formulaire

Posté : 28 août 2012, 20:11
par seb59210
Salut les gars !
Alors je reviens avec vos réponses :-)
En fait, j'essaye de créer une petite interface permettant à un commerçant de visualiser ses chiffres d'affaires, pour les comparer aux année précédentes etc,
Je suis un peu (beaucoup) débutant en php mais j'arrive à me débrouiller sur certains trucs,

Histoire d'être plus claire, je vais vous donner le schema de ma table :
id | annee | octobre | novembre | decembre | janvier | fevrier | mars | avril | mai | juin | juillet | aout | septembre

C'est pour cela que dans le script de saisie, je demande quel mois souhaite t'il mettre à jour.
Il y à donc une liste qui liste les années de la table, puis une liste qui indique les mois, puis l'user indique la valeur et envoye sur le script d'envoy (celui dont vous avez le code).

Merci pour votre aide

Re: update via formulaire

Posté : 28 août 2012, 20:25
par schim59
Un CA une fois réalisé ne peut pas etre modifier ?
Pourquoi faire ALTER table ?

Sinon pour eviter de mettre une variable
if ($mois==janvier){update table set janvier=$result where année=$année;}
///etc...

Re: update via formulaire

Posté : 28 août 2012, 20:33
par seb59210
Et bien en fait, l'insertion des données se fera quand ils auront le temps donc un peu après que le mois soit écoulé. Et oui, un CA réalisé pourra ensuite être modifié.
Je fais un ALTER table ? Si oui, c'est sans le savoir...^^
PS: En effet, la table "table" n'existe pas c'était pour l'exemple

Re: update via formulaire

Posté : 28 août 2012, 20:45
par schim59
un UPDATE excusez mon imprecision.

j'ai edité ma reponse avec un debut de piste
switch($mois){
case 1 $sql=UPDATE table SET janvier=$resultat WHERE année=$année;
//etc

Re: update via formulaire

Posté : 28 août 2012, 22:18
par moogli
Alors avant d'aller plus loin, faut que tu revois ton modèle de donnée, c'est pas possible d'avoir une colonne par mois :)

si tu a un table
tableca
id int auto_increment not null primary key
annee decimal(4,0)
mois decimal(2,0)
CA decimal(10,2)

ou, au pire

create table annecomptable(
idAnnee int auto_increment not null primary key
annee decimal(4,0) not null
description varchar(250) not null
)engine=innodb;

create table caMensuel(
idca int auto_increment not null primary key
idAnnee int not null,
mois decimal(2,0) not null,
CA decimal(10,2) not null,
constraint fk_annee foreign key (idAnnee) references annecomptable(idAnnee)
)engine=innodb;


Avec ça tu peux avoir quelque chose d'utilisable correctement et un calcul possible avec une simple requête SQL

coté requête SQL pour la mise a jour, c'est la même chose que ce que tu fait actuellement, (bon les données change un peu mais c'est pas grave :) )
par exemple update caMensuel set mois='la valeur' where idca=4521;

La requête sur l'id est plus simple et sans soucis :)

@+