update via formulaire

Eléphanteau du PHP | 13 Messages

28 août 2012, 17:54

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

Eléphant du PHP | 229 Messages

28 août 2012, 19:30

edit : doublon
Modifié en dernier par schim59 le 28 août 2012, 19:34, modifié 1 fois.

Eléphant du PHP | 229 Messages

28 août 2012, 19:32

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 août 2012, 19:34

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

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 229 Messages

28 août 2012, 19:36

trop vite même apparament

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

Eléphanteau du PHP | 13 Messages

28 août 2012, 20:11

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

Eléphant du PHP | 229 Messages

28 août 2012, 20:25

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...
Modifié en dernier par schim59 le 28 août 2012, 20:47, modifié 3 fois.

Eléphanteau du PHP | 13 Messages

28 août 2012, 20:33

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

Eléphant du PHP | 229 Messages

28 août 2012, 20:45

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 août 2012, 22:18

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 :)

@+
Il en faut peu pour être heureux ......