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

MkFramework Discussion :

Gestion et envoi de données via les formulaires


Sujet :

MkFramework

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut Gestion et envoi de données via les formulaires
    Salut et bon début de week-end à tous,

    Je reviens à vous car j'ai eu une idée et pour la mettre en oeuvre je coince avec MKF. Je vous donne un aperçu:
    J'ai 3 tables liées:'candidats' ->'competences'
    'candidats'->'formations'
    (le '->' représente la migration des clés étrangères)

    Je veux que l'internaute remplisse la première page ( les informations sont destinées à la table 'candidats'), le valide et se retrouve sur la deuxième page (informations destinées à la table 'compétences') , la valide et va à la dernière page(informations destinées à la table 'formations'). Ce n'est qu'à la soumission de cette dernière page que l'insertion dans la base doit se faire pour les 3 tables avec les bonnes clés étrangères... J’espère que jusqu'ici vous me comprenez

    Pour afficher donc ces 3 formulaires j'utilise les vues 'new' des 3 modules. Je constate que lorsque je soumet chaque formulaire, eh ben il y a insertion directe dans la table concernée (ce qui est normal), mais ce n'est pas ce que je veux.

    Y a t-il un moyen de:
    1- Empêcher cette insertion et de plutôt envoyer l'objet que l'on vient de créer à la vue suivante ?
    2 - Envoyer les informations sans que celles ci ne soient visibles dans l'url?
    3 - Afficher 2 vues 'new' dans la même page (déja fait) mais avec un seul bouton 'submit' et le traitement d'insertion ans 2 tables?

    Désolée de bombarder tout ça très tôt le matin mais une bonne idée doit être vite concrétisée.

    Merci déjà pour les réponses.

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Je vois deux solutions:
    1. passer par l'enregistrement temporaire des informations en session, et envoyer en base uniquement à la dernière étape
    2. mettre les 3 formulaires au sein de la même page
    3. utiliser les modules embarquées: http://mkframework.com/screencasts_10.html

    Que ce soit la première ou seconde solution, il va falloir retravailler le code généré par le builder, seule la 3ème solution est plus "légère" à mettre en place, même si elle enregistre au fur et à mesure en base
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    Après avoir réfléchi suite à ta réponse je pense que je vais combiner les 2 premières solutions: la première page récupère les informations personnels du candidat, puis (sans enregistrer dans la base) envoyer ces informations à la deuxième page qui contiendra les formulaires 'new' des 'competences' et des 'diplomes'. Ce n'est qu'après cela qu'on enregistrera dans la base. Mais je n'ai pas compris ceci:
    1. passer par l'enregistrement temporaire des informations en session, et envoyer en base uniquement à la dernière étape
    Cela me fait penser que je dois utiliser quelque chose comme '$_SESSION[]' mais je ne suis pas sûre. Chose étonnante en plus, dans ma barre de debug je n'ai pas le bouton '$_SESSION'.

    A l'aide

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Oui effectivement, ça demande d'utiliser la variable $_SESSION

    de mémoire, le bouton n'apparait que lorsque la variable est remplie
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Alors, pour débuter mon premier formulaire je fais ceci:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php 
    session_start();
    $oForm=new plugin_form($this->oCandidats);
    $oForm->setMessage($this->tMessage);
    ?>
     
    <form action="<?php echo _root::getLink('competences::new')?>" method="POST" >

    et je termine le formulaire ainsi:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		<input type ="reset" value="Effacer" /><input type="submit" value="Suivant" />
    </form>
    J'aimerais savoir ce qui va s'exécuter quand l'internaute cliquera sur le bouton 'suivant'. Est-ce l'action '_new' du contrôleur 'candidats' ou est-ce qu'il sera immédiatement renvoyé à la vue 'new' du module 'competences' avec les valeurs de la session?

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Vu l'action indiqué dans le formulaire, il sera envoyé à module competences, méthode "_new" avec la variable $_POST envoyé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="<?php echo _root::getLink('competences::new')?>" method="POST" >
    C'est à vous ensuite de traiter l'information, comme le fait le crud de base, sauf qu'au moment du save (naturellement généré par le builder), il faut ici enregistre l'objet en session puis redirigé sur la page "etape 2"

    Dans le code processSave (de l'étape 1)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $_SESSION['objet1']=$oObjetModifie;
    //$oObjetModifie->save() (on ne sauvegarde pas en base)

    Et dans l'étape 2 au moment de la sauvegarde de l'objet 2

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $objet1=$_SESSION['objet1'];
    $objet1->save();
     
    //puis l'objet 2


    vous voyez l'idée ?

    je trouve ce cas intéressant, je le note pour un prochain tutoriel à écrire, ca peut aider d'autre utilisateurs en plus de vous

    N'hesitez pas si ma réponse n'est pas claire
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Vu l'action indiqué dans le formulaire, il sera envoyé à module competences, méthode "_new" avec la variable $_POST envoyé
    Si je comprend bien, à la soumission du formulaire, on exécute la méthode _new et processSave() ou l'on passe l'objet en session; puis on se dirige vers competences/new.php de l'action?

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    le plus "propre" serait des actions step1, step2... pour bien suivre la chronologie, et dans chaque action il y aurait le "code" du processSave

    comme ca dans votre code, vous lirez bien step1/step2.. plus simple de s'y retrouver
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Ok je met ça en place. Merci du conseil.

  10. #10
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    J'ai créé un nouveau module module module/inscriptions contenant le contrôleur main.php et les vues View/etape1.php, etape2.php ...
    Déjà dans le contrôleur j'ai la méthode _etape1() comme ceci :
    Code php : 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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    /*LES INSCRIPTIONS EN ETAPES*/
     
    	public function _etape1(){
     
    //debut du code de processSave()
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			$tMessage= null;
    		}
     
    		$oPluginXsrf=new plugin_xsrf();
    		if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    			$tMessage= array('token'=>$oPluginXsrf->getMessage() );
    		}
     
    		$oCandidats=new row_candidats;	
     
                    //Je donne des valeurs par défaut aux dates
    		if($oCandidats->date_inscription==null){
    			$oCandidats->date_inscription = date("Y-m-d");
    		}
    		$oCandidats->date_mise_ajour = date("Y-m-d");
    		if(!isset($_POST['jour'])){
    			$_POST['jour'] = 1;
    		}
    		$oCandidats->date_naiss = $_POST['annee'].'-'.$_POST['mois'].'-'.$_POST['jour'].'';
     
    		//On verifie la conformité des 2 mots de passe
    		if(_root::getParam('mot_de_passe')!=_root::getParam('conf_mot_de_passe')){
    			$tMessage = array('conf_mot_de_passe'=>'Les deux mots de passe doivent &ecirc;tre identiques');
    		}
     
    		//on nourri l'objet avec les valeurs du formulaire
     
    $tColumn=array('email','mot_de_passe','nom','prenom','lieu_naiss','sexe','telephone','situation_matri','nb_enfant','cv_fichier_num','pays_id','domaine_id');
    		foreach($tColumn as $sColumn){
    			$oCandidats->$sColumn=_root::getParam($sColumn,null) ;
    		}
     
    		if($oCandidats->isValid()){
     
    			$_SESSION['oCandidat']=$oCandidats;                   //on enregistre l'objet temporairement en session
     
    			//une fois enregistre on redirige (vers la page etape2)
    			_root::redirect('inscriptions::etape2');
     
    		}else{
    			$tMessage = $oCandidats->getListError();
    		}
     
    //FIN DU CODE DE processSave()
     
    		$oCandidats=new row_candidats;
     
    		$oView=new _view('inscriptions::etape1');
    		$oView->oCandidats=$oCandidats;
    		$oView->tMessage=$tMessage;
     
    				$oView->tJoinmodel_pays=model_pays::getInstance()->getSelect();		$oView->tJoinmodel_domaines=model_domaines::getInstance()->getSelect();
     
     
    		$oPluginXsrf=new plugin_xsrf();
    		$oView->token=$oPluginXsrf->getToken();
     
     
    		$this->oLayout->add('main',$oView);
    		$this->oLayout->title="e-tmg-Inscription candidat";
    	}
    //fin de l'étape 1
    Surprise désagréable: une erreur:
    Undefined offset: 1
    A laquelle je ne comprend pas grand chose. A secours

  11. #11
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Attention: le tableau message retourné pouvant contenir plusieurs erreurs par champ, c'est un tableau bidimensionnels qu'il attends

    donc ici:

    remplacez
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(_root::getParam('mot_de_passe')!=_root::getParam('conf_mot_de_passe')){
    			$tMessage = array('conf_mot_de_passe'=>'Les deux mots de passe doivent &ecirc;tre identiques');
    		}

    par

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(_root::getParam('mot_de_passe')!=_root::getParam('conf_mot_de_passe')){
    			$tMessage = array('conf_mot_de_passe'=>array('Les deux mots de passe doivent &ecirc;tre identiques'));
    		}

    note: quand vous indiquez une erreur, veuillez copier la stacktrrace, car la on ne sait memem pas sur quel objet/tableau, a quel ligne du fichier php ..
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  12. #12
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    D'accord, j'ai pris note en attendant de savoir ce qu'est la 'stacktrace'
    Bien je reprend le problème de façon ordonnée: dans mon url, lorsque j'accède à la page 'inscription::etape1' je vois mon formulaire avec déjà les messages en rouge de la fonction getCheck() sans avoir même soumis le formulaire. C'est étrange!cela est-il dû à la structure de ma méthode _etape1?
    Normalement le formulaire vide doit s'afficher sans erreur, puis je rempli les champs et ce n'est qu'à la soumission du formulaire que les erreurs doivent apparaître!

    Pour y revenir, l'erreur précédente était liée au token, je n'ai rien changé mais elle ne m’apparaît plus (magie).

  13. #13
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Pour faire "ordonné" et claire

    le plus simple:

    _etape1:
    appel formulaire + processSaveEtape1
    et dans le formulaire: action="" (en renvoi sur etape1)

    dans l'idée: si le formulaire est soumis
    • si il y a des erreurs , on affiche en rouge les champs manquants...
    • sinon: c'est ok, enregistrement de l'objet en SESSION et redirect vers etape2


    ENsuite

    _etape2:
    appel formulaire objet 2 + processSaveEtape2

    si le formulaire est soumis
    • si il y a des erreurs , on affiche en rouge les champs manquants...
    • sinon: c'est ok, enregistrement en base de l'objet précédement stoqué en SESSION et enregistrement de l'objet 2 en base


    Ceci vous semble claire dans l'idée

    Je pourrais voir ce soir pour écrire un tutoriel sur ce cas qui me semble fort intéressant à décrire
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  14. #14
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    C'est vrai que l'idée est claire,puisque je compte vraiment l'exploiter j'attendrai de voir concrètement à quoi ça ressemble dans le prochain tuto. Merci de ta patiente.

  15. #15
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Pas de soucis, je poste ici dès que le tuto est en ligne
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  16. #16
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  17. #17
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Super super, quelle rapidité!
    je lis ça cette nuit et mon retour demain. Merci, je crois que jusqu'ici on a fait un bon tour du sujet alors je peux le marquer en 'resolu'.

    A bientôt

  18. #18
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Bonjour,
    Parfait (comme toujours) le tutoriel. je l'ai adapté à mon cas, c'est cool. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplir les bases de données via un formulaire
    Par gangsterus dans le forum VB.NET
    Réponses: 36
    Dernier message: 27/12/2007, 11h43
  2. Réponses: 1
    Dernier message: 01/10/2007, 16h43
  3. [SQL] Pb Sql lors de l envoie des données via un formulaire
    Par xtiand4 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h18
  4. erreur lors de l'envoie de donné via les socket.
    Par poporiding dans le forum C++
    Réponses: 1
    Dernier message: 23/05/2006, 14h23
  5. envoie de fichiers via les formulaires
    Par fabogranqi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 10/10/2004, 21h34

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