Bonjour a vous, je suis à cours d'idées et j'ai vraiment besoin de votre aide.
J'ai le même problème que celui rencontré par baddevil dans le sujet [RESOLU] module de recherche multicriteres php!
php-debutant/module-recherche-multicrit ... 41-15.html
Voila, j'ai fait un moteur de recherche multiple-critère avec pagination. Lorsque j'effectue la recherche selon un ou plusieurs critère, ces critères sont enregistré dans une variable de session et les résultats et le nombre de pages s'affiche correctement! Cependant, lorsque je clic sur la page 2, sa m'affiche la page 2 de la requête par défaut qui est celle d'afficher tous les devis sans distinction.
Tout fonctionne très bien mais la pagination coince!
merci pour votre aide précieuse!
voici le code complet de la page
<?php
/********Inclusion des paramètres...**********/
include('includes/config.php');
/********Fin des paramètres...**********/
/********Entête et titre de page*********/
$titre = 'Liste-des-devis';
include('includes/haut.php'); //contient le doctype, et head.
/**********Fin entête et titre***********/
?>
<!---------------------------------------------------------------- DEBUT MENU DE GAUCHE --------------------------------------------------------->
<?php
$requete = '';
$texte = '';
$devisCom = '';
$devisEtat = '';
$parEtat = '';
$parCom = '';
$parCli = '';
?>
<!--============================================ MENU ===========================================================-->
<div id='cssmenu'>
<ul>
<li><a href="<?php echo RACINE; ?>pages/ajout-devis.php"><span>Nouveau devis</span></a></li>
<li><a href="<?php echo RACINE; ?>pages/modifier-devis.php"><span>Modifier un devis</span></a></li>
<li class='active'><a href="<?php echo RACINE; ?>pages/liste-devis.php"><span>Tous les devis</span></a></li>
</ul>
</div>
<!-------------------------------- FIN MENU ------------------------------------------------>
<!--------------------------------------- CRITERES DE RECHERCHE --------------------------------------------------->
<div id='cssmenu'>
<ul>
<form name="tri" method="post" action="liste-devis.php">
<?php
/************************************************ RECHERCHE PAR COMMERCIAL ********************************************************/
if($_SESSION['privilege']=='Administrateur'){
?>
<!--============================== DEBUT COMMERCIAL ====================================-->
<li>
<p align="center" style="color:#06F">Devis par Commercial</p>
<select style="font-size:11px" name="devisCom" onChange="this.form.submit()">
<option value="">-- Sélectionner commercial -- </option>
<?php
$requete = "SELECT * FROM commercial ORDER BY nomCommercial";
$execution_requete = mysql_query($requete);
while($totalcom = mysql_fetch_array($execution_requete)){
extract($totalcom);
$select=($_POST['devisCom']==$idCommercial) ? " selected " : "";
echo '<option '.$select.' value="'.$idCommercial.'">'.$nomCommercial.'</option>';
}//fin while
?>
</select>
<br /><br />
</li>
<?php
//fin de la vérification si c'est un admin
}
?>
<!------------------------------------ FIN COMMERCIAL ---------------------------------->
<!--==================================== DEBUT ETAT =======================================-->
<li>
<p align="center"><span style="color:#06F">Devis par état</span>
<?php
if(isset($_POST['devisEtat']) AND $_POST['devisEtat']=='valide'){
echo '<center><label title="Validé">Validé<input checked="checked" type="radio" name="devisEtat" value="valide" title="Devis validé" onclick="this.form.submit()" style="font-size: 11px"/></label>';
echo '<label title="Annulé"><input type="radio" name="devisEtat" value="annule" title="Devis annulé" onclick="this.form.submit()" style="font-size: 11px"/>Annulé</label></center><br />';
echo '<center><label title="Tous"><input type="radio" name="devisEtat" value="en cours" title="Devis en cours" onclick="this.form.submit()" style="font-size: 11px"/><br />En cours</label></center>';
}
elseif(isset($_POST['devisEtat']) AND $_POST['devisEtat']=='annule'){
echo '<center><label title="Validé">Validé<input type="radio" name="devisEtat" value="valide" title="Devis validé" onclick="this.form.submit()" style="font-size: 11px"/></label>';
echo '<label title="Annulé"><input checked="checked" type="radio" name="devisEtat" value="annule" title="Devis annulé" onclick="this.form.submit()" style="font-size: 11px"/>Annulé</label></center><br />';
echo '<center><label title="Tous"><input type="radio" name="devisEtat" value="en cours" title="Devis en cours" onclick="this.form.submit()" style="font-size: 11px"/><br />En cours</label></center>';
}
elseif(isset($_POST['devisEtat']) AND $_POST['devisEtat']=='en cours'){
echo '<center><label title="Validé">Validé<input type="radio" name="devisEtat" value="valide" title="Devis validé" onclick="this.form.submit()" style="font-size: 11px"/></label>';
echo '<label title="Annulé"><input type="radio" name="devisEtat" value="annule" title="Devis annulé" onclick="this.form.submit()" style="font-size: 11px"/>Annulé</label></center><br />';
echo '<center><label title="Tous"><input checked="checked" type="radio" name="devisEtat" value="en cours" title="Devis en cours" onclick="this.form.submit()" style="font-size: 11px"/><br />En cours</label></center>';
}
else{
echo '<center><label title="Validé">Validé<input type="radio" name="devisEtat" value="valide" title="Devis validé" onclick="this.form.submit()" style="font-size: 11px"/></label>';
echo '<label title="Annulé"><input type="radio" name="devisEtat" value="annule" title="Devis annulé" onclick="this.form.submit()" style="font-size: 11px"/>Annulé</label></center><br />';
echo '<center><label title="Tous"><input type="radio" name="devisEtat" value="en cours" title="Devis en cours" onclick="this.form.submit()" style="font-size: 11px"/><br />En cours</label></center>';
}
?>
</p>
</li>
<!------------------------------------ FIN ETAT ---------------------------------->
<!--==================================== DEBUT CLIENT =========================================-->
<li>
<p align="center"><span style="color:#06F">Rechercher par client</span>
<?php
if(!empty($_POST['devisCli'])){
echo '<center><input value="'.$_POST['devisCli'].'" name="devisCli" type="text" placeholder="Nom complet ou une partie" maxlength="20" size="25" title="Rechercher devis par client" style="font-size: 11px"/></center>';
}
else{
echo '<center><input name="devisCli" type="text" placeholder="Nom complet ou une partie" maxlength="20" size="25" title="Rechercher devis par client" style="font-size: 11px"/></center>';
}
?>
<center><input name="submit" type="submit" value="Rechercher" style="font-size: 11px"/></center>
</p>
</li>
<!---------------------------------- FIN CLIENT ---------------------------------->
<!--==================================== DEBUT PERIODE ========================================-->
<li>
<p align="center"><span style="color:#06F">Devis par période</span></p>
<!---période d'entré --->
Début<br />
<select style="font-size:11px" name="perj1" id="perj1">
<option value="">Jour</option>
<?php
for($i=1;$i <=31;$i++){
$select=($_POST['perj1']==$i)? " selected " : "";
if($i<=9){
echo '<option'.$select.' value="0'.$i.'" $i=>0'.$i.'</option>';
}
else echo '<option'.$select.' value="'.$i.'" $i=>'.$i.'</option>';
}
?>
</select>
<select style="font-size:11px" name="perm1" id="perm1">
<option value="" >Mois</option>
<?php
$mois2 = array('', 'Jan', 'Fév', 'Mars', 'Avr', 'Mai', 'Juin', 'Juil', 'Aout', 'Sep', 'Oct', 'Nov', 'Déc');
for($i=1;$i<13;$i++){
$select=($_POST['perm1']==$i)? " selected " : "";
if($i<=9){
echo '<option'.$select.' value="0'.$i.'">'.$mois2[$i].'</option>';
}
else echo '<option'.$select.' value="'.$i.'">'.$mois2[$i].'</option>';
}
?>
</select>
<select style="font-size:11px" name="peran1" id="peran1">
<option value="" >Année</option>
<?php
$y = date('Y');
for($i=$y;$i >=$y-1 ;$i--){
$select=($_POST['peran1']==$i)? " selected " : "";
echo '<option'.$select.' value="'.$i.'" $i=>'.$i.'</option>';
}
?>
</select>
<!---période de sortie --->
<br />Fin<br />
<select style="font-size:11px" name="perj2" id="perj2">
<option value="">Jour</option>
<?php
for($i=1;$i <=31;$i++){
$select=($_POST['perj2']==$i)? " selected " : "";
if($i<=9){
echo '<option'.$select.' value="0'.$i.'" $i=>0'.$i.'</option>';
}
else echo '<option'.$select.' value="'.$i.'" $i=>'.$i.'</option>';
}
?>
</select>
<select style="font-size:11px" name="perm2" id="perm2">
<option value="" >Mois</option>
<?php
$mois2 = array('', 'Jan', 'Fév', 'Mars', 'Avr', 'Mai', 'Juin', 'Juil', 'Aout', 'Sep', 'Oct', 'Nov', 'Déc');
for($i=1;$i<13;$i++){
$select=($_POST['perm2']==$i)? " selected " : "";
if($i<=9){
echo '<option'.$select.' value="0'.$i.'">'.$mois2[$i].'</option>';
}
else echo '<option'.$select.' value="'.$i.'">'.$mois2[$i].'</option>';
}
?>
</select>
<select style="font-size:11px" name="peran2" id="peran2">
<option value="" >Année</option>
<?php
$y = date('Y');
for($i=$y;$i >=$y-1 ;$i--){
$select=($_POST['peran2']==$i)? " selected " : "";
echo '<option'.$select.' value="'.$i.'" $i=>'.$i.'</option>';
}
?>
</select>
<br /><br />
<center><input name="submit" type="submit" value="Rechercher" style="font-size: 11px"/></center>
</li>
<!------------------------------------FIN PERIODE---------------------------------->
</form>
</ul>
</div>
<!--======================================================= FIN CRITERES DE RECHERCHE ====================================================-->
<!-------------------------------------------------------- FIN MENU DE GAUCHE --------------------------------------------------------->
<!------------------------------------------------------------ DEBUT CONTENU --------------------------------------------------------->
<div id="contenu">
<h1>ESPACE DEVIS</h1>
<h2>Liste des devis en base</h2>
<h2 class="info" style="color:#00CC00">
<?php
//$_SESSION['critere'] = array();
if(!empty($_POST)){
$_SESSION['critere'] = $_POST;
if(isset($_SESSION['critere']))
extract($_SESSION['critere']);//on extrait les critères choisis pour ne plus redefinir des variables
$critere = array();//declaration du tablaeau qui va prendre tous les critères choisis.
//on met le critere dans le tableau si il n'est pas null
if(isset($devisCom) AND !empty($devisCom)){ $critere[] = 'D.idCommercial = '.$devisCom.' '; }
if(isset($devisEtat) AND !empty($devisEtat)){ $critere[] = 'etatDevis = "'.$devisEtat.'" '; }
if(isset($devisCli) AND !empty($devisCli)){ $critere[] = 'Cli.raisonSocialClient LIKE "%'.$devisCli.'%" '; }
if(isset($perj1) AND !empty($perj1) AND
isset($perm1) AND !empty($perm1) AND
isset($peran1) AND !empty($peran1) AND
isset($perj2) AND !empty($perj2) AND
isset($perm2) AND !empty($perm2) AND
isset($peran2) AND !empty($peran2)){
$per1 = $peran1.'-'.$perm1.'-'.$perj1.' 00:00:00';
$per2 = $peran2.'-'.$perm2.'-'.$perj2.' 23:59:59';
$critere[] = "dateEnregistrementDevis BETWEEN '".$per1."' AND '".$per2."' ";
}
$critereALL = implode(' AND ', $critere);//on met tous les critères dans un string
}
?>
</h2>
<hr width="450px" color="#0066FF" align="left"/>
<?php
if(!empty($_SESSION['critere']))
//print_r ($_SESSION['critere']/*['devisEtat']*/);
//récupération du msg de confirmation de modification ou d'ajout
if (isset($_GET['msg'])){
$msg = $_GET['msg'];
if($msg=='1'){
$msg = 'Le devis a correctement été ajouté.';
}
else $msg = 'Le devis a été correctement modifié.';
echo '<h2 class="info" style="color:#00CC00">'.$msg.'<img src="../images/icones/icones/accepter-verifier-vert-ok-oui-icone-6380-48.png" /></h2>';
echo '<br />';
}
?>
<p>
<?php
//interrogeons la base de donnée en fonction du privilège du commercial
if($_SESSION['privilege']=='Administrateur'){
if(!empty($critereALL) AND isset($_SESSION['critere'])){
$nbEnr = 'SELECT COUNT(*) AS total
FROM devis D,commercial Com,client Cli
WHERE D.idClient=Cli.idClient AND D.idCommercial = Com.idCommercial AND '.$critereALL.'';
//appel de la fonction qui calcul le nombre d'enregistrements
$total = calculTotal($nbEnr);
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/messagesParPage);
$pageActuelle = pageactuelle($nombreDePages);
$premiereEntree = preentree($pageActuelle);
$requete = 'SELECT * ,Com.nomCommercial, Cli.raisonSocialClient
FROM devis D,commercial Com,client Cli
WHERE D.idClient=Cli.idClient AND D.idCommercial = Com.idCommercial AND '.$critereALL.'
ORDER BY raisonSocialClient LIMIT '.$premiereEntree.', '.messagesParPage.'';
}
//tous les devis
else{
$nbEnr = 'SELECT COUNT(*) AS total FROM devis';
//appel de la fonction qui calcul le nombre d'enregistrements
$total = calculTotal($nbEnr);
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/messagesParPage);
$pageActuelle = pageactuelle($nombreDePages);
$premiereEntree = preentree($pageActuelle);
$requete = 'SELECT * ,Com.nomCommercial, Cli.raisonSocialClient
FROM devis D,commercial Com,client Cli
WHERE D.idClient=Cli.idClient AND D.idCommercial = Com.idCommercial
ORDER BY raisonSocialClient LIMIT '.$premiereEntree.', '.messagesParPage.'';
} //fin if liste par Com
$texte = '<p align="right">La base contient actuellement ';
}/**************************************************** fin if admin**************************************************************/
elseif($_SESSION['privilege']!='Administrateur'){
//Devis par etat
if(isset($_POST['devisEtat'])){
$parEtat = $_POST['devisEtat'];
$requete = 'SELECT * ,Com.nomCommercial, Cli.raisonSocialClient
FROM devis D,commercial Com,client Cli
WHERE D.idClient=Cli.idClient AND D.idCommercial = Com.idCommercial AND
D.idCommercial = "'.$_SESSION['id'].'"AND etatDevis = "'.$parEtat.'"
ORDER BY raisonSocialClient';
}
//Devis par client
elseif(isset($_POST['submit']) AND !empty($_POST['devisCli'])){
$parCli = $_POST['devisCli'];
$requete = 'SELECT * ,Com.nomCommercial, Cli.raisonSocialClient
FROM devis D,commercial Com,client Cli
WHERE D.idClient=Cli.idClient AND D.idCommercial = Com.idCommercial AND
D.idCommercial = "'.$_SESSION['id'].'" AND Cli.raisonSocialClient LIKE "%'.$parCli.'%"
ORDER BY raisonSocialClient';
}
//devis par période
elseif(isset($_POST['rechPeriode']) AND
!empty($_POST['perj1']) AND !empty($_POST['perj2']) AND
!empty($_POST['perm1']) AND !empty($_POST['perm2']) AND
!empty($_POST['peran1']) AND !empty($_POST['peran2'])){
$per1 = $_POST['peran1'].'-'.$_POST['perm1'].'-'.$_POST['perj1'];
$per2 = $_POST['peran2'].'-'.$_POST['perm2'].'-'.$_POST['perj2'];
$requete = 'SELECT * ,Com.nomCommercial, Cli.raisonSocialClient
FROM devis D,commercial Com,client Cli
WHERE D.idClient=Cli.idClient AND D.idCommercial = Com.idCommercial AND D.idCommercial = "'.$_SESSION['id'].'" AND
dateEtatDevis BETWEEN "'.$per1."' AND '".$per2.'"
ORDER BY raisonSocialClient';
}
//tous les devis
else{
$nbEnr = 'SELECT COUNT(*) AS total FROM devis WHERE idCommercial = "'.$_SESSION['id'].'"';
//appel de la fonction qui calcul le nombre d'enregistrements
$total = calculTotal($nbEnr);
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/messagesParPage);
$pageActuelle = pageactuelle($nombreDePages);
$premiereEntree = preentree($pageActuelle);
$requete = 'SELECT *,Com.nomCommercial,Cli.raisonSocialClient
FROM devis D,commercial Com,client Cli
WHERE D.idClient=Cli.idClient AND D.idCommercial = Com.idCommercial AND D.idCommercial = "'.$_SESSION['id'].'"
ORDER BY Cli.raisonSocialClient LIMIT '.$premiereEntree.', '.messagesParPage.'';
$texte = '<p align="right">Vous avez la charge de ';
} //fin if liste par Com
}
//debut de la pagination
function calculTotal($nbEnr){
$retour_total=mysql_query($nbEnr) or die(mysql_error()); //Nous récupérons le contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
return $total;
}
function pageactuelle($nombreDePages){
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 // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
}
return $pageActuelle;
}
function preentree($pageActuelle){
$premiereEntree=($pageActuelle-1)*messagesParPage; // On calcul la première entrée à lire
return $premiereEntree;
}
$rep = mysql_query($requete) or die(mysql_error());
echo '<br /><br /><table class="tableauDevis">
<tr class="titreTable">
<td align=center>N°</td>
<td align=center>CLIENT</td>
<td align=center>COMMERCIAL</td>
<td align=center>DATE D\'ENREGISTREMENT</td>
<td align=center>DESCRIPTION</td>
<td align=center>MONTANT</td>
<td align=center>PROCHAIN RDV</td>
<td align=center>ECHEANCE</td>
<td align=center>ETAT</td>
<td align=center>DATE ETAT</td>
<td align=center>OBSERVATION</td>
</tr>';
$nb_ligne = mysql_num_rows($rep);
if(!empty($pageActuelle)){
$nb_ligne = $total;
}
while($ret= mysql_fetch_array($rep)){
echo'<tr>
<td>'.$ret['numDevis'].'</td>
<td>'.$ret['raisonSocialClient'].'</td>
<td>'.$ret['nomCommercial'].'</td>
<td>'.$ret['dateEnregistrementDevis'].'</td>
<td>'.$ret['descriptionDevis'].'</td>
<td>'.$ret['montantTotalDevis'].'</td>
<td>'.$ret['prochainRDVDevis'].'</td>
<td>'.$ret['echanceProjetDevis'].'</td>
<td>'.$ret['etatDevis'].'</td>
<td>'.$ret['dateEtatDevis'].'</td>
<td>'.$ret['observationDevis'].'</td>
</tr>';
}//fin while
echo '</table>';
//Pour l'affichage, on centre la liste des pages
if(!empty($pageActuelle)){
echo '<p align="center">Page : ';
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 ' [ '.$i.' ] ';
}
else //Sinon...
{
echo ' <a href="liste-devis.php?page='.$i.'">'.$i.'</a> ';
}
}
echo '</p>';
}
?>
</p>
<?php echo $texte.'<b style="color:red">'.$nb_ligne.'</b> devis.</p>'?>
</div>
<!------------------------------------------------------------ FIN CONTENU --------------------------------------------------------->
<?php
include('includes/bas.php');
mysql_close();
?>