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 :

pagination avec des lettres [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut pagination avec des lettres
    Bonsoir,

    J'aimerais bien crée un système de pagination avec des lettres, lorsque je clique sur une lettre, par exemple A, rien ne s'affiche...

    voici mon 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
     
    $bdd = new PDO ("mysql:host=localhost;dbname=bd", "root", "");
    // on crée un array contenant l'alphabet et un 0-9
    $list = range('A', 'Z');
    array_unshift($list, '0-9');
     
    // Si $_GET['l'] existe et qu'il se trouve dans l'array
    if(isset($_GET['l']) AND in_array($_GET['l'], $list)){
     if($_GET['l'] == '0-9') /* si $_GET['l'] est égale à: 0-9 on fera un REGEX */
      $where = "colonne REGEXP '^[0-9]'";
     else /* sinon on selectionnera les premiere lettres commençant par le $_GET */
      $where = "LEFT(colonne, 1)='".$_GET['l']."'";
    }
    // sinon pas de $_GET ou n'est pas dans l'array
    else
     $where = 1; // on seletionne tout
     
     
    // on fait une boucle pour afficher les liens
    foreach($list as $l){
     if(isset($_GET['l']) AND $_GET['l'] == $l)
      echo '<a href="index.php?page='.$l.'" style="font-weight: bold; color: #FF0000;">'.$l.'</a> ';
     else
      echo '<a href="index.php?page='.$l.'">'.$l.'</a> ';
    }
     
     
     
    $requete = $bdd->query('SELECT nom FROM fournisseur WHERE '.$where.'  ORDER BY nom ASC');
    while($resultat = $requete->fetch())
    {
    	// echo $resultat['nom']. "<br>";
    }
     
     
    ?>
    Je pense que mon problème est au niveau de ma requête, j'ai l'impression qu'il me manque quelques choses...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $requete = $bdd->query('SELECT nom FROM fournisseur WHERE '.$where.'  ORDER BY nom ASC');
    while($resultat = $requete->fetch())
    {
    	echo $resultat['nom']. "<br>";
    }
    Images attachées Images attachées   

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/ Commence par afficher la requête pour voir ce qu'elle contient :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'SELECT nom FROM fournisseur WHERE '.$where.'  ORDER BY nom ASC';

    2/ exécute cette requête directement dans PHPmyAdmin, pour voir si elle fonctionne.

  3. #3
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonjour,

    J'ai pas très bien compris je dois remplacé

    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'SELECT nom FROM fournisseur WHERE '.$where.'  ORDER BY nom ASC';

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il ne s'agit pas de remplacer quoi que ce soit, mais d'AFFICHER les variables/données/requêtes pour les CONTROLER.

    Ca s'appelle du DEBUGAGE.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Effectivement... Ce code me parait assez suspect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($_GET['l'] == '0-9') {
    	/* si $_GET['l'] est égale à: 0-9 on fera un REGEX */
    	$where = "colonne REGEXP '^[0-9]'";
    	else {
    		/* sinon on selectionnera les premiere lettres commençant par le $_GET */
    		$where = "LEFT(colonne, 1)='" . $_GET['l'] . "'";
    	}
    }
    Tu as une colonne qui s'appelle "colonne" dans ta table ? Au passage, tu as déjà entendu parler de l'opérateur LIKE ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonjour,

    Oui j'ai déjà entendu parlé de l'opérateur LIKE mais je pense que mon soucis vient d'abord du code comme tu l'as toi même évoqué le code est assez suspect, déjà à la base ce code ne fonctionnait pas et j'ai essayé de le modifier.

    ps: Je ne trouve aucun tuto sur la pagination alphabétique sur le net je trouve ça dommage.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Tu ne nous montres toujours pas le résultat de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'SELECT nom FROM fournisseur WHERE '.$where.'  ORDER BY nom ASC';
    ...

    J'attire ton attention sur le fait qu'on NE met JAMAIS de $_GET ni $_POST directement dans une REQUETE SQL !
    En PDO, il existe les requêtes préparées : utilise-les.

  8. #8
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonjour jreaux62,

    Merci pour ton aide, j'ai pas mal de bugs sur le code que je vous ai partagé, ce code ne vient pas de moi donc j'ai décidé de tout recommencé à zéro et de taper moi même mon code.
    Pour info je travail avec une table fournisseur et un champ nom

    Voici déjà ce que j'ai réussi à faire: je me connecte sur la base de donnée + j'affiche les noms de mes fournisseur et j'ai ajouté toutes les lettres de l'alphabet dans ma page.
    voici mon 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
    <?php
     
    // Connexion à la BD // 
    $bdd = new PDO ("mysql:host=localhost;dbname=bd", "root", "");
     
    // lettre alphabet // 
    $alphabet = range ( 'A', 'Z' );
    echo '<p>[ ';
    foreach ( $alphabet as $lettre )
        echo '<a href="rif.php?letter=' . $lettre . '&amp;limit=4400">' . $lettre . '</a> ';
    echo ']</p>'."\r\n";
     
     
    // Requete pour Afficher tout les enregistrements de ma table //
    $requete = $bdd->query('SELECT * FROM fournisseur');
    while($resultat = $requete->fetch())
    {
    	echo $resultat['nom']. "<br>";
    }
     
     
    ?>
    Maintenant il faudrait que je test l'autre requête celle que tu parlais tout à l'heure avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'SELECT nom FROM fournisseur WHERE '.$where.'  ORDER BY nom ASC';
    Donc je dois faire comment ? Comme ceci ? Parce que ça marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $requete = $bdd->query('SELECT nom FROM fournisseur WHERE '.$lettre.' ORDER BY nom ASC');
    while($resultat = $requete->fetch())
    {
    	echo $resultat['nom']. "<br>";
    }
    Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\pagination lettre\rif.php on line 16
    Images attachées Images attachées  

  9. #9
    Membre actif
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2009
    Messages
    458
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2009
    Messages : 458
    Points : 237
    Points
    237
    Par défaut
    Bonsoir,

    J'y suis arrivé !!!

    @Celira: j'ai changé le champ colonne par mon champ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $where = "colonne REGEXP '^[0-9]'";
     else /* sinon on selectionnera les premiere lettres commençant par le $_GET */
      $where = "LEFT(colonne, 1)='".$_GET['l']."'";

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $where = "colonne REGEXP '^[0-9]'";
     else /* sinon on selectionnera les premiere lettres commençant par le $_GET */
      $where = "LEFT(nom, 1)='".$_GET['l']."'";
    @jreaux62
    Puis j'ai tapé la requête et ça a fonctionné !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = $bdd->query('SELECT nom FROM fournisseur WHERE '.$where.' ORDER BY nom ASC');
    Merci pour votre aide.
    Images attachées Images attachées   

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/09/2008, 22h03
  2. probleme avec des lettres dans des conditions
    Par nefas dans le forum C++
    Réponses: 7
    Dernier message: 01/08/2008, 14h25
  3. pagination avec des requêtes sql sous access
    Par zalalus dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/11/2007, 23h14
  4. Paginate avec des conditions sur les clés etrangères.
    Par CeDRiC08 dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 03/07/2007, 09h49
  5. compter avec des lettres
    Par Décibel dans le forum Access
    Réponses: 2
    Dernier message: 19/04/2006, 08h33

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