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 :

Condition dans une boucle : ça me parait moche


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Par défaut Condition dans une boucle : ça me parait moche
    Bonjour à tous!
    Je vous sollicite aujourd'hui pour obtenir vos avis, conseils concernant le besoin ci-dessous.

    J'utilise en PHP une boucle qui me permet d'interroger une table contenant une liste de figurines.
    Dans ma boucle j'affiche la date de sortie de chacune d'elles.

    Ce que je souhaite faire : afficher "Bientôt disponible" lorsque la date de sortie FR est supérieure à la date du jour.

    Je ne sais pas trop comment faire, utiliser une condition dans ma boucle me semble périlleux. Pouvez-vous m'aider svp ?

    Voici le code utilisé :

    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
    <?php
    include 'connect_db.php';
     
    // Si tout va bien, on peut continuer
     
    // On récupère tout le contenu de la table figurine et image
    $reponse = $pdo->query(
    	'SELECT * FROM figurine AS f, image AS i, serie AS s
    	WHERE fk_i_id=i_id
    	AND fk_s_id=s_id
    	GROUP BY f_id');
     
    $current_date = date("d-m-Y");
    echo "<p>Nous sommes le " . $current_date . "</p>" ;
     
    // On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
    {
    ?>
        <p>
    		ID : <?php echo $donnees['f_id'];?>
    		<strong>Figurine</strong> : <?php echo $donnees['f_name']; ?><br />
        Cette figurine fait parti de la série suivante : <?php echo $donnees['s_name']; ?>.<br />
    		Date de sortie FR : <?php echo $donnees['f_release_date_fr'];?><br />
    		Date de sortie USA : <?php echo $donnees['f_release_date_usa'];?><br />
    		Date de sortie JP : <?php echo $donnees['f_release_date_jp'];?><br />
    		Date de sortie AUS : <?php echo $donnees['f_release_date_aus'];?><br />
    		ID de l'image associée : <?php echo $donnees['i_id'];?><br />
    		<img src="http://localhost:8888/test/<?php echo $donnees['i_location'].$donnees['i_name']; ?>"><br />
    		<a href="edit_figurine.php?id=<?php echo urlencode($donnees['f_id']); ?>;">éditer</a>
    		</p>
    <?php
    }
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    ?>

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Pourquoi ce serait périlleux de faire une condition dans une boucle ?

  3. #3
    Membre Expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 494
    Billets dans le blog
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    figurine AS f, image AS i, serie AS s
    Pourquoi détériorer les noms des tables alors qu'ils étaient parfaitement lisibles ?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Par défaut
    Citation Envoyé par badaze Voir le message
    Pourquoi ce serait périlleux de faire une condition dans une boucle ?
    Je me demandais si en terme de performances il y avait autre chose à faire... Mais c'est pour cela que je poste ici, pour vous le demander.
    Mon idée étant d'utiliser la méthode optimale.

    Tu me recommandes donc de faire ma condition dans la boucle ?

    Citation Envoyé par Songbird_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    figurine AS f, image AS i, serie AS s
    Pourquoi détériorer les noms des tables alors qu'ils étaient parfaitement lisibles ?
    Exact, j'ai changé le nommage entre temps, je peux les retirer maintenant.

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Tu as deux solutions.

    1 - une condition dans la boucle.
    2 - une condition dans la requête SQL. Ca devrait ressembler à : case when curdate() > date_table then ‘Bientôt disponible’ else date_table end as mon_champ.

    La condition étant simple je la mettrais dans le while.

  6. #6
    Membre Expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 494
    Billets dans le blog
    8
    Par défaut
    Je me demandais si en terme de performances il y avait autre chose à faire... Mais c'est pour cela que je poste ici, pour vous le demander.
    Mon idée étant d'utiliser la méthode optimale.
    Boucle ne rime pas forcément avec perte de performance, cela signifie simplement qu'il faut répéter des choses, ni plus ni moins. Si tu ne vois pas du premier coup d'oeil ce qu'il faut fixer pour améliorer les performances (et que tes utilisateurs ne se plaignent pas), ça sera (très généralement) quelque chose de tordu qui te fera gagner 200 ns là où tu n'en as pas forcément besoin, mais cela reste un avis très personnel.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Par défaut
    Ok merci à tous pour vos retours.

    Je mets ce sujet à "résolu"

  8. #8
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 768
    Par défaut
    Si il y a un truc à faire ... mais cela va te demander de dupliquer du code (il n'y a pas de macros) et niveau performance cela doit être négligeable (mais à tester)

    Il faut récupérer ta liste de figurines par date française croissante ("ORDER BY f_release_date_fr ASC")

    Et ensuite, coder en pseudo code :

    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
        $donnees = $reponse->fetch();
     
        while(($donnees !== false) && ($donnees['f_release_date_fr'] < now))  {
    //      ...
            Date de sortie FR : <?php echo $donnees['f_release_date_fr'];?><br />
    //      ...
     
            $donnees = $reponse->fetch();
        }
     
        while(($donnees !== false) && ($donnees['f_release_date_fr'] == now)) {
    //      ...
            Date de sortie FR : aujourd’hui<br />
    //      ...
     
            $donnees = $reponse->fetch()
        }
     
        while($donnees !== false) {
    //      ...
            Date de sortie FR : bientôt disponible<br />
    //      ...
     
            $donnees = $reponse->fetch();
        }

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

Discussions similaires

  1. Un probléme de condition dans une boucle
    Par boubz013 dans le forum Débuter
    Réponses: 6
    Dernier message: 22/02/2010, 15h52
  2. Condition dans une boucle for
    Par nicolasferraris dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/04/2009, 17h28
  3. Réponses: 3
    Dernier message: 12/03/2009, 18h08
  4. Appliquer un next sous conditions dans une boucle for
    Par Kibald dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/01/2009, 08h56
  5. [FLASH MX2004] Deux conditions dans une boucle
    Par pierrot10 dans le forum Flash
    Réponses: 1
    Dernier message: 06/11/2005, 16h31

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