Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2007, 02h26   #1
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 175
Points : 28
Points : 28
Par défaut [Conception] Formulaire et case à cocher

Salut à tous,
Je rencontre 3 pb php/mysql, il y aura donc 3 messages!

Je débute en php, vous allez peut-être trouver les questions faciles, tant
mieux dans ce cas:

J'ai une base de données mysql et j'y accède via des pages écrites en PHP..
dans ma table transac (transactions) j'ai un champ "bordereau" qui vaut
NULL ou 1 qui permet de savoir si une transaction a été relevée par la
banque
ou non.
J'ai mis en place dans un fichier php d'affichage des transaction
comme ceci ceci:

Code :
1
2
3
4
5
6
7
<? if ($row["bordereau"]==1) {?>
<INPUT type=checkbox name=valide value="caseacocher" checked>
<? }
else {
?>
<INPUT type=checkbox name=valide value="caseacocher" unchecked>
<? } ?>

Jusque là tout va bien... la case est cochée si la transaction a été relevée
par la banque (bordereau=1) et décochée sinon.

Seulement voilà, je voudrais qu'à chaque clique sur le case
cochage/décochage, le champ bordereau soit ajusté
(ie si l'utilisateur coche la case, le champ est mis à 1
et si il décoche la case, le champ est mis à 0)

Sûrement faut-il utiliser la commande onclick, mais où la placer? comment
s'en servir?
quels arguments mettre? Faut-il placer du code dans une page séparée?

Voilà
merci d'avance
Mathieu
Mathieu72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 10h22   #2
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Salut,

Pourquoi tu ne fais pas la mise à jour en base au moment de la validation du formulaire, ça me semble plus propre et plus logique...

Sinon si tu veux absolument rester dans ton idée, tu peux soumettre ton formulaire dans le code JS de l'évènement onChange de ton SELECT, et faire la mise à jour dans la page en testant la valeur du SELECT.

PS : sarthois Mathieu
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 15h43   #3
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 175
Points : 28
Points : 28
d'accord, mais concrètement je fais comment?

d'abord le select d'une case à cocher il prend quelles valeurs?
ou passer la commande onChange?
Comment faire la mise à jour?

je ne sais pas faire tout cela...

Merci
Cordialement
Mathieu
Mathieu72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2007, 15h58   #4
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par Mathieu72
d'accord, mais concrètement je fais comment?

d'abord le select d'une case à cocher il prend quelles valeurs?
ou passer la commande onChange?
Comment faire la mise à jour?

je ne sais pas faire tout cela...

Merci
Cordialement
Mathieu

Je veux bien te filer un coup de main mais tu choisis quelle solution ? Le mieux c'est que l'utilisateur valide son formulaire et du coup faire les mises à jour dans la page de traitement (ce qui est dans le ACTION de ton FORM), mais si tu veux rester dans la même page il faut faire du JS.

Je ne sais pas ce que tu veux faire exactement, développe le but de ton formulaire. Et poste son code ça servira pour la suite.


PS : tu veux pas dire si tu es sarthois ou pas
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 15h07   #5
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 175
Points : 28
Points : 28
Par défaut oui je suis bien sarthois

alors voici ce que j'ai essayé de faire depuis.
Le problème c'est que si je soumets tout le formulaire, il va s'afficher la page modifform.php, qui permet de modifier les autres champs.
Ce que je voudrais, c'est que "discrètement" la valeur du champ bordereau soit mise à 1 si la case est cochée, NULL si elle ne l'est pas.
Au chargement de la page, elle est bien cochée ou décochée comme ça doit être le cas. Voici donc le code de 2 formulaires qui se suivent:


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<form method=post>
 
<td>
<? if ($row["bordereau"]==1) {?>
<INPUT type=checkbox name="bordereau2" checked onclick="soumettre();">
<? }
else {
?>
<INPUT type=checkbox name="bordereau2" unchecked onclick="soumettre();">
<? } ?>
</td>
 
 
<script>
function soumettre(){
var f = document.forms[0];
f.submit(); 
if isset($bordereau2)
then	{$requeteMathieu="update transac set
	descript='".$descript."',
	lieu='".$lieu."',
	datetransac='".$datetransac."',
	montant='".$montant."',
	compte='$compte',
	bordereau='1'
	where enrid=$enrid";}
else	{$requeteMathieu="update transac set
	descript='".$descript."',
	lieu='".$lieu."',
	datetransac='".$datetransac."',
	montant='".$montant."',
	compte='$compte',
	bordereau=NULL
	where enrid=$enrid"};
$result=mysql_query($requeteMathieu);
echo "bonjour";
  }
</script>
 
</form>
 
<?echo "<td align=right><h2>".$row["virement"]."</td>";	?>
<form action="modifform.php" method=post>
 
 
<input type=hidden name=descript value=<?echo $row["descript"]?>>
<input type=hidden name=datetransac value=<?echo $row["datetransac"]?>>
<input type=hidden name=lieu value=<?echo $row["lieu"]?>>
<input type=hidden name=montant value=<?echo $row["montant"]?>>
<input type=hidden name=compte value=<?echo $row["compte"]?>>
<input type=hidden name=enrid value= <?echo $row["enrid"]?>>
 
 
 
 
<td><input type=submit value="modifier"></td>
 
 
</form>

Le premier formulaire, c'est une tentative manquée pour que le fait de cocher ou de décocher la case exécute une requête qui modifie UNIQUEMENT le champ bordereau dans la table.
Le deuxième (qui fonctionne), affiche un formulaire pré-complété qui permet de mettre à jour la base de données en la modifiant.

Voilà, donc comment faire pour modifier la base de données quand on titille le case à cocher, sans afficher de nouvelle page?

Merci
Mathieu72
Mathieu72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 15h44   #6
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
parce que là chaud les marrons pour déchiffrer...



Ah bah oui on peut pas mélanger comme ça JS et PHP (JS => client, PHP => serveur).

Tu es obligé de recharger la page pour mettre à jour la BDD. Ce qui est faisable (vive le bricolage) je pense : dans l'évènement on click de ta case, tu affectes le nom de ta page courante dans le ACTION de ton FORM, tu soumets le formulaire. Et au clic sur le bouton de validation, même chose, tu mets modifform.php dans le champ ACTION de ton FORM, et tu soumets le formulaire. Après ça dans la page qui contient le FORM il faut tester si tu viens de la checkbox pour faire la mise à jour si besoin.

Mais je vais me répéter, je pense que tu as un problème dans ta conception, parce que c'est moche de faire des choses comme ça. Parce que admettons l'utilisateur arrive sur ta page, coche la case, et puis se rend compte qu'en fait c'est autre chose qu'il voulait faire, il va pas décocher, il va directement faire "précédent" dans son navigateur. Sauf que la valeur en base aura été mise à jour. Ergonomiquement le fait que l'utilisateur n'ait pas à confirmer son intention par un bouton est très mauvais.
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 17h42   #7
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 175
Points : 28
Points : 28
Par défaut faut voir...

Faut voir... parce que l'utilisateur c'est moi!
ce que je voulais c'était comme dans excel, pouvoir très commodément, faire une petite marque en face d'un enregistrement quand je l'aperçois sur mon relevé de banque... je vais voir ce que je faire...
mais ce que tu proposais c'était que le form action renvoie à ma page dans lequel il y a le formulaire... soit... mais alors dis-moi
1) comment tester si on vient du lien de la checkbox
2) éventuellement je suis prêt à renvoyer à une autre page php qui s'appelerait bordereau.php, mais ce qui serait bien, c'est que le code s'exécute et que la page se ferme toute seule et que affichagetransactions.php soit ouverte à nouveau. Il y a de l'événement close dans l'air, je sais pas trop comment je peux faire ça???

Voilà, en fait, j'imagine que tu peux te contenter de répondre à la question 2, car si je peux le faire comme ça, j'ai pas besoin de la question 1 qui va compliquer les choses...


Cordialement
Mathieu
Mathieu72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 18h23   #8
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Je vois ce que tu veux dire, mais pourquoi tu veux pas enregistrer les modifs que au moment du clic sur un bouton "enregistrer" c'est quand même mille fois plus facile à mettre en place et c'est plus logique
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 20h12   #9
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 175
Points : 28
Points : 28
quel bouton enregistrer? celui du formulaire qui ouvre modifform.php? parce que je voudrais pouvoir juste changer le champ bordereau sans avoir à ouvrir un formulaire complet de modification de la transaction...
alors je pourrais aussi mettre un bouton dans un formulaire composé du seul bordereau? est-ce ça que tu voulais dire... mais le problème est alors le même, alors je repose la même question
ce qui serait bien, c'est que le code s'exécute et que la page se ferme toute seule et que affichagetransactions.php soit ouverte à nouveau. Il y a de l'événement close dans l'air, je sais pas trop comment je peux faire ça???
saurais-tu faire ça?
Mathieu
Mathieu72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 23h28   #10
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 175
Points : 28
Points : 28
vite fait une autre petite question, que j'avais depuis qq temps, mais que je viens essayer de résoudre, tout simple, tu devrais trouver facilement.
Dans affichagetransactions, quand j'affiche le champ descript (description de la transaction) de format varchar(155) avec
Code :
echo "<td align=left>".stripslashes($row["descript"])."</td>";
c'est ok, ça marche bien, plusieurs mots sont affichés pour les champs contenant plusieurs mot.
Après, je poste la valeur avec
Code :
<input type=hidden name=descript value=<?echo stripslashes($row["descript"])?>>
(ou sans le striplashes, c'est pareil)
Le problème c'est que dans modifform.php, avec ou sans le stripslashes, quand je demande l'affichage de $descript, il n'y a plus qu'un seul mot...
donc par exemple des descriptions comme "achat de livres" deviennent "achat"...
comment résoudre ce problème???
Mathieu72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 23h51   #11
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Il faut que tu entoures l'attribut par des guillemets et ça devrait aller mieux.


Pour le problème je capte plus grand chose à la cinématique des pages... C'est quoi modifform.php ? Tu as bien une page qui affiche toutes les transactions en donnant la possibilité de modifier juste le bordereau et une autre qui te permet de changer tous les champs des transactions ? C'est ça ? Mais il y a aucun lien entre ces pages ???
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2007, 16h27   #12
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 175
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 175
Points : 28
Points : 28
euh... les guillemets je les mets où exactement? au moment de l'envoi à partir de affichagetransactions.php? au moment de la réception dans modifform.php???

et pour l'autre problème,
ben c simple, je pense que ce quil faut, c'est la page affichagetransactions.php, qui contient 2 formulaire,
-l'un contient juste la case à cocher bordereau et envoie vers bordereau.php
ce qui serait bien, c'est qu'en cliquant sur la case, le code de modification de la base de données dans bordereau.php s'exécute et que la page se ferme toute seule et que affichagetransactions.php soit ouverte à nouveau. Il y a de l'événement close dans l'air, je sais pas trop comment je peux faire ça???
saurais-tu faire ça????
-l'autre envoie en hidden les autres champs, et ouvre un formulaire de modification complet: modifform.php, pas de problème à ce niveau-là...


Donc je me demande:
1) comment envoyé avec un formulaire post, un champ varchar(255) en gardant tous les mots s'il y a plusieurs mots? où mettre les guillemets? à l'envoi? à la réception?
2) comment ouvrir la page bordereau et la refermer aussitôt quand on clique sur la case à cocher? ou autre solution, pour exécuter le code quand on clique sur le bouton, c'est à dire faire autrement que de soumettre le formulaire en allant à l'adresse bordereau.php? (je me demande notamment s'il n'est pas possible en soumettant le formulaire action=xxx de mettre autre chose qu'une page...)

Voilà... je ne suis pas sûr de pouvoir te répondre pendant la semaine qui vient
mais j'attends tes propositions avec impatience
Mathieu
Mathieu72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h20.


 
 
 
 
Partenaires

Hébergement Web