IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Conception] Formulaire et case à cocher [Débutant(e)]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 176
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 176
    Par défaut
    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

  4. #4
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 176
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    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.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 176
    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

  8. #8
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 176
    Par défaut
    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

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 176
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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???

  11. #11
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    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 ???

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 176
    Par défaut
    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

Discussions similaires

  1. formulaire et case à cocher
    Par averooès dans le forum VBA Access
    Réponses: 9
    Dernier message: 27/03/2009, 09h20
  2. Formulaire et case à cocher
    Par microJaP dans le forum Langage
    Réponses: 2
    Dernier message: 25/01/2009, 00h06
  3. [A-03] Vérouiller un sous-formulaire avec case à cocher
    Par marcopolo29280 dans le forum IHM
    Réponses: 3
    Dernier message: 27/11/2008, 16h17
  4. Formulaire et cases à cocher
    Par malabar92 dans le forum IHM
    Réponses: 16
    Dernier message: 08/10/2007, 17h51
  5. [Conception] formulaire et case à cocher et recherche dans une base de donnée
    Par olivier_1970 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/06/2006, 01h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo