PHP / MySql - Problème Recherche avancée - Besoin d'help!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : PHP / MySql - Problème Recherche avancée - Besoin d'help!

Re: PHP / MySql - Problème Recherche avancée - Besoin d'help

par musicplease2 » 31 mai 2012, 18:09

Merci pour votre réponse.
Je me suis permis de changer les variables (et le nom des colonnes mysql dans ma table) dans ce tuto mais rien à faire, il semble que les variables ne soient pas définies à la base. Voici le code :

(A priori il n'y a que quelques lignes à rajouter...)


//--- connection à la bd
<?php 
session_start();
require_once("local.php"); 
?>
<?php 
function coche($arg){
	global $couleur;	
	$i=0;
	while($couleur[$i]){
			if($couleur[$i]==$arg){return TRUE;
			break;
			}	
	$i++;
	}
}

//--- fonction pourles limites d'affichage
function nbp($total,$increment){
$reste=$total % $increment;
$total=$total-$reste;

$j=0;
for($i=0;$i<=$total; $i=$i+$increment){
$j++;
}
if($reste==0){$j--;}
return $j;
}

//-----------------



/* === CODE A CHANGER =========
$flag=0;					
if(isset($_POST['submit'])){
extract($_POST);
 $flag=1;
=====================pour celui ci-dessous =========*/

if(!empty($_POST)){
$_SESSION['tab']=$_POST;

$tab=$_POST;
extract($tab); 

$page=1;
}



if($_GET['flag']==1){
extract($_SESSION['tab']);
}

//==========================
 
	
$i=0;
	if($prix>0) {
		
	
		$choix[$i++] = "prix ";
	switch($prix){
	
		case 1:
		$choix[$i++] = "< 1000";		
		break;
		
		case 2:
		$choix[$i++] = ">= 1000 AND prix <=2000";
		break;
		
		case 3:
		$choix[$i++] = ">=2000";
		break;
		}
	}	

	if($velo){
		$choix[$i++] = "velo =";
		$choix[$i++] = $velo;				
	}
	
	if($voiture){
		$choix[$i++] = "voiture =";
		$choix[$i++] = $voiture;				
	}

   
   
   if($etat){
   	$choix[$i++] = "etat = '";
   	$choix[$i++] = $etat."' ";
   
   }
   
        
   
    if($couleur) {
    
    $nom=$i++;
    $val=$i++;
    
    
    if(count($couleur) >1){
    	$choix[$nom] = " (couleur= '";}
    else{ $choix[$nom] = "couleur= '";}
       
    
        $j=0;
		$condition="";
		$choix[$val]="";

		
		while($couleur[$j]){
			if($j>0){$condition = "' OR couleur = '";}

		$choix[$val].=$condition.$couleur[$j];

		$j++;
		}
		$choix[$val].="'  ";
      if(count($couleur) >1){$choix[$val].=") ";}
       
    }


$critere = $choix[0].$choix[1]." ";


for($j=2;$j<$i;$j+=2){
            $critere .=" AND ".$choix[$j].$choix[$j+1]." ";            	
	}


if($i>0){


//================ limite =======================

$sql=mysql_query("SELECT id FROM csv  where $critere ", $connexion);
$nb_de_lignes=mysql_num_rows($sql);
$nb_de_pages=nbp($nb_de_lignes, $increment); 

//-- pour verification uniquement - a desactiver
//echo "nb ligne $nb_de_lignes <br>";
//echo "nb page $nb_de_pages <br>";
//----------------------------------------------

if($_GET['page']){ //test si un lien a été cliqué
$flagpage=1; // on met le drapeau à 1
$page=$_GET['page'];
}

else{$page=1;}


$debut= ($page-1)*$increment +1;


$depart_boucle=1;

if(	$max_pages_vues>$nb_de_pages){$max_pages_vues=$nb_de_pages;}


$fin_boucle=$max_pages_vues;

if($flagpage==1){
$depart_boucle=$page-intval($max_pages_vues/2);
$fin_boucle=$page+intval($max_pages_vues/2);

	if($fin_boucle>$nb_de_pages){
	$fin_boucle=$nb_de_pages;
	$depart_boucle=$fin_boucle-$max_pages_vues;
	}

	if($depart_boucle<=0){
	$depart_boucle=1;
	$fin_boucle=$depart_boucle+$max_pages_vues;
	}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<meta http-equiv="content-type" content="text/html;charset=utf-8">
		<title>Formulaire de recherche à critères multiples par Milan.</title>
		<style type="text/css" media="screen"><!--
body { font-size: 12px; font-family: Verdana; margin: 10px; }
td { font-size: 12px; font-family: Verdana; padding: 1px 3px; }
--></style>
	</head>
	<body>
	<tr>
	<td>
		<form class="cadre" method="post">
		  <p><input type="hidden" name="flag" value="1"></p>
						<p>prix <select name="prix" size="1">
								<option value="0">choisir</option>
								<option <?php if($flag==1 && $prix==1){echo " selected ";}?> value="1">moins de 1000</option>
								<option <?php if($flag==1 && $prix==2){echo " selected ";}?> value="2">de 1000 à 2000</option>
								<option <?php if($flag==1 && $prix==3){echo " selected ";}?> value="3">plus de 2000</option>
							</select></p>
						<p>velo <input type="checkbox" name="velo" value="1" <?php if($flag==1){if(isset($velo)){echo " checked";}} ?>> voiture <input type="checkbox" name="voiture" value="1" <?php if($flag==1){if(isset($voiture)){echo " checked";}} ?>></p>
						<p>Neuf <input type="radio" name="etat" value="neuf" <?php if($flag==1){if($etat=="neuf"){echo " checked";}} ?>> occasion <input type="radio" name="etat" value="occasion" <?php if($flag==1){if($etat=="occasion"){echo " checked";}} ?>></p>
						<p>Couleurs :</p>
						<table width="252" border="0" cellspacing="2" cellpadding="0">
							<tr>
								<td><input type="checkbox" name="couleur[]" value="blanc" <?php if($flag==1){if(coche("blanc")){echo " checked";}}?>></td>
								<td>
									<p>blanc</p>
								</td>
								<td><input type="checkbox" name="couleur[]" value="rouge" <?php if($flag==1){if(coche("rouge")){echo " checked";}}?>></td>
								<td>
									<p>rouge</p>
								</td>
								<td><input type="checkbox" name="couleur[]" value="bleu" <?php if($flag==1){if(coche("bleu")){echo " checked";}}?>></td>
								<td>
									<p>bleu</p>
								</td>
							</tr>
							<tr>
								<td><input type="checkbox" name="couleur[]" value="noir" <?php if($flag==1){if(coche("noir")){echo " checked";}}?>></td>
								<td>
									<p>noir</p>
								</td>
								<td><input type="checkbox" name="couleur[]" value="vert" <?php if($flag==1){if(coche("vert")){echo " checked";}}?>></td>
								<td>
									<p>vert</p>
								</td>
								<td><input type="checkbox" name="couleur[]" value="orange" <?php if($flag==1){if(coche("orange")){echo " checked";}}?>></td>
								<td>
									<p>orange</p>
								</td>
							</tr>
						</table>
						<p>Nb de résultats à afficher par page <select name="increment" size="1">
								<option <?php if($flag==1 && $increment==5){echo " selected ";}?> value="5">5</option>
								<option <?php if($flag==1 && $increment==10){echo " selected ";}?> value="10">10</option>
								<option <?php if($flag==1 && $increment==15){echo " selected ";}?> value="15">15</option>
								<option <?php if($flag==1 && $increment==20){echo " selected ";}?> value="20">20</option>
							</select></p>
						<p>Nb de liens de page visibles <select name="max_pages_vues" size="1">
								<option <?php if($flag==1 && $max_pages_vues==5){echo " selected ";}?> value="5">5</option>
								<option <?php if($flag==1 && $max_pages_vues==10){echo " selected ";}?> value="10">10</option>
								<option <?php if($flag==1 && $max_pages_vues==15){echo " selected ";}?> value="15">15</option>
								<option <?php if($flag==1 && $max_pages_vues==20){echo " selected ";}?> value="20">20</option>
							</select></p>
						<p><input type="submit" name="submit"></p>
						<p></p>
					</form>
					<p>
<?php 
if($i>0){
echo "<p class='cadre'>";
if(!$nb_de_lignes){echo "Aucun résultat - Choissisez d'autres critères";
exit;
}
echo "nb réponses trouvée $nb_de_lignes <br>";
echo "nb de pages $nb_de_pages <br>";
//echo "critere $critere <br>";
//echo "inc $increment --- debut $debut <hr>";
$sql=mysql_query("SELECT * FROM csv  where $critere LIMIT $debut, $increment ", $connexion);
?>
<?php 
//------- affichage du lien debut
if($flagpage==1 && $page > $max_pages_vues){?><a href="testlimit.php?page=1&flag=1"><strong>Debut</strong></a> | <?php } ?>
<?php 
//------- affichage du lien page précedente
if($flagpage==1 && $page > 1){ ?><a href="testlimit.php?page=<?php echo $page-1 ?>&flag=1"><strong>Prec </strong></a><?php } ?>
<?php				
//-- compte et affiche les pages selon la variable $max_pages_vues
for($i=$depart_boucle;$i<=$fin_boucle;$i++){?><a href="testlimit.php?page=<?php echo $i ?>&flag=1"><?php 
if($flagpage==1 && $i == $page ){echo "<b> $i</b>";}// met en gras le lien selectionne
else echo $i; ?></a>| <?php }
if($fin_boucle < $nb_de_pages){echo " ...";} // ajoute 3 points tant que la plage affichee n'atteint pas la dernière page 
?>
<?php 
//----- page suivante - idem que precedente
if($flagpage==1 && $page < $nb_de_pages){?><a href="testlimit.php?page=<?php echo $page+1 ?>&flag=1"><strong>Suiv</strong></a> <?php } ?><?php 
//-------fin idem que debut
if($flagpage==1 && $page < $nb_de_pages){?><a href="testlimit.php?page=<?php echo $nb_de_pages; ?>&flag=1">| <strong>Fin</strong></a> | <?php } ?><br />
						<br />
					</p>
					<table width="284" border="1" cellspacing="2" cellpadding="0">
						<tr>
							<td>prix</td>
							<td>velo</td>
							<td>voiture</td>
							<td>etat</td>
							<td>couleur</td>
						</tr>
						<?php while($res=mysql_fetch_object($sql)){?>
						<tr>
							<td><?php echo $res->prix ?></td>
							<td><?php echo $res->velo ?></td>
							<td><?php echo $res->voiture ?></td>
							<td><?php echo $res->etat ?></td>
							<td><?php echo $res->couleur ?></td>
						</tr>
						<?php } ?>
					</table>
					</p><?php } ?>
<p></p>
[/size]

Re: PHP / MySql - Problème Recherche avancée - Besoin d'help

par kny » 31 mai 2012, 14:00

Bonjour,

Tes messages d'erreurs soulignent le fait que deux variables (région et categorie) n'existent pas.
En regardant le script php que tu as mis en lien, je n'ai trouvé aucune trace de ces variables, je présume donc qu'il s'agit de variables que tu as ajouté.
Aussi, vérifie donc si tes variables sont déclarées. Et éventuellement, postes ton code php ici (par le biais des balises prévues à cet effet).

Re: PHP / MySql - Problème Recherche avancée - Besoin d'help

par musicplease2 » 30 mai 2012, 18:50

Rebonjour et merci pour votre réponse.

J'arrive maintenant à afficher une page détails.php?id=x qui récupère les données du contact sélectionné.
Cependant je n'arrive toujours pas à réparer le script du tuto inclut dans mon premier post.

Mon problème :
Notice: Undefined variable: categorie
Notice: Undefined variable: region

Comment solutionner la chose?


En essayant une autre méthode, j'ai réussi à afficher un menu déroulant qui va récupérer les catégories dans ma bdd mais je n'arrive pas à lui faire afficher les catégories corresctement, je voudrais 1 ligne par catégorie et mon script va récupérer et affiche les catégories de toutes les entrées...
Je suis un peu perdu la dessus...

Merci d'avance...

Re: PHP / MySql - Problème Recherche avancée - Besoin d'help

par kny » 30 mai 2012, 15:51

Tu peux utiliser mysql_fetch_assoc.
A utiliser avant de fermer la connexion, c'est à dire avant le mysql_close();
// $row correspond à chaque ligne récupérée par ta requête dans un tableau associatif (fetch assoc)
while ($row = mysql_fetch_assoc($requete)) {
   // on écrit ainsi les données relatives aux clés (elles correspondent aux champs dans tes tables)
   // ici ce ne sont que des exemples, à toi d'adapter.
   echo $row["userid"];
   echo $row["fullname"];
   echo $row["userstatus"];
}

Re: PHP / MySql - Problème Recherche avancée - Besoin d'help

par musicplease2 » 29 mai 2012, 22:33

Je pense m'approcher du but... mais je me demande comment afficher tout ce que la requête va récupèrer sur la ligne de ma table...

Bon voici pour la récupération :
<?php
if(isset($_GET['id']) AND ctype_digit($_GET['id']))
{
     $requete = mysql_query('SELECT * FROM table WHERE id='.$_GET['id']) OR die('erreur');
     mysql_close();

     if(mysql_num_rows($requete) === 0)
     {
          exit;
     }
?>
Dois je rajouter ceci ?
     $r = mysql_fetch_object($requete); 
et comment afficher les différentes variables récupérées par la requête?

Re: PHP / MySql - Problème Recherche avancée - Besoin d'help

par musicplease2 » 29 mai 2012, 22:15

Bon, pour la seconde partie je pense avoir cerné

Je compte afficher les résultats sous forme de tableaux : $nom / $image / <a href="details.php?id=$id>"en savoir plus"</a>
Cela va t il utiliser le $id correspondant au résultat visé?
par exemple si id=2, ma page details.php va t elle s afficher comme cela : details.php?id=2

Pour charger les données de la ligne id=2 dans ma page details.php, je dois utiliser la fonction GET...
Puis je écrire :
GET[id]=$critere
et enchaîner sur :
select * from table WHERE id=$critere


Suis sur la bonne voie?

PHP / MySql - Problème Recherche avancée - Besoin d'help!

par musicplease2 » 29 mai 2012, 20:19

Bonjour,

Je cherche un peu d'aide quant au codage d'une des pages de mon site orienté musique.

Je vous explique :

J'ai une base de données regroupant des contacts musicaux, je souhaite créer une page de recherche permettant aux visiteurs d'afficher une liste de ces contacts selon certains critères :

- deux menus déroulants, l'un permettant de sélectionner une région de France (ou "Toute la France") et l'autre permettant de sélectionner la catégorie (artiste, salle de spectacle, label, etc ou "Toutes les Catégories")

J'ai trouvé un super tuto qui fonctionne à 95%, il inclut aussi une pagination avec un nombre de résultats max par page... seulement il existe quelques erreurs que je n'arrive pas à résoudre...
Voici la page avec le fichier php et le sql :
http://milan2.free.fr/PHP/formulaireRec ... lusion.php
quelqu'un pourrait il m'aider à corriger ces 2 ou 3 pts?
Je supprimerai les boutons et changerai les informations pour que cela colle avec ce que je veux mais suis je dans la bonne voie?
Quelqu'un aurait il l'amabilité d'effectuer la correction nécessaire au bon fonctionnement de ce script?

Deuxième gros truc à gérer pour moi :
Je souhaiterai pouvoir ouvrir une seconde page lors du clic sur le nom d'un des résultats, en conservant l'ID de la ligne venant de ma table sql pour me permettre d'afficher les informations relatives au contact sélectionné dans une mise en page similaire pour tous les contacts.
Première question : la mise en place de ce code est ultra simple, moyennement difficile ou quasi-impossible?
Seconde question : il n'y a pas un petit tuto la dessus qui traîne? (rien trouvé pour ma part)
Troisième question : Faut il beaucoup modifier le premier code pour avoir cette seconde page ou c'est juste une question de variable à réinserer via l'URL?

Merci par avance pour vos réponses,
David.