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 :

Correction de code pour les puristes


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut Correction de code pour les puristes
    Bonsoir à tous,

    Pour une fois, j'ai un code qui marche parfaitement bien
    Mais comme je reçois parfois sur ce forum des remarques sur la propreté de mon code, j'aimerais soumettre aux puristes quelques lignes, histoire d'obtenir quelque chose de vraiment nickel, c'est à dire efficace et rapide.

    Voici un exemple de code qui affiche des questions/réponses dans une certaine catégorie :
    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
    <?php
    	if ($id!='')
    	{
    	$req = mysql_query("SELECT * FROM table_questions WHERE id=$id"); 
    	$data = mysql_fetch_assoc($req);
    	$idcategorie = $data["idcategorie"];
    	$question = $data["question"]; 
    	$reponse = $data["reponse"];
    	$reponse = nl2br($reponse);
    	$req = mysql_query("SELECT * FROM table_categories WHERE id=$idcategorie"); 
    	$data = mysql_fetch_assoc($req);
    	$categorie = $data["categorie"];
    	echo "$categorie<br>$question<br>$reponse";
    	echo "Dernières questions dans cette catégorie";
    	$req = mysql_query("SELECT * FROM table_questions WHERE idcategorie=$idcategorie AND id!=$id ORDER BY id DESC LIMIT 0,10"); 
    	while($data = mysql_fetch_assoc($req))
    	{ 
    	$id = $data["id"]; 
    	$question = $data["question"]; 
    	echo "<a href='mapage.php' title='$question'>$question</a>";
    	}
    }
    ?>
    Merci d'avance pour vos remarques.
    Le mieux n'est pas forcément l'ennemi du bien.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Sur la forme du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $data["reponse"];
    Y a t'il un interêt a avoir deux variables contenant la même chose ?

    Sur la rigueur : SELECT * est à eviter ; selectionne explicitement les colonnes dont tu as besoin

    Sur le fonctionnement : tu pourrais avoir une requête de moins en recuperant en meme temps les infos de la question et de la catégorie
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT question, réponse, idcategorie, categorie 
    FROM table_questions 
    JOIN table_categories ON table_questions.idcategorie = table_categories.id
    WHERE id=$id
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Y a t'il un interêt a avoir deux variables contenant la même chose ?
    Dis comme ça, non, c'est vrai que j'ai tendance à sortir une variable "simple" ($variable) pour la réutiliser si besoin dans la page.

    SELECT * est à eviter ; selectionne explicitement les colonnes dont tu as besoin
    Oui, c'est vrai. Cela étant, dans cet exemple, j'ai besoin de toutes les colonnes. Penses-tu qu'il vaut mieux tout de même les nommer ?

    Sur le fonctionnement : tu pourrais avoir une requête de moins en recuperant en meme temps les infos de la question et de la catégorie
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT question, réponse, idcategorie, categorie 
    FROM table_questions 
    JOIN table_categories ON table_questions.idcategorie = table_categories.id
    WHERE id=$id
    Effectivement, ça m'intéresse assez. En revanche, ici, le code ne ressort aucun résultat. Peut-être est-ce dû aux 2 tables qui ont une colonne identifiant qui porte le même nom (id) ?
    Le mieux n'est pas forcément l'ennemi du bien.

  4. #4
    Membre habitué Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Points : 150
    Points
    150
    Par défaut
    Salut,
    Ah mon avis si tu ne filtre pas $id, tu vas avoir assez rapidement des pb d'injection SQL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = mysql_query("SELECT * FROM table_questions WHERE id=$id");
    Vérifie que c'est un numérique si c' en est un, tu peux aussi utiliser la fonction :
    mysql_real_escape_string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $_GET = array_map('mysql_real_escape_string', $_GET);
    $_POST = array_map('mysql_real_escape_string', $_POST);

  5. #5
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Salut Shinji,
    Heu, injection sql, je vois bien, par contre filtrer $id, c'est flou.
    J'imagine que la fonction que tu proposes sert à ça.
    Peux-tu m'en dire plus ?
    ps: $id est numérique
    Le mieux n'est pas forcément l'ennemi du bien.

  6. #6
    Membre habitué Avatar de Shinji62
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 135
    Points : 150
    Points
    150
    Par défaut
    C'est simple, si tu ne filtres pas $id on peut mettre sur que l'on veut dedans :

    du genre,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     'OR 1 = 1 select * from ....'
    S'il est numérique tu peux très bien rajouter :

  7. #7
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Merci shinji pour l'astuce
    Le mieux n'est pas forcément l'ennemi du bien.

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/03/2011, 15h37
  2. Circuits electriques code pour les fils
    Par djoudi1966 dans le forum Flash
    Réponses: 0
    Dernier message: 12/06/2010, 01h57
  3. [Outil] Zenerator, générateur de code pour les applications ZF
    Par Janitrix dans le forum Zend Framework
    Réponses: 31
    Dernier message: 05/11/2009, 21h30
  4. Réponses: 3
    Dernier message: 17/03/2009, 13h51
  5. je cherche un code pour les derniére nouvelles
    Par alg7911 dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 06/10/2007, 01h19

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