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 :

Récupération de données par tri


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
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 23
    Par défaut Récupération de données par tri
    Salut,
    J'ai un soucis avec ma requête de récupération. En effet, j'ai déjà élaboré une requête me permettant de récupérer tous les messages envoyés par mes clients dans ma bd et cela marche bien. Je veux maintenant faire des sélections spécifiques, c'est à dire:
    1- Récupérer tous les messages reçus à une date donnée.
    2 - Récupérer tous les messages envoyés par un client donné à une date donnée. Et cela en faisant une pagination.
    Ci-dessous le code que j'ai élaboré pour la requête n°1, c'est à dire récupérer tous les messages reçus à une date donnée.

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    <div class="container"> 
                                        <div class="row">
    										<section class="col-lg-12 col-md-12 col-sm-12 col-xm-12"> <!--  align="center" class="article_special" -->
    											<center><h1><b>LES DEVIS DEMANDES A UNE DATE DONNEE</b></h1></center>
    											<table border="1px"; width="1170px"; height="200px"; border="1" color="#999"; font-size="1em"; align="center">
    												<tr> 
    													<td color="blue"><strong>Numero</strong></td>
    													<td><strong>Nom visiteur</strong></td>
    													<td><strong>Objet</strong></td>
    													<td><strong>Contacts</strong></td>
    													<td><strong>Email</strong></td>
    													<td><strong>Messages</strong></td>
    													<td><strong>Date d'envoi</strong></td>
    												</tr>
     
    												<?php
    												$messageParPage=2; //Nous allons afficher 5 messages par page.
     
    												//Une connexion SQL doit être ouverte avant cette ligne...
    												$retour_total=$bdd->query('SELECT COUNT(*) AS total FROM messages'); //Nous récupérons le contenu de la requête dans $retour_total
    												$donnees_total=$retour_total->fetch(PDO::FETCH_ASSOC);
     
    												$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    												//Nous allons maintenant compter le nombre de pages.
    												$nombreDePages=ceil($total/$messageParPage);
     
    												if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
    												{
    													$pageActuelle=intval($_GET['page']);
     
    													if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
    													{
    														$pageActuelle=$nombreDePages;
    													}
    												}
    												else 
    												{
    													$pageActuelle=1; // La page actuelle est la n°1    
    												}
     
    												$premiereEntree=($pageActuelle-1)*$messageParPage; // On calcul la première entrée à lire
     
    												// La requête sql pour récupérer les messages de la page actuelle.
    												$req_retour_engins=$bdd->query('SELECT * FROM messages ORDER BY id_messages DESC LIMIT '.$premiereEntree.', '.$messageParPage.'');
     
                                                    if (!empty($_GET['date_envoi']))
    												{
    													$date_envoi = $_GET["date_envoi"];
     
    													$req = $bdd->prepare("SELECT id_messages, nom_visiteur, objet, contact, email, message, date_envoi FROM messages WHERE date_envoi LIKE ?");
    													$req->execute(array("%".$date_envoi."%"));
     
    													if($donnees = $req_retour_engins->fetch(PDO::FETCH_ASSOC))
    													    {
    														    do
    															{ 
    																			?>
    																				<tr>
    																						<td> 
    																							<?php echo $donnees['id_messages']; ?>
    																						</td>
    																						<td> 
    																							<?php echo $donnees['nom_visiteur']; ?>
    																						</td>
    																						<td> 
    																							<?php echo $donnees['objet']; ?>
    																						</td>
    																						<td>
    																							<?php echo $donnees['contact']; ?>
    																						</td> 
     
    																						<td> 
    																							<?php echo $donnees['email']; ?>
    																						</td>
    																						<td>
    																							<?php echo $donnees['message']; ?>
    																						</td> 	
                                                                                            <td>
    																						    <?php echo date('d-m-Y', strtotime($donnees['date_envoi']) ); ?>
    																							<?php //echo DATE_FORMAT(date_envoi, '%d-%m-%Y'); ?>
    																						</td>																						
    																		<?php
    															}
    															while($donnees = $req->fetch());
    														}
    																else
    																{
    																	echo '<h3>Pas de résultat trouvé! <br><a href="administration.php"> RETOUR</a></h3>';
    																}
    																$req->closeCursor();
    												} else
    													{ 
    														echo "<h3>Saisir d'abord la date avant de la rechercher <a href='administration.php'>RETOUR</a></h3>";
     
    													}
    												?>
    													</tr>  
    											</table>
     
    												<?php
    													echo '<center><p align="center"><b><b><br>Page :</b></b> '; //Pour l'affichage, on centre la liste des pages
    													for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    													{
    														 //On va faire notre condition
    														 if($i==$pageActuelle) //Si il s'agit de la page actuelle...
    														 {
    															 echo '<b><b> [ '.$i.' ] </b></b>'; 
    														 }	
    														 else
    														 {
    															  echo ' <a href="liste-des-devis-demandes.php?page='.$i.'">'.$i.'</a> ';
    														 }
    													}
    													echo '</p></center>';
    													$req_retour_engins->closeCursor();
    												?>	
                                                <a href="panneau.php"><h2>Retourner à l'administration</h2></a>												
    										</section>
    								    </div>
                                    </div>
    Merci de votre aide.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 264
    Par défaut
    Il te faut utiliser le mot clé SQL WHERE

    tu auras une requête ressemblant à :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ta_table WHERE ton_champ_date =2019-09-21;

    pour la date d'aujourdui
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

    Je suppose que tu as trouver et copié-collé un script de pagination PHP.

    Tu ne dois pas faire de requête supplémentaire, mais mettre les critères de sélection (WHERE... AND...) DANS ces requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $clauseWhere = " WHERE... AND... "; // critères de sélection
    ...
    $retour_total=$bdd->query('SELECT COUNT(*) AS total FROM messages ' . $clauseWhere);
    ...
    $req_retour_engins=$bdd->query('SELECT * FROM messages ' . $clauseWhere . ' ORDER BY id_messages DESC LIMIT '.$premiereEntree.', '.$messageParPage.'');
    Et, évidemment, on met le script de pagination APRÈS la récupération des données ($_GET["date_envoi"]), pas le contraire...
    Dernière modification par Invité ; 21/09/2019 à 10h09.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 23
    Par défaut
    Bonjour jreaux62,
    Vous avez parfaitement raison, c'est un code de pagination que j'ai cherché et trouvé dans un tuto. Je l'ai amélioré et adapté à mon besoin. A vrai dire, le code marche super bien lorsque j'utilise la boucle while juste pour afficher tous les résultats de mes requêtes.
    Cependant, ici je veux faire un contrôle sur les résultats de requête en affichant seulement les messages reçus à une date donnée. Pour cela, j'ai élaboré la requête suivante qui marchait bien sans la pagination:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (!empty($_GET['date_envoi']))
    	    {
    	       $date_envoi = $_GET["date_envoi"];												
                   $req = $bdd->prepare("SELECT id_messages, nom_visiteur, objet, contact, email, message, date_envoi FROM messages WHERE  date_envoi LIKE ?");
    	       $req->execute(array("%".$date_envoi."%"));
                   ...
               }
    En effet cette page doit traiter un petit formulaire d'une de mes pages d'administration dans laquelle je tape seulement la date pour avoir le résultat escompté.
    Voici le code de la page qui comporte le formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <form method="GET" action="liste-des-devis-demandes-a-une-date-donnee.php">
    * - La liste des devis demandés le: <input type="search" name="date_envoi" placeholder="saisir la date"/>
         <input type="submit" name="rechercher" value="Rechercher"/> <br><br><br><br>
    </form>
    Ensuite, voici ci-dessous le code corrigé avec votre méthode:
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    <?php
    	$messageParPage=2; //Nous allons afficher 5 messages par page.
    	$clauseWhere = "WHERE date_envoi LIKE ?"; // critères de sélection
    	$retour_total=$bdd->query('SELECT COUNT(*) AS total FROM messages ' . $clauseWhere);
    	$donnees_total=$retour_total->fetch(PDO::FETCH_ASSOC);
     
    	$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
            //Nous allons maintenant compter le nombre de pages.
    	$nombreDePages=ceil($total/$messageParPage);
     
    		if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
    		   {
    			$pageActuelle=intval($_GET['page']);
    			if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
    			    {
    			        $pageActuelle=$nombreDePages;
    			    }
    		   }
    			else 
    			   {
    				$pageActuelle=1; // La page actuelle est la n°1    
    			  }
    				$premiereEntree=($pageActuelle-1)*$messageParPage; // On calcul la première entrée à lire
    				$req_retour_engins=$bdd->query('SELECT * FROM messages ' . $clauseWhere . ' ORDER BY id_messages DESC LIMIT '.$premiereEntree.', '.$messageParPage.'');
    					if (!empty($_GET['date_envoi']))
    					    {
    						$date_envoi = $_GET["date_envoi"];
    						$req = $bdd->prepare('SELECT * FROM messages ' . $clauseWhere . ' ORDER BY id_messages DESC LIMIT '.$premiereEntree.', '.$messageParPage.'');
    						$req->execute(array("%".$date_envoi."%"));
    							if($donnees = $req_retour_engins->fetch(PDO::FETCH_ASSOC))
    							    {
    								do
    								   { 
    									?>
    										<tr>
    											<td> 
    												<?php echo $donnees['id_messages']; ?>
    											</td>
    											<td> 
    												<?php echo $donnees['nom_visiteur']; ?>
    											</td>
    											<td> 
    												<?php echo $donnees['objet']; ?>
    											</td>
    											<td>
    												<?php echo $donnees['contact']; ?>
    											</td> 
    											<td> 
    												<?php echo $donnees['email']; ?>
    											</td>
    											<td>
    											       <?php echo $donnees['message']; ?>
    											</td> 	
    											<td>
    											     <?php echo date('d-m-Y', strtotime($donnees['date_envoi']) ); ?>
    											</td>																						
    											       <?php
    													}
    													while($donnees = $req->fetch());
    												        }
    														else
    														{
    															echo '<h3>Pas de résultat trouvé! <br><a href="administration.php"> RETOUR</a></h3>';
    														}
    														$req->closeCursor();
    										} else
    											{ 
    												echo "<h3>Saisir d'abord la date avant de la rechercher <a href='administration.php'>RETOUR</a></h3>";
     
    											}
    										?>
    											</tr>  
    									</table>
     
    										<?php
    											echo '<center><p align="center"><b><b><br>Page :</b></b> '; //Pour l'affichage, on centre la liste des pages
    											for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    											{
    												 //On va faire notre condition
    												 if($i==$pageActuelle) //Si il s'agit de la page actuelle...
    												 {
    													 echo '<b><b> [ '.$i.' ] </b></b>'; 
    												 }	
    												 else
    												 {
    													  echo ' <a href="liste-des-devis-demandes.php?page='.$i.'">'.$i.'</a> ';
    												 }
    											}
    											echo '</p></center>';
    											$req_retour_engins->closeCursor();
    										?>
    Mais la page m'affiche les erreurs suivantes:
    ( ! )Fatal error: in C:\wamp\www\monsite\admin\liste-des-devis-demandes-a-une-date-donnee.php on line 39
    ( ! ) PDOException: in C:\wamp\www\monsite\admin\liste-des-devis-demandes-a-une-date-donnee.php on line 39

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 23
    Par défaut
    Quelqu'un peut m'aider svp?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Voir : PRINCIPE de RECHERCHE MULTI-CRITERES (PHP-SQL-PDO)

    Code php : 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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    <?php
    // -------------
    // Construction de la clause WHERE...AND
    // Initialisation des array nécessaires
    $sql_where = [];	// contiendra les bouts de code SQL, à partir des critères de recherche
    $sql_param = [];	// array des paramètres à transmettre à execute(...)
    // -------------
    // Récupération : critères
    if ( !empty($_GET['date_envoi']) )
    {
    	$date_envoi = urldecode($_GET['date_envoi']);
    	$sql_where[] = " date_envoi LIKE :date_envoi ";
    	$sql_param[':date_envoi'] = "%".$date_envoi."%";
    }
    // -------------
    if (!empty($date_envoi))
    {
    	// -------------
    	// On construit la chaine :  "WHERE .... AND .... "
    	$clause_WHERE = ( !empty($sql_where) )? " WHERE " . implode(" AND ", $sql_where) : "";
    	// -------------
    	// Requete : total
    	$retour_total = $bdd->query('SELECT COUNT(*) AS total FROM messages ' . $clauseWhere);
    	$donnees_total = $retour_total->fetch(PDO::FETCH_ASSOC);
    	$total = $donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
    	// -------------
    	// Nombre de pages
    	$nombreDePages = ceil($total/$messageParPage);
    	// -------------
    	// Pagination
    	$messageParPage = 2; //Nombre de messages par page
    	if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
    	{
    		$pageActuelle = intval($_GET['page']);
    		if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
    		{
    			$pageActuelle = $nombreDePages;
    		}
    	} else {
    		$pageActuelle = 1; // La page actuelle est la n°1
    	}
    	$premiereEntree = ($pageActuelle-1)*$messageParPage; // On calcule la première entrée à lire
    	// -------------
    	// Requete
    	$req = $bdd->prepare('SELECT id_messages, nom_visiteur, objet, contact, email, message, date_envoi FROM messages ' . $clauseWhere . ' ORDER BY id_messages DESC LIMIT '.$premiereEntree.', '.$messageParPage.'');
    	$req_retour_engins = $req->execute($sql_param);
    	// -------------
    	if($donnees = $req_retour_engins->fetch(PDO::FETCH_ASSOC))
    	{
    ?>
    	<table>
    		<tbody>
    <?php
    		do
    		{
    ?>
    		<tr>
    			<td><?php echo $donnees['id_messages']; ?></td>
    			<td><?php echo $donnees['nom_visiteur']; ?></td>
    			<td><?php echo $donnees['objet']; ?></td>
    			<td><?php echo $donnees['contact']; ?></td>
    			<td><?php echo $donnees['email']; ?></td>
    			<td><?php echo $donnees['message']; ?></td>
    			<td><?php echo date('d-m-Y', strtotime($donnees['date_envoi']) ); ?></td>
    		</tr>
    <?php
    		} while( $donnees = $req_retour_engins->fetch(PDO::FETCH_ASSOC) );
    ?>
    		</tbody>
    	</table>
    <?php
    	} else {
    		echo '<h3>Pas de résultat trouvé! <br><a href="administration.php"> RETOUR</a></h3>';
    	}
    } else {
    	echo "<h3>Saisir d'abord la date avant de la rechercher <a href='administration.php'>RETOUR</a></h3>";
    }
    ?>
     
    	<p style="text-align:center;"><b><br>Page : </b>
    <?php
    	// Pagination
    	for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    	{
    		//On va faire notre condition
    		if($i==$pageActuelle) //Si il s'agit de la page actuelle...
    		{
    			echo '<b> [ '.$i.' ] </b>';
    		} else {
    			echo ' <a href="liste-des-devis-demandes.php?rechercher=ok&date_envoi='.urlencode($date_envoi).'&page='.$i.'">'.$i.'</a> ';
    		}
    	}
    ?>
    	</p>
    <?php
    $req_retour_engins->closeCursor();
    ?>
    Dernière modification par Invité ; 25/09/2019 à 11h55.

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

Discussions similaires

  1. [SQL] récupération des données par le php
    Par soumia1988 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/09/2007, 14h57
  2. Récupération de données par fourchette
    Par rota44 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/09/2007, 10h14
  3. récupération de données par excel
    Par jeymer dans le forum Firebird
    Réponses: 4
    Dernier message: 29/08/2007, 12h33
  4. Réponses: 8
    Dernier message: 11/07/2006, 14h20
  5. [AJAX] probleme de récupération de donnée par GET
    Par Death83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/06/2006, 17h00

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