CodeIgniter : Tp3 les formulaires - Belsunce-Shop
Transcription
CodeIgniter : Tp3 les formulaires - Belsunce-Shop
CodeIgniter : Tp3 les formulaires I - PRELIMINAIRE Prendre la MV avec WampServer. 1. Créer un dossier sous www/CodeIgniter/tp3. Dézipper le contenu de l’archive de CodeIgniter dans ce dossier. 2. Supprimer licence.txt et user_guide. 3. Configurer le fichier application/config/config.php : Modifier le langage ($config['language'] = "french";) et installer le dossier french dans application/language Modifier la ligne : $config['base_url']= 'http://localhost/CodeIgniter/tp3/'; 4. Positionner la feuille de style style.css dans le dossier tp3/css à créer. 5. Ouvrir le fichier application/config /autoload.php. Charger les helper ‘url’, ‘html’ et ‘form’ : Sauvegarder et fermer ce fichier. 6. Ouvrir le fichier application/config/routes.php. Modifier $route['default_controller'] en changeant le controleur par défaut : la ligne $route['default_controller'] = « controleurTp3 » ; 7. Créer le controleur application/controllers/controleurTp3.php : <?php class ControleurTp3 extends CI_Controller { function __construct() { parent:: __construct(); } function index() { $this->load->view('vue1Tp3'); } } Sauvegarder le controleur. 8. Créer la vue application/views/vue1Tp3.php : SIO2 SLAM5 CodeIgniter Tp3 1 <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <link rel='stylesheet' href="<?php echo base_url(); ?>/css/style.css" /> <title>Accueil Tp3</title> </head> <body> <div id="pagewidth" > <div id="header"><h1>CodeIgniter-Tp3-Formulaires</h1></div> <div id="maincol"> L'objectif de ce Tp est de s'initier à l'utilisation des formulaires à l'aide de CodeIgniter : <?php echo ul(array('Zone de texte', 'Boutons radios','Zone de liste')); ?> </div> <div id="leftcol"> <h2>Menu</h2> <?php echo anchor('controleurTp3/index','Accueil','Retour accueil'); echo br(1); echo anchor('controleurTp3/vue2','Formulaire','Création de contrôles'); echo br(1); ?> </div> </div> </body> </html> 9. Tester : SIO2 SLAM5 CodeIgniter Tp3 2 II- APPLICATION 1 - Mise en place des contrôles graphiques Créer une nouvelle méthode dans le controleur vue2 qui chargera une autre vue vue2Tp3.php : function vue2() { $this->load->view('vue2Tp3'); } Créer cette vue application/views/vue2Tp3.php : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <link rel='stylesheet' href="<?php echo base_url(); ?>/css/style.css" /> <title>Formulaire Tp3</title> </head> <body> <div id="pagewidth" > <div id="header"><h1>CodeIgniter-Tp3-Formulaires</h1></div> <div id="maincol"><h2>Les formulaires</h2></div> <div id="leftcol"> <h2>Menu</h2> <?php echo anchor('controleurTp3/index','Accueil','Retour accueil'); echo br(1); echo anchor('controleurTp3/vue2','Formulaire','Création de contrôles'); echo br(1); ?> </div> </div> </body> </html> Tester : SIO2 SLAM5 CodeIgniter Tp3 3 Aller faire un tour au manuel en ligne : http://ellislab.com/codeigniter/userguide/helpers/form_helper.html pour visualiser les fonctions proposées par le helper Form : Créer un formulaire dans vue2Tp3.php avec 2 zones texte de saisie et deux boutons : … <div id="maincol"><h2>Les formulaires</h2> <?php echo form_open('controleurTp3/traitForm'); echo form_label('Variete : '); echo form_input('txtLib'); echo br(2); echo form_label('Prix : '); echo form_input('txtPx'); echo br(2); echo form_submit('cmdValider','Valider'); echo form_reset('cmdAnnuler','Annuler'); echo form_close(); ?> </div> <div id="leftcol"> <h2>Menu</h2> Tester : SIO2 SLAM5 CodeIgniter Tp3 4 Créer la méthode traitForm() (vide pour l’instant) dans le controleur et tester les boutons (le bouton Valider ne donne rien) : function traitForm() { } Avertissement : on va faire des affichages à partir du controleur, pour tester le code, mais ce n’est pas le rôle habituel du controleur ! On va afficher la variété saisie (par exemple Tomates) à partir du formulaire. Dans la méthode traitForm() : echo $this->input->post('txtLib'); En appuyant sur le bouton Valider, on obtient : Ajouter des boutons radio (pour des frais de transport Metropole ou DomTom) : echo form_label('Metropole : '); $data = array('name' => 'rdbPort', 'value' => 'metrop', 'checked' => TRUE); echo form_radio($data); echo br(1); echo form_label('DomTom : '); $data = array('name' => 'rdbPort', 'value' => 'domtom', 'checked' => FALSE); echo form_radio($data); echo br(2); echo form_submit('cmdValider','Valider'); Tester : SIO2 SLAM5 CodeIgniter Tp3 5 Ajouter une liste déroulante. Elle comportera les quantités de produit souhaitées (1,2,3,4 unité en kilo). echo form_label('Quantite : '); $options = array('1' => '1','2' => '2','3' =>'3' ,'4' =>'4'); echo form_dropdown('lstQte', $options, '1'); // 3ème param : item sélectionné par défaut : correspond au selected echo br(2); echo form_submit('cmdValider','Valider'); Tester : Afficher les valeurs choisies (variété, prix, transport et quantité) : On va afficher désormais les montants (brut, port, à payer). Le port est nul si le produit vient de métropole, sinon il est égal à 10% du montant brut (prix * qte) : SIO2 SLAM5 CodeIgniter Tp3 6 2 – Validation du formulaire Si on oublie de saisir une quantité ou un prix, l’affichage précédent n’a plus de sens. Il faudrait éviter ce type d’erreur, de même si l’on saisit une valeur de type syntaxique différent de celui qui est attendu. D’où la nécessité de contrôler les valeurs saisies. Ajouter une nouvelle vue3Tp3 pour afficher le détail de la commande dans le constructeur à la méthode traitform() : $this->load->view('vue3Tp3'); Créer la vue application/views/vue3Tp3.php : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <link rel='stylesheet' href="<?php echo base_url(); ?>/css/style.css" /> <title>Mavue</title> </head> <body> <div id="pagewidth" > <div id="header"><h1>Codeigniter-Tp3-Formulaires</h1></div> <div id="maincol"><h2>Détails de la commande</h2> <?php echo "Vous avez commandé des $lib, pour un montant de $mtBrut euros."; echo br(1); echo "Le port est de $port euros."; echo br(1); echo "Votre montant à payer est donc de $mtPayer euros"; ?> </div> <div id="leftcol"> <h2>Menu</h2> <?php echo anchor('controleurTp3/vue2','Formulaire','Création de contrôles'); echo br(1); ?> </div> </div> </body> </html> Modifier la méthode traitForm() afin d’envoyer les données nécessaires à la vue vue3Tp3 : $mtBrut = $this->input->post('txtPx') * $this->input->post('lstQte'); $port = 0; if($this->input->post('rdbPort') == 'domtom') { SIO2 SLAM5 CodeIgniter Tp3 7 $port = 0.1 * $mtBrut; } $mtPayer = $mtBrut + $port; $param = array ('mtBrut' => $mtBrut, 'port' => $port, 'lib' => $this->input>post('txtLib'),'mtPayer' => $mtPayer); $this->load->view('vue3Tp3',$param); Ajouter la librairie form_validation dans le fichier autoload.php : $autoload['libraries'] = array('form_validation'); On va définir des règles de validation sur les zones de saisie. Dans la méthode traitForm(), avant tout traitement : $this->form_validation->set_rules('txtLib', 'Variete','trim|required|alpha_dash'); $this->form_validation->set_rules('txtPx', 'Prix','trim|required|alpha_dash'); if ($this->form_validation->run()) { // traitement } else { $this->load->view('vue2Tp3'); } La 1ère ligne indique une règle sur le contrôle txtLib : trim = retrait des éventuelles espaces avant et après la valeur ; required = présence obligatoire d’une valeur, alpha_dash = seuls les caractères alphanumériques sont acceptés. La 2ième ligne concerne la règle de validation associée au contrôle txtPx. Voir sur le site officiel les autres options possibles : http://www.codeigniter.com/user_guide/libraries/form_validation.html#theform SIO2 SLAM5 CodeIgniter Tp3 8 Le test des règles se fait avec la méthode run( ). Tester. Il serait plus convivial d’afficher un message d’erreur en cas de problème de saisie. Retourner dans le code de la vue vue2Tp3 et saisir la ligne suivante : echo form_input('txtLib'); echo form_error('txtLib','<span class=error>', '</span>'); echo br(2); Le message d’erreur porte sur le contrôle de saisie txtLib avec la méthode form_error( ). La balise span permet de donner un style au message. Faire de même pour le contrôle txtPx et tester : SIO2 SLAM5 CodeIgniter Tp3 9 Dernier détail à régler : en cas d’erreur de saisie, le formulaire est rechargé en perdant toutes les autres valeurs déjà saisies. On rajoute un deuxième paramètre dans la méthode form_input () : echo form_input('txtLib',set_value('txtLib')); Faire de même pour le prix : SIO2 SLAM5 CodeIgniter Tp3 10