Recherche avec plusieurs champs de formulaire sur base mysql [Résolu]

space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 6 juin 2010 à 16:40 - Dernière réponse : cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention
- 10 juin 2010 à 19:20
Bonjour à tous,

J'avance tant bien que mal dans la réalisation de mon site internet mais me voilà confronté à un nouveau problème.

Je m'explique, j'ai une base de données contenant de nombreux champs par enregistrement (type d'objet, lieu de découverte, datation, etc.). Comme le laissent deviner les différents champs mentionnés, il s'agit d'une base de donnée concernant du mobilier archéologique.

La base est en place, tout fonctionne à merveille et je souhaite donc mettre en place un moteur de recherche pour éviter de faire défiler tous les enregistrements à chaque fois que j'ai besoin d'une infos.

J'ai donc créé un formulaire dans lequel l'utilisateur entre des mots clés pour accéder à l'enregistrement voulu.
Maintenant voilà mon problème, je sais effectuer des recherches à partir d'un champ de formulaire, mais comment faire pour faire des recherches à partir de plusieurs champs ?

J'ai un champ "type d'objet", un autre "lieu de découverte", un "lieu de conservation", etc.

Comment faire pour envoyer une requête sur ma base à partir de ces différents champs que l'utilisateur rempli, sachant que certains resteront vides...

J'aurai par exemple une requête avec les champs "type d'objet" et "lieu de découverte", les autres champs restant vides.
De même, je peux avoir une requête avec "contexte" et "datation"...

Bref, comment faire une recherche multi-critères en ne sachant pas quels champs seront remplis...

J'avais d'abord pensé à l'emploi d'un AND ou un OR, mais AND implique que tous les champs soient remplis, et OR ne permet pas une recherche multi-critères...

Une recherche type correspondrait par exemple à :

champ "type d'objet" = rasoir
champ "lieu de découverte" = Paris

Qui devrait alors me renvoyer tous les enregistrements correspondant à des rasoirs découverts à Paris...

J'espère être assez clair,

Merci d'avance
Afficher la suite 

22 réponses

Répondre au sujet
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 9 juin 2010 à 21:21
+3
Utile
Voici le fichier base.php que j'obtiens avec tout qui fonctionne :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns= "http://www.w3.org/1999/xhtml">
<head>

<?php
require('GoogleMapAPI.class.php');
$map = new GoogleMapAPI('map');
$map->setAPIKey('ABQIAAAAUuoLhYiMeseo3odTIftNyRSBc7srxbx_EhMHmhITuHjxuUbUahSDMRzmkgMJxh9Y0QKT


5VK0qWbv2w');

$map->setHeight("370");
$map->setWidth("380");
$map->setCenterCoords ('2', '47');
$map->setZoomLevel (5);
$map->setMapType('map');
$map->setControlSize('small');

$map->setMapType('satellite');


require_once('connexion2.php');
session_start(); // On relaye la session
if (session_is_registered("authentification")){
// vérification sur la session authentification (la session est elle enregistrée ?)
$login = $_SESSION['login'];
}
else{
header("Location:index.php?erreur=intru"); // redirection en cas d'echec
}

?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Accessoires de toilette en contexte funéraire dans le sud de
la France au premier âge du Fer</title>
<link rel="stylesheet" type="text/css" href="style.css" />

</head>





Accessoires de toilette en contexte funéraire dans le sud de la France au premier âge du Fer

Sujet d'étude de Master 1








<li>[index.php Accueil]</li>
<li id="active">[base.php Base de données]</li>
<li>[# Bibliographie]</li>
<li>[# Contact]</li>










<li>[base.php Afficher tout]</li>
<li>[base.php?selection=rasoir Rasoirs]</li>
<li>[base.php?selection=scalptorium Scalptoria]</li>
<li>[base.php?selection=pince Pinces à épiler]</li>
<li>[base.php?selection=curette Curettes]</li>
<li>[base.php?selection=trousse Trousses]</li>
<li>[# Recherche]</li>



<?php 
/*** AFFICHAGE CONDITIONNEL OU REDIRECTION EN FONCTION DU PRIVILEGE ***/
// si l'utilisateur est connecté comme admin ...
if($_SESSION['privilege'] == "admin"){

}
// fin de l'affichage conditionnel?

// si l'utilisateur est connecté comme simple utilisateur ...
if($_SESSION['privilege'] == "utilisateur"){ 
// START Gestion des sélections
$where = '';
if(isset($_GET['selection'])){
$where " WHERE Type_objet '".mysql_real_escape_string($_GET['selection'])."' ";
}
else{
$test = false;
foreach ($_GET as $critere=>$valeur){
if (($critere=="categorie") and ($valeur!="")){
$where = $where."Type_objet like '%".mysql_real_escape_string($_GET['categorie'])."%' and ";
$test = true;
}
if (($critere=="lieu") and ($valeur!="")){
$where = $where."Lieu_de_decouverte like '%".mysql_real_escape_string($_GET['lieu'])."%' and ";
$test = true;
}
if (($critere=="localisation") and ($valeur!="")){
$where = $where."localisation like '%".mysql_real_escape_string($_GET['localisation'])."%' and ";
$test = true;
}
if (($critere=="documentation") and ($valeur!="")){
$where = $where."Documentation like '%".mysql_real_escape_string($_GET['documentation'])."%' and ";
$test = true;
}
if (($critere=="matiere") and ($valeur!="")){
$where = $where."Matiere like '%".mysql_real_escape_string($_GET['matiere'])."%' and ";
$test = true;
}
if (($critere=="conservation") and ($valeur!="")){
$where = $where."Lieu_de_conservation like '%".mysql_real_escape_string($_GET['conservation'])."%' and ";
$test = true;
}
if (($critere=="inventaire") and ($valeur!="")){
$where = $where."Num_inventaire like '%".mysql_real_escape_string($_GET['inventaire'])."%' and ";
$test = true;
}
if (($critere=="dimensions") and ($valeur!="")){
$where = $where."Dimensions like '%".mysql_real_escape_string($_GET['dimensions'])."%' and ";
$test = true;
}
if (($critere=="description") and ($valeur!="")){
$where = $where."Description like '%".mysql_real_escape_string($_GET['description'])."%' and ";
$test = true;
}
if (($critere=="type") and ($valeur!="")){
$where = $where."Type like '%".mysql_real_escape_string($_GET['type'])."%' and ";
$test = true;
}
if (($critere=="contexte") and ($valeur!="")){
$where = $where."Contexte_archeo like '%".mysql_real_escape_string($_GET['contexte'])."%' and ";
$test = true;
}
if (($critere=="position") and ($valeur!="")){
$where = $where."Position like '%".mysql_real_escape_string($_GET['position'])."%' and ";
$test = true;
}
if (($critere=="datation") and ($valeur!="")){
$where = $where."Datation like '%".mysql_real_escape_string($_GET['datation'])."%' and ";
$test = true;
}
}
if ($test==true){
$where = "WHERE ".substr($where,0,(strlen($where)-5));
}else{
$where = "";
}
}
// END Gestion des sélections

mysql_select_db($database_dbprotect, $dbprotect);
$limit	= 1;
$offset = ((isset($_REQUEST['offset']) && $_REQUEST['offset'] > 0) ? $_REQUEST['offset'] : 0);

// START Gestion des sélections
$sql_str = 'SELECT SQL_CALC_FOUND_ROWS * FROM Accessoires_de_toilette '.$where.' LIMIT '.$offset.', '.$limit.' ';

// END Gestion des sélections
$result = mysql_query($sql_str) or die(mysql_error());
while ($data = mysql_fetch_assoc($result)){ ?>




" alt="" border="1" /> 



<?php
$adresse = utf8_encode(''.$data['Localisation'].'');
$map->addMarkerByAddress( "$adresse");

$map->printHeaderJS();
$map->printMapJS();

?>

Catégorie :,
<?php echo

''.$data['Type_objet']/*.' '.$data['Type_objet_suite'].''*/; ?>,

----

Lieu de découverte :,
<?php echo

''.$data['Lieu_de_decouverte'].''; ?>,

----

Localisation :,
<?php echo

''.$data['Localisation'].''; ?>,

----

Documentation :,
<?php echo

nl2br(''.$data['Documentation'].''); ?>,

----

Matière :,
<?php echo

''.$data['Matiere'].''; ?>,

----

Lieu de

conservation :,
<?php echo

''.$data['Lieu_de_conservation'].''; ?>,

----

Numéro d'inventaire :,
<?php echo

''.$data['Num_inventaire'].''; ?>,

----

Dimensions :,
<?php echo

''.$data['Dimensions'].''; ?>,

----

Description :,
<?php echo

nl2br(''.$data['Description'].''); ?>,

----

Type :,
<?php echo

''.$data['Type'].''; ?>,

----

Contexte archéologique :,
<?php echo

nl2br(''.$data['Contexte_archeo'].''); ?>,

----

Position :,
<?php echo

''.$data['Position'].''; ?>,

----

Datation :,
<?php echo

''.$data['Datation'].''; ?>






<center><?php $map->printMap(); ?></center>






<?php
}
$result	= mysql_query('SELECT FOUND_ROWS() AS total');
$data	= mysql_fetch_assoc($result);



function paging($page, $total_rows, $limit, $offset, $preserved_params = null){

$query = '';
$str_hidden = '';		
if (is_array($preserved_params)) {	
foreach ($preserved_params as $k=>$v) {
if ($k != 'offset') {
$query .= $k.'='.urlencode($v).'&amp;';
$str_hidden .= '';

}
}			
}

if (strpos($page, '?') !== false) {
$page = substr($page, 0, strpos($page, '?'));
}

$nb_pages = ceil($total_rows / $limit);		
$i = 0;
$j = 0;
$idx_page = 0;
while ($i < $total_rows) {
$tab_pages[$j]['id']	= $i;
$tab_pages[$j]['text']	= ($j + 1).' / '.$nb_pages;
if ((int)$offset >= $i) {
$idx_page = $j;
}
$i += $limit;
$j++;
}

$reponse = '<form class="barre-navigation-pages" action="'.$page.'" >';
$page .= '?'.$query;
$page_actuelle = $offset + 1;				

if (($offset > 0) && !($offset < ($total_rows - 1) && 

isset($tab_pages[$idx_page + 1]))) {
$reponse .= '
['.$page.'&amp;offset='.($offset - $limit).' Précédent] [ '.$page_actuelle.' / '.$total_rows.' ] 


 ';

}		

else if (($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1])) && 

!($offset > 0)) {
$reponse .= ' [ '.$page_actuelle.' / 


'.$total_rows.' ] ['.$page.'offset='.$tab_pages[$idx_page + 1]['id'].' Suivant]

';

}

else if (($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1])) && 

($offset > 0)) {
$reponse .= '['.$page.'&amp;offset='.($offset - $limit).' Précédent] [ '.$page_actuelle.' / '.$total_rows.' ] 

['.$page.'offset='.$tab_pages[$idx_page + 1]['id'].' Suivant]

';

}

$reponse .= '</form>';
return $reponse;
}

// START Gestion des sélections
$preserved_params = null;
if(isset($_GET['selection']))
{	
$preserved_params = 

array('selection'=>mysql_real_escape_string($_GET['selection']));
}else{

  
   $preserved_params = array('categorie'=>mysql_real_escape_string($_GET['categorie']),'lieu'=>mysql_real_escape_string($_GET['lieu']),
   'localisation'=>mysql_real_escape_string($_GET['localisation']),'documentation'=>mysql_real_escape_string($_GET['documentation']),
   'matiere'=>mysql_real_escape_string($_GET['matiere']),'conservation'=>mysql_real_escape_string($_GET['conservation']),
   'inventaire'=>mysql_real_escape_string($_GET['inventaire']),'dimensions'=>mysql_real_escape_string($_GET['dimensions']),
   'description'=>mysql_real_escape_string($_GET['description']),'type'=>mysql_real_escape_string($_GET['type']),
   'contexte'=>mysql_real_escape_string($_GET['contexte']),'position'=>mysql_real_escape_string($_GET['position']),
   'datation'=>mysql_real_escape_string($_GET['datation']));
}
echo paging('base.php', $data['total'], $limit, $offset, $preserved_params);

// END Gestion des sélections

} // fin de l'affichage conditionnel

?>


[index.php?erreur=logout  Déconnexion ]










</html>

et voici l'autre :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns ="http://www.w3.org/1999/xhtml">
<head>

<?php

require_once('connexion2.php');
session_start(); // On relaye la session
if (session_is_registered("authentification"))
{
// vérification sur la session authentification (la session est elle enregistrée ?)
$login = $_SESSION['login'];
}
else
{
header("Location:index.php?erreur=intru"); // redirection en cas d'echec
}

?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Accessoires de toilette en contexte funéraire dans le sud de
la France au premier âge du Fer</title>
<link rel="stylesheet" type="text/css" href="style.css" />


</head>





Accessoires de toilette en contexte funéraire dans le sud de la France au premier âge du Fer

Sujet d'étude de Master 1








  <li>[index.php Accueil]</li>
  <li id="active">[base.php Base de données]</li>
  <li>[# Bibliographie]</li>
  <li>[# Contact]</li>










<li>[base.php Afficher tout]</li>
<li>[base.php?selection=rasoir Rasoirs]</li>
<li>[base.php?selection=scalptorium Scalptoria]</li>
<li>[base.php?selection=pince Pinces à épiler]</li>
<li>[base.php?selection=curette Curettes]</li>
<li>[base.php?selection=trousse Trousses]</li>
<li>[# Recherche]</li>



<?php 
/*** AFFICHAGE CONDITIONNEL OU REDIRECTION EN FONCTION DU PRIVILEGE ***/
// si l'utilisateur est connecté comme admin ...
if($_SESSION['privilege'] == "admin")
{
}
// fin de l'affichage conditionnel?

// si l'utilisateur est connecté comme simple utilisateur ...
if($_SESSION['privilege'] == "utilisateur")
{?>


<form method="GET" action="base.php">

Catégorie :,
,

----

Lieu de découverte :,
<textarea name="lieu" cols=38 rows=1></textarea>,

----

Localisation :,
<textarea name="localisation" cols=38 rows=1></textarea>,

----

Documentation :,
<textarea name="documentation" cols=50 rows=4></textarea>,

----

Matière :,
,

----

Lieu de conservation :,
<textarea name="conservation" cols=38 rows=1></textarea>,

----

Numéro d'inventaire :,
,

----

Dimensions :,
<textarea name="dimensions" cols=50 rows=1></textarea>,

----

Description :,
<textarea name="description" cols=50 rows=5></textarea>,

----

Type :,
,

----

Contexte archéologique :,
<textarea name="contexte" cols=50 rows=14></textarea>,

----

Position :,
<textarea name="position" cols=50 rows=1></textarea>,

----

Datation :,



 
</form>

<?php
if (isset($_POST['categorie']))
{
header("Location:base.php");
}

} // fin de l'affichage conditionnel
?>


[index.php?erreur=logout Déconnexion]










</html>


j'espere que chez toi ca fonctionnera.


Personne ne peut se permettre de juger l'autre....
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_sebastien_et_typh
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 10 juin 2010 à 10:18
+3
Utile
C'est normal que ca ne fonctionne pas tu as mal recopier mon code lol car ta fonction paging ne conserve que les parametres grace a la methode GET donc j'ai passer ton formulaire en GET : a la place de <form method="POST" /> j'ai mis method="GET".
il faut modifier aussi en haut du fichier base.php ou tu creer la requete tu remplace tout les $_POST par $_GET.
reverifie bien le code que j'ai mis mais a mon avis essaye en copiant/collant tout le code que j'obtient ca devrait fonctionner.



Personne ne peut se permettre de juger l'autre....
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_sebastien_et_typh
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 6 juin 2010 à 19:58
0
Utile
Bonjour,
pourrait tu mettre le script de ton formulaire que tu a crée pour effectuer ta recherche.



Personne ne peut se permettre de juger l'autre....
Commenter la réponse de cs_sebastien_et_typh
space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 6 juin 2010 à 21:27
0
Utile
Pas de problème, voilà d'abord la page du formulaire :

(sur les deux pages il y actuellement un affichage conditionnel pour admin et utilisateur simple mais ça n'est pas à prendre en compte, il y a de bonnes chances pour que je finisse par enlever l'identification des utilisateurs...)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns= "http://www.w3.org/1999/xhtml">
<head>

<?php

require_once('connexion2.php');
session_start(); // On relaye la session
if (session_is_registered("authentification"))
{
// vérification sur la session authentification (la session est elle enregistrée ?)
$login = $_SESSION['login'];
}
else
{
header("Location:index.php?erreur=intru"); // redirection en cas d'echec
}

?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Accessoires de toilette en contexte funéraire dans le sud de
la France au premier âge du Fer</title>
<link rel="stylesheet" type="text/css" href="style.css" />


</head>





Accessoires de toilette en contexte funéraire dans le sud de la France au premier âge du Fer

Sujet d'étude de Master 1








  <li>[index.php Accueil]</li>
  <li id="active">[base.php Base de données]</li>
  <li>[# Bibliographie]</li>
  <li>[# Contact]</li>










<li>[base.php Afficher tout]</li>
<li>[base.php?selection=rasoir Rasoirs]</li>
<li>[base.php?selection=scalptorium Scalptoria]</li>
<li>[base.php?selection=pince Pinces à épiler]</li>
<li>[base.php?selection=curette Curettes]</li>
<li>[base.php?selection=trousse Trousses]</li>
<li>[# Recherche]</li>



<?php 
/*** AFFICHAGE CONDITIONNEL OU REDIRECTION EN FONCTION DU PRIVILEGE ***/
// si l'utilisateur est connecté comme admin ...
if($_SESSION['privilege'] == "admin")
{
}
// fin de l'affichage conditionnel?

// si l'utilisateur est connecté comme simple utilisateur ...
if($_SESSION['privilege'] == "utilisateur")
{?>


<form method="POST" action="base.php">

Catégorie :,
,

----

Lieu de découverte :,
<textarea name="lieu" cols=38 rows=1></textarea>,

----

Localisation :,
<textarea name="localisation" cols=38 rows=1></textarea>,

----

Documentation :,
<textarea name="documentation" cols=50 rows=4></textarea>,

----

Matière :,
,

----

Lieu de conservation :,
<textarea name="conservation" cols=38 rows=1></textarea>,

----

Numéro d'inventaire :,
,

----

Dimensions :,
<textarea name="dimensions" cols=50 rows=1></textarea>,

----

Description :,
<textarea name="description" cols=50 rows=5></textarea>,

----

Type :,
,

----

Contexte archéologique :,
<textarea name="contexte" cols=50 rows=14></textarea>,

----

Position :,
<textarea name="position" cols=50 rows=1></textarea>,

----

Datation :,



 
</form>

<?php
if (isset($_POST['categorie']))
{
header("Location:base.php");
}

} // fin de l'affichage conditionnel
?>


[index.php?erreur=logout  Déconnexion ]










</html>


et ma page qui traite les données du formulaire (attention, c'est du lourd et probablement pas très propre comme code) :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns ="http://www.w3.org/1999/xhtml">
<head>

<?php

require('GoogleMapAPI.class.php');
$map = new GoogleMapAPI('map');
$map->setAPIKey('ABQIAAAAUuoLhYiMeseo3odTIftNyRSBc7srxbx_EhMHmhITuHjxuUbUahSDMRzmkgMJxh9Y0QKT

5VK0qWbv2w');
$map->setHeight("370");
$map->setWidth("380");
$map->setCenterCoords ('2', '47');
$map->setZoomLevel (5);
$map->setMapType('map');
$map->setControlSize('small');

$map->setMapType('satellite');


require_once('connexion2.php');
session_start(); // On relaye la session
if (session_is_registered("authentification"))
{
// vérification sur la session authentification (la session est elle enregistrée ?)
$login = $_SESSION['login'];
}
else
{
header("Location:index.php?erreur=intru"); // redirection en cas d'echec
}

?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Accessoires de toilette en contexte funéraire dans le sud de
la France au premier âge du Fer</title>
<link rel="stylesheet" type="text/css" href="style.css" />


</head>





Accessoires de toilette en contexte funéraire dans le sud de la France au 

premier âge du Fer

Sujet d'étude de Master 1








  <li>[index.php Accueil]</li>
  <li id="active">[base.php Base de 

données]</li>
  <li>[# Bibliographie]</li>
  <li>[# Contact]</li>










<li>[base.php Afficher tout]</li>
<li>[base.php?selection=rasoir Rasoirs]</li>
<li>[base.php?selection=scalptorium Scalptoria]</li>
<li>[base.php?selection=pince Pinces à 

épiler]</li>
<li>[base.php?selection=curette Curettes]</li>
<li>[base.php?selection=trousse Trousses]</li>
<li>[# Recherche]</li>



<?php 
/*** AFFICHAGE CONDITIONNEL OU REDIRECTION EN FONCTION DU PRIVILEGE ***/
// si l'utilisateur est connecté comme admin ...
if($_SESSION['privilege'] == "admin")
{
}
// fin de l'affichage conditionnel?

// si l'utilisateur est connecté comme simple utilisateur ...
if($_SESSION['privilege'] == "utilisateur")
{ 
// START Gestion des sélections
$where = '';
if(isset($_GET['selection']))
{
$where " WHERE Type_objet 

'".mysql_real_escape_string($_GET['selection'])."' ";
}
else if(isset($_POST['categorie']))
{
$where " WHERE Type_objet 

'".mysql_real_escape_string($_POST['categorie'])."' ";
}
// END Gestion des sélections

mysql_select_db($database_dbprotect, $dbprotect);
$limit	= 1;
$offset = ((isset($_REQUEST['offset']) && $_REQUEST['offset'] > 0) ? 

$_REQUEST['offset'] : 0);
// START Gestion des sélections
$sql_str = sprintf('SELECT SQL_CALC_FOUND_ROWS * FROM Accessoires_de_toilette 

'.$where.' LIMIT '.$offset.', '.$limit.' ');
// END Gestion des sélections

$result = mysql_query($sql_str, $dbprotect) or die(mysql_error());
while ($data = mysql_fetch_assoc($result))
{ ?>






" 

alt="" border="1" /> 



<?php
$adresse = utf8_encode(''.$data['Localisation'].'');
$map->addMarkerByAddress( "$adresse");

$map->printHeaderJS();
$map->printMapJS();
?>

Catégorie :,
<?php echo

''.$data['Type_objet'].' '.$data['Type_objet_suite'].''; ?>,

----

Lieu de découverte :,
<?php echo

''.$data['Lieu_de_decouverte'].''; ?>,

----

Localisation :,
<?php echo

''.$data['Localisation'].''; ?>,

----

Documentation :,
<?php echo

nl2br(''.$data['Documentation'].''); ?>,

----

Matière :,
<?php echo

''.$data['Matiere'].''; ?>,

----

Lieu de

conservation :,
<?php echo

''.$data['Lieu_de_conservation'].''; ?>,

----

Numéro d'inventaire :,
<?php echo

''.$data['Num_inventaire'].''; ?>,

----

Dimensions :,
<?php echo

''.$data['Dimensions'].''; ?>,

----

Description :,
<?php echo

nl2br(''.$data['Description'].''); ?>,

----

Type :,
<?php echo

''.$data['Type'].''; ?>,

----

Contexte archéologique :,
<?php echo

nl2br(''.$data['Contexte_archeo'].''); ?>,

----

Position :,
<?php echo

''.$data['Position'].''; ?>,

----

Datation :,
<?php echo

''.$data['Datation'].''; ?>






<center><?php $map->printMap(); ?></center>






<?php
}
$result	= mysql_query('SELECT FOUND_ROWS() AS total');
$data	= mysql_fetch_assoc($result);

function paging($page, $total_rows, $limit, $offset, $preserved_params = null){
$query = '';
$str_hidden = '';		
if (is_array($preserved_params)) {			
foreach ($preserved_params as $k=>$v) {
if ($k != 'offset') {
$query .= $k.'='.urlencode($v).'&amp;';
$str_hidden .= '';
}
}			
}

if (strpos($page, '?') !== false) {
$page = substr($page, 0, strpos($page, '?'));
}

$nb_pages = ceil($total_rows / $limit);		
$i = 0;
$j = 0;
$idx_page = 0;
while ($i < $total_rows) {
$tab_pages[$j]['id']	= $i;
$tab_pages[$j]['text']	= ($j + 1).' / '.$nb_pages;
if ((int)$offset >= $i) {
$idx_page = $j;
}
$i += $limit;
$j++;
}

$reponse = '<form class="barre-navigation-pages" action="'.$page.'">';
$page .= '?'.$query;
$page_actuelle = $offset + 1;				

if (($offset > 0) && !($offset < ($total_rows - 1) && 

isset($tab_pages[$idx_page + 1]))) {
$reponse .= '
['.$page.'&amp;offset='.($offset - $limit).' Précédent] [ '.$page_actuelle.' / '.$total_rows.' ] 


 ';
}		

else if (($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1])) && 

!($offset > 0)) {
$reponse .= ' [ '.$page_actuelle.' / 

'.$total_rows.' ] ['.$page.'offset='.$tab_pages[$idx_page + 1]['id'].' Suivant]

';
}

else if (($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1])) && 

($offset > 0)) {
$reponse .= '['.$page.'&amp;offset='.($offset - $limit).' Précédent] [ '.$page_actuelle.' / '.$total_rows.' ] 

['.$page.'offset='.$tab_pages[$idx_page + 1]['id'].' Suivant]

';
}

$reponse .= '</form>';
return $reponse;
}
// START Gestion des sélections
$preserved_params = null;
if(isset($_GET['selection']))
{
$preserved_params = 

array('selection'=>mysql_real_escape_string($_GET['selection']));
}
echo paging('base.php', $data['total'], $limit, $offset, $preserved_params);
// END Gestion des sélections
} // fin de l'affichage conditionnel
?>


[index.php?erreur=logout Déconnexion]










</html>


Comme vous avez déjà dû vous en rendre compte, je suis pas très doué en programmation... Enfin si quelqu'un voulait bien m'aider à faire ce moteur de recherche, ça me faciliterai grandement la vie.

J'ai actuellement ma base de donnée pour mon master sur mon pc mais étant donné que je me déplace souvent et que je dois donc fréquemment changer d'ordi, la mettre en ligne serait vraiment pratique.

Autre petit problème que j'ai avec mon code actuel : la base me renvoie bien les enregistrements correspondant à la catégorie demandée, mais lorsque je tente de naviguer pour aller à l'enregistrement suivant, je me retrouve avec tous les enregistrements. Je pense que c'est dû à une erreur au niveau de la navigation mais j'avoue avoir un peu de mal avec ça.

Merci d'avance.
Commenter la réponse de space_dwarf
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 7 juin 2010 à 03:00
0
Utile
A la place de ton :
else if(isset($_POST['categorie'])){
   $where " WHERE Type_objet  '".mysql_real_escape_string($_POST['categorie'])."' ";
}

essaye de mettre :
else{
   $test = false;
   foreach ($_POST as $critere=>$valeur){
      if (($critere!="categorie") and ($valeur!="")){
         $where "Type_objet '".mysql_real_escape_string($_POST['categorie'])."' and ";
         $test = true;
      }
      if (($critere!="Lieu_de_decouverte") and ($valeur!="")){
         $where "Lieu_de_decouverte '".mysql_real_escape_string($_POST['Lieu_de_decouverte'])."' and ";
         $test = true;
      }
tu fais ca pour tous tes criteres
   }
   if ($test==true){
      $where = "WHERE ".substr($where,0,(strlen($where)-5));
   }else{
      $where = "";
   }

J'ai ecrit ce code vite fais ce n'est pas dit que ca marche.


Personne ne peut se permettre de juger l'autre....
Commenter la réponse de cs_sebastien_et_typh
space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 7 juin 2010 à 16:31
0
Utile
Merci pour ton aide, mais pour le moment ça ne fonctionne pas...

J'ai remplacé mon code par le tiens mais je n'ai plus aucun retour d'enregistrement quand je fais une recherche. Lors du premier test j'ai eu une erreur correspondant à une accolade non fermée. Si j'ai bien compris, il manquait l'accolade de fermeture à la dernière ligne du code que tu m'as donné (pour le 1er else).

Bref, en la mettant, plus de message d'erreur, mais rien non plus au niveau enregistrements...
La page base.php se charge mais elle apparait vide. Je n'ai que le menu et le lien de déconnexion qui s'affichent...
Commenter la réponse de space_dwarf
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 7 juin 2010 à 16:53
0
Utile
L'accolade du else je ne l'avais pas mise car tu la ferme a la fin des l'affichage des résultats si j'ai bien lu le code verifie bien ou tu la fermé



Personne ne peut se permettre de juger l'autre....
Commenter la réponse de cs_sebastien_et_typh
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 7 juin 2010 à 17:03
0
Utile
ou alors essaye de voir le contenu de ta clause where



Personne ne peut se permettre de juger l'autre....
Commenter la réponse de cs_sebastien_et_typh
space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 7 juin 2010 à 19:58
0
Utile
En effet, j'avais mis l'accolade de fermeture du else à la suite du code que tu m'avais donné.

En revanche, en la mettant après l'affichage des résultats (donc juste avant l'accolade de fermeture de l'affichage conditionnel), ça ne marche pas mieux.
Au contraire, mes boutons du menu permettant d'afficher les objets suivant une catégorie ne marchent plus non plus...

Merci de chercher des réponses à mon (mes ?) problèmes en tout cas. J'ai appris (et j'apprends encore) à programmer tout seul alors j'ai un peu de mal quand ça se complique.

Mais bon, au moins c'est comme ça qu'on apprend !
Commenter la réponse de space_dwarf
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 7 juin 2010 à 22:19
0
Utile
reprend le code de ta page base.php comme tu me l'as fourni au dessus et a la place de :
else if(isset($_POST['categorie'])){
   $where " WHERE Type_objet  '".mysql_real_escape_string($_POST['categorie'])."' ";
}


tu met :
else{
   $test = false;
   foreach ($_POST as $critere=>$valeur){
      if (($critere=="categorie") and ($valeur!="")){
         $where "Type_objet '".mysql_real_escape_string($_POST['categorie'])."' and ";
         $test = true;
      }
      if (($critere=="lieu") and ($valeur!="")){
         $where $where."Lieu_de_decouverte '".mysql_real_escape_string($_POST['lieu'])."' and ";
         $test = true;
      }
   }
   if ($test==true){
      $where = "WHERE ".substr($where,0,(strlen($where)-5));
   }else{
      $where = "";
   }
}

tu fais des test avec les 2 premiers champs si ca fonctionne tu rajoute les if pour les autres champs.
J'ai testé en local chez moi ca fonctionne très bien sauf lorsqu'il y a 2 résultats a la requête le premier est bon mais pa le 2eme cela viens de ta fonction paging les paramètres $_POST ne son pas transmis a la page suivante j'y travail

Personne ne peut se permettre de juger l'autre....
Commenter la réponse de cs_sebastien_et_typh
space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 8 juin 2010 à 22:04
0
Utile
A présent ça fonctionne (du moins avec les 2 premiers champs, j'ai pas encore testé en en rajoutant). Par contre nouveau problème : il ne me donne que les enregistrements qui correspondent exactement à la recherche.
Un exemple, j'ai un enregistrement correspondant à un rasoir, lieu de découverte : Champ Cros, tumulus 5, sépulture 10.
Si je tape Rasoir dans "catégorie" et "Champ Cros, tumulus 5, sépulture 10" dans lieu de découverte, aucun soucis, il arrive.
Par contre si je tape "rasoir" et "Champ Cros", là je n'ai plus aucun retour...

C'est grave docteur ?

Dans le même genre, j'ai la catégorie "pince à épiler" qui me pose problème. Dans ma base j'ai deux champs : "categorie" et "categorie_suite". je suis obligé de mettre "pince" dans le 1er et "à épiler" dans le second, sinon je n'ai aucun retour avec mon lien de recherche dans le menu. J'ai donc bricolé avec deux champs. Le problème c'est que maintenant, si dans ma page de recherche je tape "pince à épiler", ben j'ai plus de retour non plus...

Une idée ?

En tout cas merci beaucoup pour le temps que tu passes à m'aider
Commenter la réponse de space_dwarf
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 9 juin 2010 à 00:24
0
Utile
Pour ton rasoir ce n'est pas grave il suffit que tu remplace :
$where "Type_objet '".mysql_real_escape_string($_POST['categorie'])."' and ";

par :
$where "Type_objet '%".mysql_real_escape_string($_POST['categorie'])."%' and ";

et dans le fichier base.php tu remplace :
$sql_str = sprintf('SELECT SQL_CALC_FOUND_ROWS * FROM Accessoires_de_toilette 
'.$where.' LIMIT '.$offset.', '.$limit.' ');

par :
$sql_str = 'SELECT SQL_CALC_FOUND_ROWS * FROM Accessoires_de_toilette 
'.$where.' LIMIT '.$offset.', '.$limit.' ';

et dis moi si ca resoud le probleme pour la pince a epiler?


Personne ne peut se permettre de juger l'autre....
Commenter la réponse de cs_sebastien_et_typh
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 9 juin 2010 à 00:25
0
Utile
j'ai oublier de préciser le premier changement a faire tu le fait pour tout les critères de recherches.


Personne ne peut se permettre de juger l'autre....
Commenter la réponse de cs_sebastien_et_typh
space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 9 juin 2010 à 19:55
0
Utile
Pour mon menu de recherche c'est bon, je peux à nouveau sélectionner les pinces à épiler.

Par contre pour la recherche via formulaire je n'ai plus aucun retour. Que je tape un seul critère ou les deux, je n'ai plus de retour.
Commenter la réponse de space_dwarf
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 9 juin 2010 à 20:58
0
Utile
Si tu peux remet moi le contenu de tes 2 fichiers stp car moi en local chez moi tous les retours sont bons même lorsqu'il y a 2 pages la 2eme et bonne aussi



Personne ne peut se permettre de juger l'autre....
Commenter la réponse de cs_sebastien_et_typh
space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 9 juin 2010 à 21:27
0
Utile
Voilà le fichier recherche.php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns= "http://www.w3.org/1999/xhtml">

<head>



<?php



require_once('connexion2.php');

session_start(); // On relaye la session

if (session_is_registered("authentification"))

{

// vérification sur la session authentification (la session est elle enregistrée ?)

$login = $_SESSION['login'];

}

else

{

header("Location:index.php?erreur=intru"); // redirection en cas d'echec

}



?>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Accessoires de toilette en contexte funéraire dans le sud de

la France au premier âge du Fer</title>

<link rel="stylesheet" type="text/css" href="style.css" />





</head>









Accessoires de toilette en contexte funéraire dans le sud de la France au premier âge du Fer


Sujet d'étude de Master 1













  <li>[index.php Accueil]</li>

  <li id="active">[base.php Base de données]</li>

  <li>[# Bibliographie]</li>

  <li>[# Contact]</li>

















<li>[base.php Afficher tout]</li>

<li>[base.php?selection=rasoir Rasoirs]</li>

<li>[base.php?selection=scalptorium Scalptoria]</li>

<li>[base.php?selection=pince Pinces à épiler]</li>

<li>[base.php?selection=curette Curettes]</li>

<li>[base.php?selection=trousse Trousses]</li>

<li>[# Recherche]</li>






<?php 

/*** AFFICHAGE CONDITIONNEL OU REDIRECTION EN FONCTION DU PRIVILEGE ***/

// si l'utilisateur est connecté comme admin ...

if($_SESSION['privilege'] == "admin")

{

}

// fin de l'affichage conditionnel?



// si l'utilisateur est connecté comme simple utilisateur ...

if($_SESSION['privilege'] == "utilisateur")

{?>




<form method="POST" action="base.php">



Catégorie :,

,

----

Lieu de découverte :,

<textarea name="lieu" cols=38 rows=1></textarea>,

----

Localisation :,

<textarea name="localisation" cols=38 rows=1></textarea>,

----

Documentation :,

<textarea name="documentation" cols=50 rows=4></textarea>,

----

Matière :,

,

----

Lieu de conservation :,

<textarea name="conservation" cols=38 rows=1></textarea>,

----

Numéro d'inventaire :,

,

----

Dimensions :,

<textarea name="dimensions" cols=50 rows=1></textarea>,

----

Description :,

<textarea name="description" cols=50 rows=5></textarea>,

----

Type :,

,

----

Contexte archéologique :,

<textarea name="contexte" cols=50 rows=14></textarea>,

----

Position :,

<textarea name="position" cols=50 rows=1></textarea>,

----

Datation :,





 

</form>



<?php

if (isset($_POST['categorie']))

{

header("Location:base.php");

}



} // fin de l'affichage conditionnel

?>




[index.php?erreur=logout  Déconnexion ]
















</html>


Et le fichier base.php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns ="http://www.w3.org/1999/xhtml">

<head>



<?php



require('GoogleMapAPI.class.php');

$map = new GoogleMapAPI('map');

$map->setAPIKey('ABQIAAAAUuoLhYiMeseo3odTIftNyRSBc7srxbx_EhMHmhITuHjxuUbUahSDMRzmkgMJxh9Y0QKT5VK0qWbv2w');

$map->setHeight("370");

$map->setWidth("380");

$map->setCenterCoords ('2', '47');

$map->setZoomLevel (5);

$map->setMapType('map');

$map->setControlSize('small');



$map->setMapType('satellite');





require_once('connexion2.php');

session_start(); // On relaye la session

if (session_is_registered("authentification"))

{

// vérification sur la session authentification (la session est elle enregistrée ?)

$login = $_SESSION['login'];

}

else

{

header("Location:index.php?erreur=intru"); // redirection en cas d'echec

}



?>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Accessoires de toilette en contexte funéraire dans le sud de

la France au premier âge du Fer</title>

<link rel="stylesheet" type="text/css" href="style.css" />





</head>









Accessoires de toilette en contexte funéraire dans le sud de la France au premier âge du Fer


Sujet d'étude de Master 1













  <li>[index.php Accueil]</li>

  <li id="active">[base.php Base de données]</li>

  <li>[# Bibliographie]</li>

  <li>[# Contact]</li>

















<li>[base.php Afficher tout]</li>

<li>[base.php?selection=rasoir Rasoirs]</li>

<li>[base.php?selection=scalptorium Scalptoria]</li>

<li>[base.php?selection=pince Pinces à épiler]</li>

<li>[base.php?selection=curette Curettes]</li>

<li>[base.php?selection=trousse Trousses]</li>

<li>[recherche.php Recherche]</li>






<?php 

/*** AFFICHAGE CONDITIONNEL OU REDIRECTION EN FONCTION DU PRIVILEGE ***/

// si l'utilisateur est connecté comme admin ...

if($_SESSION['privilege'] == "admin")

{

}

// fin de l'affichage conditionnel?



// si l'utilisateur est connecté comme simple utilisateur ...

if($_SESSION['privilege'] == "utilisateur")

{ 

// START Gestion des sélections

$where = '';

if(isset($_GET['selection']))

{

$where " WHERE Type_objet '".mysql_real_escape_string($_GET['selection'])."' ";

}

else{

   $test = false;

   foreach ($_POST as $critere=>$valeur){

      if (($critere=="categorie") and ($valeur!="")){

         $where "Type_objet '%".mysql_real_escape_string($_POST['categorie'])."%' and ";

         $test = true;

      }

      if (($critere=="lieu") and ($valeur!="")){

         $where $where."Lieu_de_decouverte '%".mysql_real_escape_string($_POST['lieu'])."%' and ";

         $test = true;

      }

   }

   if ($test==true){

      $where = "WHERE ".substr($where,0,(strlen($where)-5));

   }else{

      $where = "";

   }

}





// END Gestion des sélections



mysql_select_db($database_dbprotect, $dbprotect);

$limit	= 1;

$offset = ((isset($_REQUEST['offset']) && $_REQUEST['offset'] > 0) ? $_REQUEST['offset'] : 0);

// START Gestion des sélections

$sql_str = 'SELECT SQL_CALC_FOUND_ROWS * FROM Accessoires_de_toilette '.$where.' LIMIT '.$offset.', '.$limit.' ';

// END Gestion des sélections



$result = mysql_query($sql_str, $dbprotect) or die(mysql_error());

while ($data = mysql_fetch_assoc($result))

{ ?>











" alt="" border="1" /> 






<?php

$adresse = utf8_encode(''.$data['Localisation'].'');

$map->addMarkerByAddress( "$adresse");



$map->printHeaderJS();

$map->printMapJS();

?>



Catégorie :,

<?php echo ''.$data['Type_objet'].' '.$data['Type_objet_suite'].''; ?>,

----

Lieu de découverte :,

<?php echo ''.$data['Lieu_de_decouverte'].''; ?>,

----

Localisation :,

<?php echo ''.$data['Localisation'].''; ?>,

----

Documentation :,

<?php echo nl2br(''.$data['Documentation'].''); ?>,

----

Matière :,

<?php echo ''.$data['Matiere'].''; ?>,

----

Lieu de conservation :,

<?php echo ''.$data['Lieu_de_conservation'].''; ?>,

----

Numéro d'inventaire :,

<?php echo ''.$data['Num_inventaire'].''; ?>,

----

Dimensions :,

<?php echo ''.$data['Dimensions'].''; ?>,

----

Description :,

<?php echo nl2br(''.$data['Description'].''); ?>,

----

Type :,

<?php echo ''.$data['Type'].''; ?>,

----

Contexte archéologique :,

<?php echo nl2br(''.$data['Contexte_archeo'].''); ?>,

----

Position :,

<?php echo ''.$data['Position'].''; ?>,

----

Datation :,

<?php echo ''.$data['Datation'].''; ?>










<center><?php $map->printMap(); ?></center>











<?php

}

$result	= mysql_query('SELECT FOUND_ROWS() AS total');

$data	= mysql_fetch_assoc($result);



function paging($page, $total_rows, $limit, $offset, $preserved_params = null){

$query = '';

$str_hidden = '';		

if (is_array($preserved_params)) {			

foreach ($preserved_params as $k=>$v) {

if ($k != 'offset') {

$query .= $k.'='.urlencode($v).'&amp;';

$str_hidden .= '';

}

}			

}



if (strpos($page, '?') !== false) {

$page = substr($page, 0, strpos($page, '?'));

}



$nb_pages = ceil($total_rows / $limit);		

$i = 0;

$j = 0;

$idx_page = 0;

while ($i < $total_rows) {

$tab_pages[$j]['id']	= $i;

$tab_pages[$j]['text']	= ($j + 1).' / '.$nb_pages;

if ((int)$offset >= $i) {

$idx_page = $j;

}

$i += $limit;

$j++;

}



$reponse = '<form class="barre-navigation-pages" action="'.$page.'">';

$page .= '?'.$query;

$page_actuelle = $offset + 1;				



if (($offset > 0) && !($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1]))) {

$reponse .= '
['.$page.'&amp;offset='.($offset - $limit).' Précédent] [ '.$page_actuelle.' / '.$total_rows.' ] 

 ';

}		



else if (($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1])) && !($offset > 0)) {

$reponse .= ' [ '.$page_actuelle.' / '.$total_rows.' ] ['.$page.'offset='.$tab_pages[$idx_page + 1]['id'].' Suivant]

';

}



else if (($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1])) && ($offset > 0)) {

$reponse .= '['.$page.'&amp;offset='.($offset - $limit).' Précédent] [ '.$page_actuelle.' / '.$total_rows.' ] ['.$page.'offset='.$tab_pages[$idx_page + 1]['id'].' Suivant]

';

}



$reponse .= '</form>';

return $reponse;

}

// START Gestion des sélections

$preserved_params = null;

if(isset($_GET['selection']))

{

$preserved_params = array('selection'=>mysql_real_escape_string($_GET['selection']));

}

echo paging('base.php', $data['total'], $limit, $offset, $preserved_params);

// END Gestion des sélections

} // fin de l'affichage conditionnel

?>




[index.php?erreur=logout Déconnexion]
















</html>


J'ai beau regarder, je ne vois pas d'erreur de frappe ou de différence par rapport au code que tu m'as donné. J'ai du mal à comprendre pourquoi ça marche en local chez toi et pas sur mon site...
Commenter la réponse de space_dwarf
space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 9 juin 2010 à 21:28
0
Utile
Ah, on s'est croisé dans les postes.

Je regarde ce que tu m'as mis et je te tiens au courant si ça fonctionne ou pas.
Commenter la réponse de space_dwarf
space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 9 juin 2010 à 22:04
0
Utile
Bon, après avoir analysé ton code, il y avait bien de grosses différences entre le tien et le mien.

La recherche multi-critère fonctionne à présent impeccable. Je me suis aussi inspiré de ton code pour modifier ma fonction de recherche du menu, ce qui me permet de supprimer le champ "catégorie_suite" de ma base.

J'ai repris ton code uniquement avec les deux premiers critères histoire de voir si ça fonctionnait avant de taper la suite, mais la fonction de pagination pose toujours problème chez moi. J'arrive bien au bon enregistrement, mais quand il y en a plusieurs et que je clique pour aller au suivant, je me retrouve à nouveau dans tous les enregistrements.

Voila à présent ma page base.php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>



<?php



require('GoogleMapAPI.class.php');

$map = new GoogleMapAPI('map');

$map->setAPIKey('ABQIAAAAUuoLhYiMeseo3odTIftNyRSBc7srxbx_EhMHmhITuHjxuUbUahSDMRzmkgMJxh9Y0QKT5VK0qWbv2w');

$map->setHeight("370");

$map->setWidth("380");

$map->setCenterCoords ('2', '47');

$map->setZoomLevel (5);

$map->setMapType('map');

$map->setControlSize('small');



$map->setMapType('satellite');





require_once('connexion2.php');

session_start(); // On relaye la session

if (session_is_registered("authentification"))

{

// vérification sur la session authentification (la session est elle enregistrée ?)

$login = $_SESSION['login'];

}

else

{

header("Location:index.php?erreur=intru"); // redirection en cas d'echec

}



?>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Accessoires de toilette en contexte funéraire dans le sud de

la France au premier âge du Fer</title>

<link rel="stylesheet" type="text/css" href="style.css" />





</head>









Accessoires de toilette en contexte funéraire dans le sud de la France au premier âge du Fer


Sujet d'étude de Master 1













  <li>[index.php Accueil]</li>

  <li id="active">[base.php Base de données]</li>

  <li>[# Bibliographie]</li>

  <li>[# Contact]</li>

















<li>[base.php Afficher tout]</li>

<li>[base.php?selection=rasoir Rasoirs]</li>

<li>[base.php?selection=scalptorium Scalptoria]</li>

<li>[base.php?selection=pince Pinces à épiler]</li>

<li>[base.php?selection=curette Curettes]</li>

<li>[base.php?selection=trousse Trousses]</li>

<li>[recherche.php Recherche]</li>






<?php 

/*** AFFICHAGE CONDITIONNEL OU REDIRECTION EN FONCTION DU PRIVILEGE ***/

// si l'utilisateur est connecté comme admin ...

if($_SESSION['privilege'] == "admin")

{

}

// fin de l'affichage conditionnel?



// si l'utilisateur est connecté comme simple utilisateur ...

if($_SESSION['privilege'] == "utilisateur")

{ 

// START Gestion des sélections

$where = '';

if(isset($_GET['selection']))

{

$where = " WHERE Type_objet LIKE '%".mysql_real_escape_string($_GET['selection'])."%' ";

}

else{

   $test = false;

   foreach ($_POST as $critere=>$valeur){

      if (($critere=="categorie") and ($valeur!="")){

         $where = $where."Type_objet LIKE '%".mysql_real_escape_string($_POST['categorie'])."%' and ";

         $test = true;

      }

      if (($critere=="lieu") and ($valeur!="")){

         $where = $where."Lieu_de_decouverte LIKE '%".mysql_real_escape_string($_POST['lieu'])."%' and ";

         $test = true;

      }

   }

   if ($test==true){

      $where = "WHERE ".substr($where,0,(strlen($where)-5));

   }else{

      $where = "";

   }

}





// END Gestion des sélections



mysql_select_db($database_dbprotect, $dbprotect);

$limit	= 1;

$offset = ((isset($_REQUEST['offset']) && $_REQUEST['offset'] > 0) ? $_REQUEST['offset'] : 0);

// START Gestion des sélections

$sql_str = 'SELECT SQL_CALC_FOUND_ROWS * FROM Accessoires_de_toilette '.$where.' LIMIT '.$offset.', '.$limit.' ';

// END Gestion des sélections



$result = mysql_query($sql_str, $dbprotect) or die(mysql_error());

while ($data = mysql_fetch_assoc($result))

{ ?>











" alt="" border="1" /> 






<?php

$adresse = utf8_encode(''.$data['Localisation'].'');

$map->addMarkerByAddress( "$adresse");



$map->printHeaderJS();

$map->printMapJS();

?>



Catégorie :,

<?php echo ''.$data['Type_objet'].''; ?>,

----

Lieu de découverte :,

<?php echo ''.$data['Lieu_de_decouverte'].''; ?>,

----

Localisation :,

<?php echo ''.$data['Localisation'].''; ?>,

----

Documentation :,

<?php echo nl2br(''.$data['Documentation'].''); ?>,

----

Matière :,

<?php echo ''.$data['Matiere'].''; ?>,

----

Lieu de conservation :,

<?php echo ''.$data['Lieu_de_conservation'].''; ?>,

----

Numéro d'inventaire :,

<?php echo ''.$data['Num_inventaire'].''; ?>,

----

Dimensions :,

<?php echo ''.$data['Dimensions'].''; ?>,

----

Description :,

<?php echo nl2br(''.$data['Description'].''); ?>,

----

Type :,

<?php echo ''.$data['Type'].''; ?>,

----

Contexte archéologique :,

<?php echo nl2br(''.$data['Contexte_archeo'].''); ?>,

----

Position :,

<?php echo ''.$data['Position'].''; ?>,

----

Datation :,

<?php echo ''.$data['Datation'].''; ?>










<center><?php $map->printMap(); ?></center>











<?php

}

$result	= mysql_query('SELECT FOUND_ROWS() AS total');

$data	= mysql_fetch_assoc($result);



function paging($page, $total_rows, $limit, $offset, $preserved_params = null){

$query = '';

$str_hidden = '';		

if (is_array($preserved_params)) {			

foreach ($preserved_params as $k=>$v) {

if ($k != 'offset') {

$query .= $k.'='.urlencode($v).'&amp;';

$str_hidden .= '';

}

}			

}



if (strpos($page, '?') !== false) {

$page = substr($page, 0, strpos($page, '?'));

}



$nb_pages = ceil($total_rows / $limit);		

$i = 0;

$j = 0;

$idx_page = 0;

while ($i < $total_rows) {

$tab_pages[$j]['id']	= $i;

$tab_pages[$j]['text']	= ($j + 1).' / '.$nb_pages;

if ((int)$offset >= $i) {

$idx_page = $j;

}

$i += $limit;

$j++;

}



$reponse = '<form class="barre-navigation-pages" action="'.$page.'">';

$page .= '?'.$query;

$page_actuelle = $offset + 1;				



if (($offset > 0) && !($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1]))) {

$reponse .= '
['.$page.'&amp;offset='.($offset - $limit).' Précédent] [ '.$page_actuelle.' / '.$total_rows.' ] 

 ';

}		



else if (($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1])) && !($offset > 0)) {

$reponse .= ' [ '.$page_actuelle.' / '.$total_rows.' ] ['.$page.'offset='.$tab_pages[$idx_page + 1]['id'].' Suivant]

';

}



else if (($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1])) && ($offset > 0)) {

$reponse .= '['.$page.'&amp;offset='.($offset - $limit).' Précédent] [ '.$page_actuelle.' / '.$total_rows.' ] ['.$page.'offset='.$tab_pages[$idx_page + 1]['id'].' Suivant]

';

}



$reponse .= '</form>';

return $reponse;

}

// START Gestion des sélections

$preserved_params = null;

if(isset($_GET['selection']))

{

$preserved_params = array('selection'=>mysql_real_escape_string($_GET['selection']));

}
else
{
$preserved_params = array('categorie'=>mysql_real_escape_string($_POST['categorie']),'lieu'=>mysql_real_escape_string($_POST['lieu']));
}

echo paging('base.php', $data['total'], $limit, $offset, $preserved_params);

// END Gestion des sélections

} // fin de l'affichage conditionnel

?>




[index.php?erreur=logout Déconnexion]
















</html>
Commenter la réponse de space_dwarf
cs_sebastien_et_typh 289 Messages postés jeudi 5 octobre 2006Date d'inscription 11 juin 2010 Dernière intervention - 9 juin 2010 à 22:15
0
Utile
l'erreur pour la pagination vient de cette ligne :
$preserved_params = array('categorie'=>mysql_real_escape_string($_POST['categorie']),'lieu'=>mysql_real_escape_string($_POST['lieu']));

il faut que tu mette :
$preserved_params = array('categorie'=>mysql_real_escape_string($_GET['categorie']),'lieu'=>mysql_real_escape_string($_GET['lieu']));



Personne ne peut se permettre de juger l'autre....
Commenter la réponse de cs_sebastien_et_typh
space_dwarf 14 Messages postés jeudi 1 mars 2007Date d'inscription 10 juin 2010 Dernière intervention - 9 juin 2010 à 23:40
0
Utile
Je viens de tester en remplaçant la ligne par celle que tu m'as donné mais le problème de pagination persiste...
Commenter la réponse de space_dwarf

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Recherche avec plusieurs champs de formulaire sur base mysql - page 2