• Aucun résultat trouvé

TP 4 ­  Prog. Web – Structure de base MVC

N/A
N/A
Protected

Academic year: 2022

Partager "TP 4 ­  Prog. Web – Structure de base MVC"

Copied!
5
0
0

Texte intégral

(1)

TP 4 ­  Prog. Web – Structure de base MVC

 

version 2 : vérifier les données et si une erreur est détectée, ré­afficher le formulaire avec les  données saisies par l'utilisateur ainsi que les erreurs détectées (lors de la création et la 

modification d'un produit) exemple de script :

public function validFormCreerProduit()       { 

       $erreurs=array(); 

        $donnees['nom']=htmlentities($_POST['nom']); // evite injection js ... 

        $donnees['id_type']=htmlentities($_POST['id_type']); 

        $donnees['prix']=htmlentities($_POST['prix']); 

        $donnees['photo']=htmlentities($_POST['photo']); 

        if (!preg_match("/[A­Za­z]{2,}/",$donnees['nom'])) 

      $erreurs['nom']='le nom doit être composé au minimum de 2 lettres'; 

        if(! ctype_digit($donnees['id_type'])) 

      $erreurs['id_type']='veuillez saisir un entier'; 

        elseif (!$this­>instanceModelProduit­>verif_id_type($donnees['id_type']))        $erreurs['id_type']='Saisir une valeur numérique qui existe dans la  table id_type'; 

        if(! is_numeric($donnees['prix'])) 

      $erreurs['prix']='veuillez saisir une valeur numérique'; 

        if (! preg_match("/[A­Za­z0­9]{2,}.(jpeg|jpg|png)/",$donnees['photo']))        $erreurs['photo']='nom de fichier incorrect, extension .jpeg ou .jpg  ou .png'; 

        if(! empty($erreurs))          { 

      include("views/v_head.php"); 

      include("views/v_menu.php"); 

      include("views/v_form_create_produit.php"); 

      include("views/v_foot.php"); 

        }          else          { 

      $this­>instanceModelProduit­>insertUnProduit($donnees); 

      header("Location: ".BASE_URL."index.php/Produit/afficherProduits"); 

        } 

    }  

(2)

dans chaque vue, intégrer l'affichage des erreurs :

<label>Nom

<input name="nom" type="text" size="18" value="<?php if(isset($donnees['nom'])) echo $donnees['nom']; ?>"/>

<?php if(isset($erreurs['nom'])) echo '<small class="error">'.$erreurs['nom'].'</small>'; ?>

</label>

 gérer une liste déroulante, cette liste permet de remplacer l'identifiant du type de produit, 

<label>Type 

<select name="id_type"> 

<?php foreach($typeProduit  as $key=>$value) : ?> 

<option value="<?php echo $key; ?>" 

<?php if(isset($donnees['id_type'])  and $donnees['id_type']==$key): ?>

selected<?php endif; ?> > 

<?php echo $value; ?> 

    </option> 

<?php endforeach; ?> 

</select> 

<?php if(isset($erreurs['id_type']))  echo '<small class="error">'.

$erreurs['id_type'].'</small>'; ?> 

</label>

dans votre modèle, intégrer une méthode pour récupérer le contenu de la liste déroulante, exemple :

    function dropDownTypeProduit(){ 

        

        $requete="SELECT id_type,libelle  FROM typeProduit ORDER BY id_type;"; 

        $select = $this­>db­>query($requete); 

        $result = $select­>fetchAll(); 

        $liste_dropDown = array(); 

        if(count($result) > 0){ 

      $liste_dropDown[''] = 'selectionner un type'; 

      foreach($result as $row){ 

      $liste_dropDown[$row['id_type']] = $row['libelle']; 

(3)

Routage avec slim

# installation : dans un terminal, sur le dossier racine (index.php), installer composer et exécuter la  commande ci dessous :

composer require slim/slim "^3.0"

*  dans le fichier `index.php`

commenter et rajouter

//include("kernel.php");

require 'vendor/autoload.php';

$app = new \Slim\App;

faire quelques tests 

$app­>get('/',function(){

    echo 'bienvenue';

});

$app­>get('/hello/{name}', function ($request, $response, $args) {     $response­>write("Hello, " . $args['name']);

    return $response;

});

$app­>get('/hello2[/{name}]', function ($request, $response, $args) {     $response­>write("Hello, " . $args['name']);

    return $response;

})­>setArgument('name', 'World!');

$app­>get('/produit', function ($request, $response, $args) {     include('controllers/produit_c.php');

    $instanceProduit = new Produit();

    $instanceProduit­>index();

});

// Run app

$app->run();

# à l'aide des exemples ci dessus refaire le routage de votre application

(4)

Autre exemple de contrôle des données

remplacer dans l'exemple ci dessus les fonctions de contrôle si c'est possible par des fonction du type  filter_var 

http://php.net/manual/fr/intro.filter.php

http://www.w3schools.com/php/php_filter.asp

ANNEXE

<?php

$filter = array(

    'email' => FILTER_VALIDATE_EMAIL,

    'septdigits'    => array('filter'  => FILTER_VALIDATE_REGEXP,         'options' => array('regexp' => '/^\d{7}$/')

    ),

    'zeroAvingt'    => array('filter'   => FILTER_VALIDATE_INT,         'options' => array('min_range' => 0,'max_range' => 20)     ),

    'encodeurl' => array( 'filter' => FILTER_SANITIZE_ENCODED ),     'checkboxes' => array( 'filter' => FILTER_VALIDATE_INT,         'flags'  => FILTER_REQUIRE_ARRAY,

    ),

    'estUnBoolean' => array( 'filter' => FILTER_VALIDATE_BOOLEAN ),     'validurl' => FILTER_VALIDATE_URL,

    'doitExister' => FILTER_VALIDATE_INT );

if ( isset($_POST) ) {

    $inputs = filter_input_array(INPUT_POST, $filter);

    if (empty($inputs['email'])) $errors['email'] = "l'email n'est correct";

    if (empty($inputs['septdigits'])) $errors['septdigits'] = "le numérique doit être sur 7 digits";

    if (empty($inputs['zeroAvingt'])) $errors['zeroAvingt'] = "zeroAvingt n'est pas un nombre entre 0  et 20";

    if (empty($inputs['encodeurl'])) $errors['encodeurl'] = "encodeurl est vide ou invalide";

    if (empty($inputs['checkboxes']))$errors['checkboxes'] = "aucune case à cochée n'est  selectionnée.";

    echo "<pre>";

    var_dump($inputs);

    var_dump($errors);

    echo "</pre>";

}

?>

<form method="post" action="<?= $_SERVER['PHP_SELF']; ?>">

    Email: <input type="text" name="email" value="email@example.com" /><br /><br />

    7 Digits: <input type="text" name="septdigits" maxlength="7" /><br /><br />

(5)

    </select><br /><br />

    <input type="hidden" name="validurl" value="http://votreUrl.com" />

    <input type="submit" value="Soumettre" />

</form>

Références

Documents relatifs

On désire créer un document toc.html comportant la liste des liens vers les icônes se trouvant dans le répertoire images/icons à la racine du serveur web sur nyx, créez

Le programme calcule aussi la sphère qui se rapproche au mieux du front d'onde mesuré; il calcule donc le rayon de courbure moyen du front d'onde dans le plan des microlentilles

Ecrire un programme permettant de créer une table qui contient dans la colonne 1 : les noms des variables explicatives du modèle vu dans le TP précédent, dans

(Utiliser les fonctions prédéfinies) 8) Enregistrer

Ex : Réécrire les équations bilan de chacune des deux expériences précédentes et entourer de deux couleurs différentes les deux couples acido-basiques mis en jeu et noter s'il

II Formulaires et Filtrage des Données Utilisateur 46 3 Formulaires HTML/PHP 49 3.1 Formulaires

● Sélectionner les données dans la base pour alimenter le modèle. ● Passer les éléments du modèle aux vues correspondant à

 Les objectifs retenus pour l’ORB Provence-Alpes-Côte d'Azur sont de rendre disponibles et accessibles les informations sur la biodiversité régionale, les diffuser et les