begin process at 2012 05 31 13:19:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Divers

 > 

Quelle méthode plus professionnelle switch ou isset


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Quelle méthode plus professionnelle switch ou isset

mardi 26 février 2008 à 18:10:06 | Quelle méthode plus professionnelle switch ou isset

g_barthe

Bonsoir,

Je me pose une question basique sur l'optimisation de mon code.

J'ai une page avec plusieurs formulaires qui s'affichent selon des conditions via TinybutStrong et des boutons submit pour soumettre le formulaire.

<input type='submit' name='ajouter' value="[var.lister_la_marque]" class='b_liste_fils_marque'>

et je récupère l'info avec cela :

switch ($_POST['ajouter']) {
        case $lister_la_marque:
.........

Cela marche très bien sauf que je commence à avoir pas mal de switch en fonction de mes cas.

Et j'ai trouvé sur ce site qqn qui utilisait :

if (isset($_POST['ajouter']))
     {
............

Les 2 marchent très bien. Je me demande lequel est le plus orthodoxe ou professionnel et si l'un est plus performant que l'autre.

Je souhaite également aborder la prog objet pour mon application. Je me dis le switch en POO bof alors que le isset est peut être plus approprié.

Pourriez-vous m'eclairer sur le sujet et me conseiller.

Merci d'avance.

---------------------------------------------------------
Forum perso : http://le-genie-climatique.positifforum.com
Forum travaux manuels : http://pausebroderie.fr
mardi 26 février 2008 à 18:24:04 | Re : Quelle méthode plus professionnelle switch ou isset

Evangun

Hello,

POO et switch, où est la contradiction ? :)
Le switch est juste plus propre et lisible que plein de isset à la suite. Et sûrement plus rapide quand tu as pleiiiiiiiiin de isset vu que tu peux utiliser break, mais sinon...

à+
mardi 26 février 2008 à 19:26:51 | Re : Quelle méthode plus professionnelle switch ou isset

malalam

Administrateur CodeS-SourceS
Hello,

moi je ne vois surtout pas le rapport entre les deux...? isset() vérifie si une variable a été définie. switch applique un comportement suivant  le résultat d'une expression ou d'une variable. C'est totalement différent. Et avant d'utiliser un switch() sur une variable, il faut s'assurer qu'elle existe (isset()).
mardi 26 février 2008 à 19:57:52 | Re : Quelle méthode plus professionnelle switch ou isset

Evangun

Lol c'est vrai Malalam, j'avais même pas fait attention, je suppose qu'il parle de choisir entre switch et if ( x == y ) { } else if (x == z) { ...
mardi 26 février 2008 à 20:43:48 | Re : Quelle méthode plus professionnelle switch ou isset

nicomilville

Membre Club
salut,

ça dépend ce que tu veut faire !!!

Si t'a besoin d'aide, MP !!!

mardi 26 février 2008 à 20:53:44 | Re : Quelle méthode plus professionnelle switch ou isset

malalam

Administrateur CodeS-SourceS
Moui, vu son exemple, suis pas sûr moi :-)
Globalement, si ta variable n'a qu'une seule valeur possible (et c'est le cas pour un bouton submit), il vaut mieux faire :
if(isset($maVar) && $maVar === 'valeur_attendue')
qu'un switch.
Un switch() est là pour tester différentes valeurs possibles et adopter un comportement spécifique à chacune de ces valeurs.

Quant à utiliser le switch() dans de la POO, je ne vois pas pourquoi ce serait contre-indiqué. Tout dépend de l'utilisation que l'on en a : dans certains cas, switch est plus performant, dans d'autres, if ... elseif le sera plus. Mais pour un seul if()...autant conserver if() qui ne sera pas plus lent que switch et fera gagner quelques lignes de code.
mardi 26 février 2008 à 20:54:32 | Re : Quelle méthode plus professionnelle switch ou isset

g_barthe

Merci à vous.

Je vous met un exemple de ce que j'ai fait où je sens que ca va vous hérissez les poils et que j'ai déjà limite honte à vous le montrer.



J'attendrais vos remarques qui j'espère seront constructives.

Une partie du fichier template :

<!-- Affichage conditionnel si volont? d'ajouter une BD -->
<div>[onload;block=div;when [var._SESSION.ajout_bd;noerr]=='ok']
   <div class='titre_action_bd'>[var.ajouter_une_bd]</div>
     <fieldset class='ajout_bd_0'>
   <form action='./bd.php' method='post'>
      <label>[var.serie_bd] : </label>
        <select name='serie_bd' class='ajout_bd_1'>
               <option value='0'>[var.selectionner_1_bd]</option>
                 <option value='[liste_series.val;block=option]'>[liste_series.val]</option>
            </select>
        <br />
        <label>[var.titre_bd] : </label><input type='text' name='titre_bd' class='ajout_bd_2' />
        <br />
        <label>[var.numero_bd] : </label><input type='text' name='numero_bd' class='ajout_bd_3' />
        <br />
        <label>[var.possesseur] : </label>
        <select name='le_possesseur' class='ajout_bd_4'>
               <option value='0'>[var.selectionner_1_possesseur]</option>
                 <option value='[liste_possesseurs.val;block=option]'>[liste_possesseurs.val]</option>
            </select>
      <br />
            <div class='conseil_bd'>* [var.conseils_bd]</div>
            <input type='submit' name='ajouter' value="[var.enregistrer_bd]" class='b_enregistrer_bd'>
     </form>
     </fieldset>
</div>
<!-- Affichage conditionnel si BD bien ajout?e -->
<div>[onload;block=div;when [var._SESSION.recap_ajout_bd;noerr]=='ok']
   <form action='./bd.php' method='post'>
        <label>[var.ajout_bd_termine].</label>
     </form>
</div

et le fichier php qui interagit :

// Session pour les variables
session_start();

// Inclusion de tous les fichiers
include_once('../../commun/tbs_class_php5.php'); // Appel de la librairie TinyButStrong

// Initialisation des variables qui permettent les affichage conditionnels du HTML
$_SESSION['ajout_bd'] = '0';
$_SESSION['recap_ajout_bd'] = '0';
$_SESSION['ajouter_serie_bd'] = '0';
$_SESSION['recap_ajout_serie_bd'] = '0';
$_SESSION['liste_bd'] = '0';
$_SESSION['lister_serie_bd'] = '0';
$_SESSION['lister_possesseur_bd'] = '0';
$_SESSION['afficher_lister_serie_bd'] = '0';
$_SESSION['afficher_lister_possesseur_bd'] = '0';
$_SESSION['bd_supprimer'] = '0';
$_SESSION['serie_bd_supprimer'] = '0';
$_SESSION['serie_bd_supprimer_erreur'] = '0';
$_SESSION['serie_bd_modifier'] = '0';
$_SESSION['modifications_serie_appliquees'] = '0';
$_SESSION['bd_modifier'] = '0';
$_SESSION['modifications_appliquees'] = '0';
$_SESSION['possesseur_bd_vide'] = '0';
$_SESSION['serie_bd_vide'] = '0';
$_SESSION['piratage'] = '0';

// Initialisation des objets
$TBS = new clsTinyButStrong;

if (session_is_registered("authentification")) // v?rification sur la session authentification (la session est elle enregistr?e ?)
{
   // R?cup?ration des variables pour acc?s ? la bdd
     $db_host = $_SESSION['hote_bdd'];
     $db_name = $_SESSION['nom_bdd'];
     $db_root = $_SESSION['user_bdd'];
     $db_pass = $_SESSION['pass_bdd'];

   // Inclusion de tous les fichiers
     include_once('../../classe_mysql_bdd.php'); // Appel du fichier de gestion des classes MySQL
     include_once('../../commun/constantes.php'); // Appel du fichier des constantes
     include_once('../../commun/fonctions.php'); // Appel du fichier des fonctions r?currentes
     include_once('../../commun/fonctions_bd.php'); // Appel du fichier des fonctions pour les

   // Initialisation des objets
   $base_de_donnees = new Database($db_host, $db_root, $db_pass, $db_name);
   $BD = new BD();
   $fonctions_generales = new operations_generales();

   // R?cup?ration de la variable de langue
   $langue = $_SESSION['langue'];

   // Appel du fichier de langues
   $chemin_langues = '../../langues/' . $langue . '/' . $langue . '.php';
   include_once($chemin_langues);

   // action en cas de clic sur le bouton gestion_bd pour ajouter une BD
   switch ($_POST['gestion_bd']) {
        case $ajouter_bd:
             $_SESSION['ajout_bd'] = 'ok';
             
               // Fonction pour les series de BD
               $db_table = SERIES_BD;
                $find = 'series_bd';
               $series = $BD->series_bd($base_de_donnees, $find, $params = array('order' => 'series_bd ASC'), $db_table);
         
               // Fonction pour les possesseurs
               $db_table = POSSESSEURS;
               $find = 'nom_possesseur';
               $liste_possesseurs = $fonctions_generales->possesseurs($base_de_donnees, $find, $db_table, $params = array());
             
               // Appel du fichier modele
               $TBS->LoadTemplate('../../modeles/bd.html');
               $TBS->MergeBlock('liste_series', 'array', 'series');
               $TBS->MergeBlock('liste_possesseurs', 'array', 'liste_possesseurs');
        break;   
   }
// action en cas de clic sur le bouton ajouter pour ajouter une BD
switch ($_POST['ajouter']) {
      case $enregistrer_bd:
           $serie_bd = mysql_real_escape_string($_POST['serie_bd']);
             $titre_bd = mysql_real_escape_string($_POST['titre_bd']);
             $numero_bd = mysql_real_escape_string($_POST['numero_bd']);
             $possesseur = mysql_real_escape_string($_POST['le_possesseur']);
             if ($serie_bd == '' or $titre_bd == '' or $numero_bd == '' or $possesseur == '') {
                echo $erreur_champs_vides_bd;
             }
             else {
                  // Fonction pour l'id de la serie de BD
                $db_table = SERIES_BD;
                $find = 'id_series_bd';
                $result = $base_de_donnees->select($find, $params = array('where' => "series_bd = '" . $serie_bd . "'"), $db_table);
                    $id_serie = mysql_result($result,0,('id_series_bd'));
                  // Fonction pour l'id du possesseur de BD
                $db_table = POSSESSEURS;
                $find = 'id_possesseurs';
                $result = $base_de_donnees->select($find, $params = array('where' => "nom_possesseur = '" . $possesseur . "'"), $db_table);
                    $id_possesseur = mysql_result($result,0,('id_possesseurs'));                   
                    // Comptage du nombre de BD avant l'ajout pour verif bien ajout?
                    $db_table = BD_TABLE;
                    $find = 'id_bd';
                     $nb_initial_bd = $base_de_donnees->count($params = array(), $db_table);
                // Requete ajout de la BD
                  $attributes = array('id_bd' => 'Default', 'titre_bd' => $titre_bd, 'T_series_bd_id_series_bd' => $id_serie, 'T_possesseurs_id_possesseurs' => $id_possesseur, 'numero_bd' => $numero_bd);
                    $base_de_donnees->add($attributes, $db_table);
                    // Comptage du nombre de BD apres l'ajout pour verif bien ajout?
                    $find = 'id_bd';
                     $nb_final_bd = $base_de_donnees->count($params = array(), $db_table);
                if ($nb_initial_bd < $nb_final_bd)
                {
                   $_SESSION['recap_ajout_bd'] = 'ok';
                }
             }
             // Appel du fichier modele
             $TBS->LoadTemplate('../../modeles/bd.html');
        break;
}

C'est peut être pas tres clair vu de l'extérieur.

J'ai une classe qui gère les opérations liées à MySQL et les templates sont issus de tinybutstrong (simple et suffisant pour ce que je veux faire). J'avais envisager d'utiliser le framework de Zend mais un peu trop compliquer j'ai pas réussi à avancer.

Je fait évoluer mon code en me perfectionnant au fur et à mesure de apprentissage et de la lecture des tutoriels. PHP c'est bien mais dès qu'on fait un truc complexe faut bien se structurer.

Le but de mon application est un outils de gestion de collection (bd, cd, etiquettes de vin, pièces euros...) le tout le plus modulable possible pour ne pas redevelopper 4 fois la meme fonction avec des paramètres différents.

N'hésitez pas à me dire ce que je peux améliorer dans ma façon de coder.

---------------------------------------------------------
Forum perso : http://le-genie-climatique.positifforum.com
Forum travaux manuels : http://pausebroderie.fr


Cette discussion est classée dans : post, méthode, switch, isset, professionnelle


Répondre à ce message

Sujets en rapport avec ce message

Lycos et POST [ par perig ] Bonjours Voila sous lycos je n'arrive pas a créer un form avec pour méthode "post", avec "get" ça marche très bien je récupère bien mes valeurs mais p Réccupérer variables POST pour Include [ par khyor ] Bonjour,Pour l'administration de mon site, j'ai réuni dans un même fichier (admin.php), les différentes actions (ajouter, modifier, supprimer un utili Recuperation variable dans un formulaire [ par magicpicpic ] Bonjour, je cherches a partir d'une page de login recuperer ce login dans ma page header, j'ai aucune idee comment faire a part mon debut de code:Pour Query à critère multiples optionnels [ par dieusurterre ] Bonjour, Je désire faire une requete à ma base de données sur plusieurs critères qui PEUVENT être remplis mais qui ne sont pas obligatoires Exemple: Probleme d'envoie de mail [ par g_tony ] Bonjour je dois faire un petit formulaire d'inscirption qui m'envoie un mail mais je ne comprend pas celui ci ne fonctionne pas pourtant je l'ai deja Problème d'envoie de formulaire par mail [ par ntangre ] Bonjour à tous, je viens de créer un formulaire de contact (formulaire) celui ci à comme cible (formulairecible) ou je reçois toutes les informatio Erreur unexpected T_IF [ par jimmypage64 ] Bonjour j'ai une petite erreur dans mon code et je ne vois pas du tout d'ou cela peut venir !!! Mon code est le suivant : if (isset($_POST['validinsc statistiques [ par gabs77 ] bonjour, je cherche a faire des statistiques numériques avec un formulaire de choix des informations a évaluerdonc les statistiques se feront sur la t Sessions ... [ par ZuGbEn ] Est-ce que vous pensez que si je fait un système de login comme cela : <span style="color: rgb(165, 42, 4 Prob enregistrer données après vérif [ par cobrachris ] Bonjour,J'ai de nouveau un petit problème.J'ai un formulaire pour enregistrer des données, en bas, un bouton d'action qui renvoit vers une page pour r


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,343 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales