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 des résultats d'une double boucle While


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Boulogne
    Inscrit en
    Mars 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Boulogne
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 22
    Par défaut Pagination des résultats d'une double boucle While
    Bonjour,

    Je souhaite paginer un moteur de recherche d'article avec les mots clés enregistrés dans une base de données. Le code est ci-dessous.
    J'obtiens ma liste dans mon tableau mais je ne vois pas comment sortir des boucles pour mettre une limite d'affichage de 5 articles.
    Si je fais un echo de $req à la ligne 53, j'ai la requete:

    SELECT Id, article, Resume FROM boutique WHERE article LIKE "%vélo%" OR Resume LIKE "%vélo%" SELECT Id, article, Resume FROM boutique WHERE article LIKE "%chaussure de foot%" OR Resume LIKE "%chaussure de foot%" ..........

    Une partie du code ci-dessous

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <?php //requete pour la liste des articles sauvegardée
    $reponse = $session->query("SELECT article FROM list WHERE id_session = '$mon_id' ");
     
    while ($donnees = $reponse->fetch())
    {
     
    	$rec = htmlspecialchars($donnees['article']);
    	//On dertermine les identifiants, les noms et les informations des articles et on recherche 
     
    	$req = 'SELECT Id, article, Resume,  FROM boutique WHERE ';
     
    	if($type==1)
    	{//ayant un des mots dans leurs informations
            $mots = explode(' ',$rec);//On separe lexpression en mots cles
    		$result = 0;
            foreach($mots as $mot)
            {
                    $req .= ' article LIKE "%'.$mot.'%" OR Resume LIKE "%'.$mot.'%"  OR ';
    		//$req .= 'ORDER by article ASC ';
    		$nb = $bdd->prepare('SELECT COUNT(*) FROM boutique WHERE article LIKE :mot OR Resume LIKE :mot ');
    		$nb->execute(array( ':mot' => "%$mot%" ));
     
            }		
            $req .= ' 1=0';
    		$convert = $convert + (int)$nb ->fetchColumn();
    	}
     
    	elseif($type==2)
    	{//ayant tous les mots dans leurs informations
            $mots = explode(' ',$rec);//En separe lexpression en mots cles
            foreach($mots as $mot)
            {
                    $req .= ' article LIKE "%'.$mot.'%" OR Resume LIKE "%'.$mot.'%"  AND ';
    				$nb = $bdd->prepare('SELECT COUNT(*) FROM boutique WHERE article LIKE :mot OR Resume LIKE :mot ');
    				$nb->execute(array( ':mot' => "%$mot%" ));
     
            }
            $req .= ' 1=1';
    		$convert = $convert + (int)$nb ->fetchColumn();	
    	}
    	else
    	{//ayant l'expression exacte dans leurs informations
     
            $req .= ' article LIKE "%'.$rec.'%" OR Resume LIKE "%'.$rec.'%"';
    		$nb = $bdd->prepare('SELECT COUNT(*) FROM boutique WHERE article LIKE :rec OR Resume LIKE :rec ');
    		$nb->execute(array( ':rec' => "%$rec%" ));
     
    	}
    	$convert = $convert + (int)$nb ->fetchColumn();
     
    $requete = $bdd->query($req);		
     
     
    //On affiche les resultats
     
    	while($dnn = $requete->fetch())	
    	{		
    		?>
    		<tr>	 
    		<td style="background-color:#DCDCDC;border:1px #C0C0C0 solid;text-align:left;vertical-align:top;height:12px"><span style="color:#000000;font-family:Arial;font-size:11px;"><div onClick="window.open('../description.php?Id=<?php echo $dnn['Id'] ?>','','width=600,height=200')"><?php if($surligner)//Si il faut surligner les mots, on les surligne
    					{
    						if($type==3)
    						{
    							echo substr((preg_replace('#('.preg_quote($rec).')#i', '<strong>$1</strong>', $dnn['article'])),0,70);//On surligne l'expression exacte
    						}
    						else
    						{
    							echo substr((preg_replace('#('.str_replace(' ','|',preg_quote($rec)).')#i', '<strong>$1</strong>', $dnn['Emission'])),0,70);//On surligne les mots cles de la recherche
    						}
    					}
    					else
    					{
    						echo substr(($dnn['Emission']),0,70);//On ne surligne pas
    					} ?></span>
    </td></tr>
    </table>
     
    <?php
    	}
     
    }
    ?>
    Merci pour votre aide et vos conseils.

    Willm_007

  2. #2
    Membre averti
    Homme Profil pro
    Boulogne
    Inscrit en
    Mars 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Boulogne
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 22
    Par défaut Help !
    Aucune réponse à mon post ?
    Soit le sujet est trop facile, donc ne nécessite pas d'intérêt. Soit il a déjà été traité. Je n'ai rien trouvé sur google qui m'apporte une solution et cela fait un moment que je cherche...

    Merci

    Willm_007

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu n'as pas dû chercher au bon endroit...



    N.B. Il faudrait peut-être aussi revoir la logique des requêtes pour éviter les boucles inutiles (ne faire qu'une seule requête avec JOINTURE, par exemple).

  4. #4
    Membre averti
    Homme Profil pro
    Boulogne
    Inscrit en
    Mars 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Boulogne
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 22
    Par défaut
    Bonjour jreaux62,

    Merci pour ta réponse et le lien dans le message. J'ai parcouru l'explication sur les jointures entre tables. Cela nécessite une relation entre les tables ce qui n'est pas le cas dans mon projet. Lorsque la recherche est lancé sur un objet, la requête doit parcourir tous les mots enregistrer dans une première table. Si elle trouve une valeur correspondant dans une autre base de données elle doit afficher le résultat dans un tableau.
    Une solution serait de récupérer la requête finale pour y insérer la limite mais le remplissage du tableau est dépendant de la boucle, donc comment sortir de la boucle ?
    Si tu as un idée sur les jointures je suis preneur car je n'arrive plus à avancer sur mon projet. php/sql c'est très nouveau.

    Merci

  5. #5
    Membre averti
    Homme Profil pro
    Boulogne
    Inscrit en
    Mars 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Boulogne
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 22
    Par défaut LIMIT sur double boucle
    Hello,

    Je viens de parcourir le cours sur les jointures et je ne vois pas comment il serait possible d'écrire un script SQL qui me permettrait d'obtenir le résultat escompté. Soit le problème est trop simple et dans ce cas je laisse tomber parce que je suis dépassé, soit il est plus complexe qu'il en a l'air. Il faut s'y plonger pour comprendre la difficulté qui s'y cache.
    Merci à ceux qui m'ont laissé quelques conseils.

    Willm007

  6. #6
    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
    Par défaut
    En dehors du sujet des jointures qui est annexe, qu'est ce qui te gene pour mettre en place une pagination telle que décrit dans l'article ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Quitter une double boucle while
    Par sirop-de-menthe dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/05/2011, 23h05
  2. [PHP 5.3] Soucis avec le résultat d'une requête (double boucles while)
    Par beegees dans le forum Langage
    Réponses: 7
    Dernier message: 31/05/2010, 22h26
  3. Réponses: 2
    Dernier message: 02/12/2005, 21h21
  4. Pagination des résultats d'une requête
    Par dl_jarod dans le forum ASP
    Réponses: 2
    Dernier message: 17/10/2005, 14h30
  5. Calcul à partir des résultats d'une requète
    Par Sendo dans le forum Access
    Réponses: 1
    Dernier message: 29/09/2005, 17h46

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