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 :

Afficher le contenu "d'un produit" BDD, PHP [MySQL]


Sujet :

PHP & Base de données

  1. #41
    Invité
    Invité(e)
    Par défaut
    Ouais pas mal mais quelques précisions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo stripslashes($_GET['id']); ?>
    Pourquoi un stripslahes ? Ca permet d'enlever les \. Utilise htmlspecialchars() pour protéger ton id à l'affichage sinon faille XSS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<span class="classtext1v">'.stripslashes($data['categorie']).'</span>';
    Pareil, pourquoi utiliser stripslahes ? Tes données en BDD contiennent des '\' ? Si oui c'est pas normal. Pas de risques avec un prepare() t'es pas obligé de de faire un addslashes avant.

    PS: utilise les requêtes préparés partout !

  2. #42
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Bonsoir xxxxxx,

    Effectivement merci pour ce rapel concernant les htmlspecialchars(), dailleurs, est t'il utile pour mon image d'utiliser un htmlspecialchars() comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="images/<?php echo htmlspecialchars($data['image']); ?>" class="imageselect"/>
    Pour les requêtes préparé j'essaye de trouver une solution pour effectuer la même action que query.

    Merci pour ton aide.
    Sincèrement.

  3. #43
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par reverb94 Voir le message
    Bonsoir xxxxxx,
    est t'il utile pour mon image d'utiliser un htmlspecialchars() comme ceci :

    Pour les requêtes préparé j'essaye de trouver une solution pour effectuer la même action que query.
    Ca dépend si $data['image'] est safe, si c'est toi qui l'a créé aucun problème.

    Citation Envoyé par reverb94 Voir le message
    Pour les requêtes préparé j'essaye de trouver une solution pour effectuer la même action que query.
    C'est exactement pareil sauf que tu remplaces ->query() par ->prepare().
    Ton problème est résolu ?

  4. #44
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Bonjour xxxxxx ,

    Citation Envoyé par xxxxxx
    Ca dépend si $data['image'] est safe, si c'est toi qui l'a créé aucun problème.
    Merci .

    Concernant la requête préparée,
    Lorsque je remplace 'query' par 'prepare', plus rien ne s'affiche ( aucunes des images, nom de categorie ou titre 'sps' ne s'affiche ).

  5. #45
    Invité
    Invité(e)
    Par défaut
    Montre ton code (avant et après)

  6. #46
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Autant pour moi, ça fonctionne je n'avais pas mis la valeur 'execute' après ma requête. Je pense que le code est bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    require_once("connexiondessins.inc.php");
    $reponse = $bdd->prepare('SELECT id,categorie,titre,image,description FROM dessins WHERE categorie="sps" ORDER BY id DESC');
    $reponse->execute();

  7. #47
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Re xxxxxx,

    J'ai été visiter le site que tu à conçu par curiosité ('insomnialille', très bon design ^^ j'aime beaucoup ).

    Serait-il possible de profiter de tes connaissances pour m'aider à créer un système de pagination ( toujours avec un fonctionnement PDO ) comme sur cette page : http://www.insomnialille.com/soirees/page/3 ou faut-il avoir un minimum de connaisance Java :/.

    Merci encore pour ton aide précieuse ^^.
    Sincèrement.

  8. #48
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par reverb94 Voir le message
    Re xxxxxx,

    J'ai été visiter le site que tu à conçu par curiosité ('insomnialille', très bon design ^^ j'aime beaucoup ).

    Serait-il possible de profiter de tes connaissances pour m'aider à créer un système de pagination ( toujours avec un fonctionnement PDO ) comme sur cette page : http://www.insomnialille.com/soirees/page/3 ou faut-il avoir un minimum de connaisance Java :/.

    Merci encore pour ton aide précieuse ^^.
    Sincèrement.
    Ahah pas de Java ici

    Pour la pagination c'est apparemment énervant pour les développeurs mais ce n'est pas très compliqué finalement. Il suffit juste de connaître l'algorithme et d'utiliser la fonction LIMIT de SQL.

    En effet si tu est à la page 3 il te faut afficher 5 résultats (si tu mets 5 résultats par page) à partir des 10 premiers résultats. Soit les objets n°10 à 15.
    L'opérateur LIMIT prend deux paramètres l'offset (le départ) et le nombre d'éléments à affiche.
    Voici le code SQL pour la page 3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table LIMIT 10, 5
    Si tu veux automatiser ça voilà ce qu'il faut faire :

    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
     
    <?php
    // On récupère le numéro de la page demandée (si il n'y en a pas on la met à 1)
     
    $page = empty(intval(@$_GET['page'])) ? 1 : intval($_GET['page']); // @ pour éviter de tembêter avec les issets
    // Traduction : si la page est vide alors je la met à 1 sinon je la met à GET...
     
    // Attention intval() ne protège pas des injections SQL !
     
    // On détermine l'off set en fonction de la page
    // C'est la qu'intervient "l'algorithme"
    $offset = $page * 5 - 5;
     
    //Ensuite il te faut simplement faire la requête :
    $req->prepare('SELECT * FROM table LIMIT :offset, 5);
    $req->bindParam(':offset', $offset);
    Après il y'a d'autres trucs à faire par exemple si tu veux que l'utilisateur ne puisse pas taper un numéro de page qui n'existe pas.
    Pour cela il te faudra calculer le nombre de pages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $count = // tu fais un count total de ta table en sql (attention ca va te sortir un tableau dans ton fetch donc pour afficher le count il faut faire un $count[0])
     
    // Ensuite tu arrondi au supérieur la division
    $nbpages = ceil($count / 5);

  9. #49
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Re xxxxxx , Merci pour ton aide ,

    Après avoir essayé le code je n'ai pas tout de suite compris (la pagination ne s'affiche pas), j'ai donc été me renseigner un peu plus sur les tutoriaux, et j'ai essayé d'adapter un code constitué en '_mysql' en PDO grâce au code que tu ma fourni.

    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
    38
    39
    40
    41
     
    <?php
    require_once("connexiondessins.inc.php");
     
    $imageparpage=12;
    $retour = $bdd->prepare('SELECT COUNT(*) AS nb_images FROM dessins');
    $retour->execute();
    while ($dessins = $retour->fetch(PDO::FETCH_ASSOC));
    $totaldesimages = $dessins['nb_images'];
     
    $nombredepage  = ceil($totaldesimages/$imageparpage);
    echo 'Page : ';
    for ($i = 1 ; $i <= $nombredepage ; $i++)
    {
        echo '<a href="sps.php?page=' . $i . '">' . $i . '</a> ';
    }
     
    if (isset($_GET['page']))
    {
            $page = intval($_GET['page']);
    }
    else
    {
            $page = 1;
    }
     
    $premiereimageafficher = ($page - 1) * $imageparpage;
     
    $reponse = $bdd->prepare('SELECT id,categorie,titre,image,description FROM dessins WHERE categorie="sps" ORDER BY id DESC LIMIT '.$premiereimageafficher.','.$imageparpage.'');
     
    $reponse->execute();
    ?>
    <?php while ($dessins = $reponse->fetch()) { ?>
    <div class="cat1">
      <?php echo '<span class="classtext1v">'.htmlspecialchars($dessins['categorie']).'</span>'; ?>
      <br />
      <?php echo '<span class="classtext2v">'.htmlspecialchars($dessins['titre']).'</span>'; ?>
      <br />
      <a href="selectionsps.php?id=<?php echo htmlspecialchars($dessins['id']); ?>"><img src="images/<?php echo htmlspecialchars($dessins['image']);?>" width="200" height="250" /></a>
    </div>
    <? } $reponse->closeCursor(); ?>
    Je pense m'être un peu égaré :/

  10. #50
    Invité
    Invité(e)
    Par défaut
    Si c'est pas mal, ça marche pas ?
    Je te conseille de suivre ces modifications :
    Et pour LIMIT cest bien l'offset d'abord et le nombre à afficher après.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     
    <?php
    require_once("connexiondessins.inc.php");
     
    $imageparpage=12;
    $retour = $bdd->prepare('SELECT COUNT(*) AS nb_images FROM dessins');
    $retour->execute();
    // inutile de faire une boucle vu que tu attends une seule valeurwhile ($dessins = $retour->fetch(PDO::FETCH_ASSOC));
    $dessins = $retour->fetch(PDO::FETCH_ASSOC);
    $totaldesimages = $dessins['nb_images'];
     
    $nombredepage  = ceil($totaldesimages/$imageparpage);
    echo 'Page : ';
    for ($i = 1 ; $i <= $nombredepage ; $i++)
    {
        // Ca cest pas mal taffiche toutes les pages
        // Attention par contre faut pas en avoir 15000
        echo '<a href="sps.php?page=' . $i . '">' . $i . '</a> ';
    }
     
    // ca ne suffit pas il faut que tu vérifie aussi que ce n'est pas vide
    // Note : le isset est utile ici pour ne pas avoir d'erreur Undefined index
    // Et comme il s'agit d'un ET fainéant (&&) alors il vérifiera la deuxième condition seulement si la première est validé donc quand il fera le empty() le isset aura été validé (jespere que tu ma compris ^^)
    if (isset($_GET['page']) && !empty($_GET['page']))
    // encore mieux a la place de empty : is_numeric()
    {
            $page = intval($_GET['page']);
    }
    else
    {
            $page = 1;
    }
     
    // Ici ce n'était pas ($page - 1) * $imageparpage;
    $premiereimageafficher = $page* $imageparpage - $imageparpage;
     
    // Attention : les requêtes préparés comme son nom l'indique sont préparées
    // Tu ne dois passer de variable à l'intérieur surtout si l'action doit se répéter et que le contenu change : le but c'est que la requete se mette en cache et si tu change à chaque fois son contenu c'est pas top
    // Et niveau sécurité c'est beaucoup mieux
    $reponse = $bdd->prepare('SELECT id,categorie,titre,image,description FROM dessins WHERE categorie= :categorie ORDER BY id DESC LIMIT :offset, :nbimages');
    $reponse->bindValue(':category', 'sps'); //bindValue si tu veux passer un String, bindParam pour une variable
    $reponse->bindParam(':nbimages', $imageparpage);
    $reponse->bindParam(':offset', $premiereimageafficher);
     
    $reponse->execute();
    ?>
    <?php while ($dessins = $reponse->fetch()) { ?>
    <div class="cat1">
      <?php echo '<span class="classtext1v">'.htmlspecialchars($dessins['categorie']).'</span>'; ?>
      <br />
      <?php echo '<span class="classtext2v">'.htmlspecialchars($dessins['titre']).'</span>'; ?>
      <br />
      <a href="selectionsps.php?id=<?php echo htmlspecialchars($dessins['id']); ?>"><img src="images/<?php echo htmlspecialchars($dessins['image']);?>" width="200" height="250" /></a>
    </div>
    <? } $reponse->closeCursor(); ?>

  11. #51
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Bonjour xxxxxx, désolé d'avoir tardé à répondre ^^

    et aucune erreur ne s'affiche(pour changer xD).
    Non, çà ne fonctionne toujours pas :/ et aucune erreur ne s'affiche (pour changer xD).. En revanche merci pour les explications j'en comprend déjà un peu mieux le fonctionnement ( par contre je ne comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Ici ce n'était pas ($page - 1) * $imageparpage;
    $premiereimageafficher = $page* $imageparpage - $imageparpage;
    à quoi sert '*' devant $page*)

    Merci pour ton aide encore une fois ^^.
    Sincèrement.

  12. #52
    Invité
    Invité(e)
    Par défaut
    C'est pour multiplier...

    C'est à dire $premiereimageafficher = $page (ex: 2) * (multiplié par) 5 (nb images par page) - 5 (nb images par page) = 2 * 5 - 5 = 5
    C'est bien ça, à la page 2 j'affiche les images à partir de la 5ème
    Dernière modification par Bovino ; 03/05/2013 à 15h05. Motif: Inutile de citer un message pour y répondre !

  13. #53
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Bonjour xxxxxx,
    Pour afficher les erreurs succeptible, j'essaye d'utiliser le try {} catch {}
    comme ceci :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <?php
    require_once("connexiondessins.inc.php");
      try
    {
    $imageparpage=12;
    $retour = $bdd->prepare('SELECT COUNT(*) AS nb_images FROM dessins');
    $retour->execute();
    $dessins = $retour->fetch(PDO::FETCH_ASSOC);
    $totaldesimages = $dessins['nb_images'];
     
    $nombredepage  = ceil($totaldesimages/$imageparpage);
    echo 'Page : ';
    for ($i = 1 ; $i <= $nombredepage ; $i++)
    {
        echo '<a href="sps.php?page=' . $i . '">' . $i . '</a> ';
    }
    if (isset($_GET['page']) && !is_numeric($_GET['page']))
    {
            $page = intval($_GET['page']);
    }
    else
    {
            $page = 1;
    }
    $premiereimageafficher = $page* $imageparpage - $imageparpage;
     
    $reponse = $bdd->prepare('SELECT id,categorie,titre,image,description FROM dessins WHERE categorie= :category ORDER BY id DESC LIMIT :offset, :nbimages');
    $reponse->bindValue(':category', 'sps');
    $reponse->bindParam(':nbimages', $imageparpage);
    $reponse->bindParam(':offset', $premiereimageafficher);
     
    $reponse->execute();
    ?>
    <?php while ($dessins = $reponse->fetch()) { ?>
    <div class="cat1">
      <?php echo '<span class="classtext1v">'.htmlspecialchars($dessins['categorie']).'</span>'; ?>
      <br />
      <?php echo '<span class="classtext2v">'.htmlspecialchars($dessins['titre']).'</span>'; ?>
      <br />
      <a href="selectionsps.php?id=<?php echo htmlspecialchars($dessins['id']); ?>"><img src="images/<?php echo htmlspecialchars($dessins['image']);?>" width="200" height="250" /></a>
    </div>
     
    <?php } $reponse->closeCursor(); 
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
    ?>
    Mais sa ne m'affiche aucune erreur. ( contrairement au rendus qui montre qu'il y en a une )

    merci pour ton aide.
    Sincèrement.

  14. #54
    Invité
    Invité(e)
    Par défaut
    J'ai corrigé une erreur sinon le reste il faut que tu apprennes à résoudre le problème tout seul. Debug le ligne par ligne, mets des echos par ci par là pour savoir si il passe dans telle ou telle boucle.
    Dernière modification par Bovino ; 03/05/2013 à 15h06. Motif: Inutile de citer un message pour y répondre !

  15. #55
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Points : 87
    Points
    87
    Par défaut
    Ok ^^, en tout cas un Grand merci pour toutes l'aides que tu ma donné, ça m'aura permis de bien avancer .
    Merci xxxxxx.
    Sincèrement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [MySQL] Afficher le contenu d'une page HTML via du PHP
    Par loic20h28 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/01/2012, 13h34
  2. Script shell : afficher le contenu des variables entre simple quote
    Par mualki dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 23/01/2010, 00h14
  3. afficher le contenu d'une table de ma BDD sous forme d'un arbre?
    Par samdou dans le forum Général JavaScript
    Réponses: 23
    Dernier message: 26/06/2009, 14h01
  4. Réponses: 0
    Dernier message: 23/06/2009, 11h10
  5. afficher le contenu d'une table de ma BDD dans un tableau
    Par nono2009 dans le forum Struts 2
    Réponses: 1
    Dernier message: 22/06/2009, 20h14

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