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

  1. #1
    Membre à l'essai
    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
    Points : 11
    Points
    11
    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
    17 307
    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 : 17 307
    Points : 42 705
    Points
    42 705
    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 à 11h09.

  4. #4
    Membre à l'essai
    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
    Points : 11
    Points
    11
    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 à l'essai
    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
    Points : 11
    Points
    11
    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 à 12h55.

  7. #7
    Membre à l'essai
    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
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup jreaux62,
    Grâce à toi j'avance petit à petit. Malheureusement j'ai laissé ton code pour me focaliser sur celui que j'ai déjà et j'ai fais un pas en avant en ayant l'affichage de la 1ère page. Maintenant c'est lorsque je clique sur la pagination pour aller sur la 2ème page que j'ai les erreurs suivantes:
    1- Notice: Undefined variable: nombreDePages in C:\wamp\www\...\admin\devis-ordonnes-final.php on line 114
    2- Notice: Undefined variable: req_retour_engins in C:\wamp\www\...\admin\devis-ordonnes-final.php on line 127
    3- Fatal error: Uncaught Error: Call to a member function closeCursor() on null in C:\wamp\www\ARCHIMONEXT\admin\devis-ordonnes-final.php on line 127
    4- Error: Call to a member function closeCursor() on null in C:\wamp\www\...\admin\devis-ordonnes-final.php on line 127.
    Alors que toutes ces variables sont déjà belles et bien définies.
    Je vois que j'ai juste besoin de quelqu'un pour corriger mon code.
    Ci-dessous le code à corriger pour que la page suivante affiche le reste des enregistrements à afficher comme on le voit dans la pagination...

    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	
    	if (!empty($_GET['date_envoi']) AND isset($_GET['rechercher']))
    	    {
    		 $date_envoi = $_GET["date_envoi"];
    		 $date_envoi = date('Y-m-d', strtotime($date_envoi));
    		 $messageParPage=2; //Nous allons afficher 5 messages par page.
     
    		//Une connexion SQL doit être ouverte avant cette ligne...
    		$retour_total=$bdd->prepare('SELECT COUNT(*) AS total FROM messages WHERE date_envoi LIKE ?'); //Nous récupérons le contenu de la requête dans $retour_total
    		$retour_total->execute(array("%".$date_envoi."%"));
    		$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->prepare('SELECT * FROM messages WHERE date_envoi LIKE ? ORDER BY id_messages DESC LIMIT '.$premiereEntree.', '.$messageParPage.'');
    					   $req_retour_engins->execute(array("%".$date_envoi."%"));
    					   //SELECT DATE_FORMAT(date_envoi, '%d-%m-%Y') from la_table;
     
    						if($donnees = $req_retour_engins->fetch())
    						    {
    							do
    							    {
    								?>
    								    <tr>
    									   <td> <?php echo htmlspecialchars($donnees['id_messages']); ?> </td>
    									    <td> <?php echo htmlspecialchars($donnees['nom_visiteur']); ?> </td>
    									    <td> <?php echo htmlspecialchars($donnees['objet']); ?> </td>
    									    <td> <?php echo htmlspecialchars($donnees['contact']); ?> </td>
    									    <td> <?php echo htmlspecialchars($donnees['email']); ?> </td> 
    									    <td> <?php echo htmlspecialchars($donnees['message']); ?> </td>
    									    <td> <?php echo date('d-m-Y', strtotime($date_envoi)); ?> </td>
    										<?php
    											}
    											    while($donnees = $req_retour_engins->fetch());
    											        }
    												    else
    													{
    													     echo '<h3>Pas de résultat trouvé! <br><a href="administration.php"> RETOUR</a></h3>';
    													}
    													     $req_retour_engins->closeCursor();
    														 } else
    															{ 
    															    echo "<h3>Saisir d'abord la date avant de la rechercher <a href='administration.php'>RETOUR</a></h3>";
    																//exit();
    															} 
    															?>
    													</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="devis-ordonnes-final.php?page='.$i.'">'.$i.'</a> ';
    														 }
    													}
    													echo '</p></center>';
    													$req_retour_engins->closeCursor();
    												?>

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

    Ton code nécessite de récupérer 2 paramètres en GET :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	if (!empty($_GET['date_envoi']) AND isset($_GET['rechercher']))
    Or, pour la pagination, tu as écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	echo ' <a href="devis-ordonnes-final.php?page='.$i.'">'.$i.'</a> ';
    1- La solution simple est de rajouter les 2 paramètres :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ' <a href="devis-ordonnes-final.php?rechercher=ok&date_envoi='.urlencode($date_envoi).'&page='.$i.'">'.$i.'</a> ';

    2- Une solution plus "évoluée" serait de mettre les paramètres reçus dans une variable de SESSION (comme je l'ai expliqué dans ma [source]).
    Dernière modification par Invité ; 25/09/2019 à 12h55.

  9. #9
    Membre à l'essai
    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
    Points : 11
    Points
    11
    Par défaut
    Encore merci jreaux62 pour ton aide. La solution que tu m'as donnée marche vraiment. J'ai pour le moment opté pour le passage des paramètres en GET. Cependant en cherchant à améliorer mon code en ajoutant un 2nd paramètre de recherche, je me trouve confronté à un problème. En effet je veux maintenant rechercher le client qui a envoyé un message à une date donnée. Par exple: Tous les messages envoyés par jreaux62 le 20-09-2019.
    A cet effet, voici le code ci-dessous qui me dit toujours qu'il n'ya "pas de resultat trouvé" (alors qu'il y en a) lorsque je tape un nom dans le champ "nom_visiteur" et que je ne saisi rien dans le champ "date_envoi", car je veux obtenir un résultat lorsque je saisi seulement le nom et/ou la date:
    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
     
    <?php	
    	if (empty($_GET['nom_visiteur']) AND empty($_GET['date_envoi']) AND isset($_GET['rechercher']))
    	    {   echo "<h3>Saisissez d'abord tous les champs avant la recherche <a href='administration.php'>RETOUR</a></h3>";
    		exit();
    	    }
    		if (!empty($_GET['nom_visiteur']) OR !empty($_GET['date_envoi']) AND isset($_GET['rechercher']))
    		    {
    			$nom_visiteur = $_GET["nom_visiteur"];
    			$date_envoi = $_GET["date_envoi"];
    			$date_envoi = date('Y-m-d', strtotime($date_envoi));
    			$messageParPage=2; //Nous allons afficher 5 messages par page.
     
    			//Une connexion SQL doit être ouverte avant cette ligne...
    		       $retour_total=$bdd->prepare('SELECT COUNT(*) AS total FROM messages WHERE nom_visiteur LIKE ? AND date_envoi LIKE ?'); //Nous récupérons le contenu de la requête dans $retour_total
    			$retour_total->execute(array("%".$nom_visiteur."%","%".$date_envoi."%"));
    			$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->prepare('SELECT * FROM messages WHERE nom_visiteur LIKE ? AND date_envoi LIKE ? ORDER BY id_messages DESC LIMIT '.$premiereEntree.', '.$messageParPage.'');
    					$req_retour_engins->execute(array("%".$nom_visiteur."%","%".$date_envoi."%"));
    					//SELECT DATE_FORMAT(date_envoi, '%d-%m-%Y') from la_table;
    					if($donnees = $req_retour_engins->fetch())
    					      {
    						   do
    							{
    							    ?>
    								<tr>
    								       <td> <?php echo htmlspecialchars($donnees['id_messages']); ?> </td>
    								       <td> <?php echo htmlspecialchars($donnees['nom_visiteur']); ?> </td>
    								       <td> <?php echo htmlspecialchars($donnees['objet']); ?> </td>
    								       <td> <?php echo htmlspecialchars($donnees['contact']); ?> </td>
    								       <td> <?php echo htmlspecialchars($donnees['email']); ?> </td> 
    								       <td> <?php echo htmlspecialchars($donnees['message']); ?> </td>
    								       <td> <?php echo date('d-m-Y', strtotime($date_envoi)); ?> </td>
    									  <?php
    										}
    										  while($donnees = $req_retour_engins->fetch());
    										}
    										    else
    											{
    											     echo '<h3>Pas de résultat trouvé! <br><a href="administration.php"> RETOUR</a></h3>';
    											}
    											    $req_retour_engins->closeCursor();
    									} /* else
    										    { 
    											echo "<h3>Saisir d'abord la date avant de la rechercher <a href='administration.php'>RETOUR</a></h3>";
    											//exit();
    										    } */ 
    										?>
    													</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="devis-ordonnes-final.php?rechercher=ok&nom_visiteur='.$nom_visiteur.'&date_envoi='.$date_envoi.'&page='.$i.'">'.$i.'</a> ';
    														 }
    													}
    													echo '</p></center>';
    													$req_retour_engins->closeCursor();
    												?>
     
                                                <a href="panneau.php"><h2>Retourner à l'administration</h2></a>

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

    C'est ce que fait mon "Principe de recherche".

  11. #11
    Membre à l'essai
    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
    Points : 11
    Points
    11
    Par défaut
    Bonjour jreaux, je sais que le temps te manque étant informaticien, mais est-ce que tu peux prendre encore un peu de ton temps pour traduire mon code actuel en ton code de session stp? Parceque je suis débutant et je ne comprends pas ton cours sur les critères de recherches lorsque je l'ai lu. C'est donc l'occasion pour toi de nous le faire comprendre en faisant un exemple concret comme le mien. Voici le code de mon formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
              <form method="GET" action="devis-dun-client-a-une-date-donnee.php"> <!-- devis-dun-client-a-une-date-donnee.php-->
    		<input type="search" name="nom_visiteur" placeholder="Nom du client concerné"/>
    		<input type="search" name="date_envoi" placeholder="saisir la date"/>
    		<input type="submit" name="rechercher" value="Rechercher"/>
               </form>
    Pour que je comprenne facilement tu peux même utiliser les conditions ternaires comme Dentrite l'a fait ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ( isset($_POST['critere1']) ){
      $_SESSION['recherche']['critere1'] = trim($_POST['critere1']);
    }
    else{
      $_SESSION['recherche']['critere1']=$_SESSION['recherche']['critere1'];
    }
    ou une série de elseif consécutifs comme il encore fait ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if( $_SESSION['recherche']['critere1'] == -99 || $_SESSION['recherche']['critere1'] == 0 ){
      //on ne fait rien
    }
    else{
      $sql_where[] = " critere1 = :critere1 ";
    	$sql_param[':critere1'] = $_SESSION['recherche']['critere1'];
    }
    //et ainsi on prépare une belle requête PDO avec paramètres nommés comme Jreaux les aime.
    N'oublies pas aussi de dire en commentaire ce que represente les valeurs -99 et 0.
    Merci d'avance

  12. #12
    Invité
    Invité(e)
    Par défaut
    C'est ce que j'ai commencé à faire ici.
    C'est une solution intermédiaire (sans SESSION) entre "mon principe" et "ton code".

    Il faut juste modifier :
    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
    // -------------
    // 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($_GET['nom_visiteur']) )
    {
    	$nom_visiteur= urldecode($_GET['nom_visiteur']);
    	$sql_where[] = " nom_visiteur LIKE :nom_visiteur";
    	$sql_param[':nom_visiteur'] = "%".$nom_utilisateur."%";
    }
    // -------------
    if ( !empty($date_envoi) || !empty($nom_visiteur) )
    {
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			echo ' <a href="liste-des-devis-demandes.php?rechercher=ok&date_envoi='.urlencode($date_envoi).'&nom_visiteur='.urlencode($nom_visiteur).'&page='.$i.'">'.$i.'</a> ';
    Dernière modification par Invité ; 25/09/2019 à 12h56.

+ 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, 15h57
  2. Récupération de données par fourchette
    Par rota44 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/09/2007, 11h14
  3. récupération de données par excel
    Par jeymer dans le forum Firebird
    Réponses: 4
    Dernier message: 29/08/2007, 13h33
  4. Réponses: 8
    Dernier message: 11/07/2006, 15h20
  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, 18h00

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