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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

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