Probleme php sql

Fermé
smiling-bandit - 11 juin 2012 à 14:39
 smiling-bandit - 13 juin 2012 à 09:31
Bonjour, depuis une semaine déjà je galère sur un code php-sql et j'avoue que je perds un peu courage. En fait je cherche à créer un bout de code qui me permettrait de "filtrer" des données sql.
Je m'explique. Grâce a l'api google j'ai pu afficher une carte google map sur un site. J'y ai lié une base de données composée de deux table, "map" et "categorie". Mes points s'affichent sans problèmes mais maintenant je souhaiterais ne voir qu'une partie des points. Quelqu'un aurait un exemple type à me soumettre ou quelque chose qui pourriat m'aider s'il vous plait, j'avoue que je désespère un peu là ^^
A voir également:

9 réponses

tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
Modifié par tryan44 le 12/06/2012 à 16:56
Voici comment je procéderai (ce n'est peut être pas la meilleurs solution et je ne sais pas si ça fonctionne) :
<?php 
//La page est rechargé 
if(isset($_POST["categorie"])){ 
//on sélectionne tout ce qui correspond à la catégorie envoyé par POST 
$PointsMaps = mysql_query('SELECT * FROM map WHERE cat_id = '.$_POST['categorie'].''); 
} 
else{ 
//La page n'est pas rechargé, on sélectionne tout par défaut 
$PointsMaps = mysql_query('SELECT * FROM map'); 
} 
//on boucle 
while ($donnees = mysql_fetch_array($PointsMaps))  
{  
$nom = stripslashes($donnees['nom']);  
$prenom = stripslashes($donnees['prenom']);  
$adresse = stripslashes($donnees['adresse']);  
$ville = stripslashes($donnees['ville']);  
$pays = stripslashes($donnees['pays']);  
$numero = stripslashes($donnees['numero']);  
$mail = stripslashes($donnees['mail']);  
$info = stripslashes($donnees['info']);  
$horaire = stripslashes($donnees['horaire']);  
$cat1 = stripslashes($donnees['cat1']);  
$cat2 = stripslashes($donnees['cat2']);  
$cat3 = stripslashes($donnees['cat3']);  
$cat4 = stripslashes($donnees['cat4']);  

$map->disableDirections();  
$map->addMarkerByAddress($adresse.' '.$ville.' '.$pays ,$adresse ,$adresse.' '.$ville .'<br>'.$info.'<br>'.$numero.'<br>'.$mail.'<br>'.$horaire, $adresse);  

}  
?> 
<!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" xml:lang="fr" >  

<head>  
<title>Carte </title>  
<?php $map->printHeaderJS(); ?>  
<?php $map->printMapJS(); ?>  
</head>  

<body onload="onLoad();">  

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

<form name="formulaire" method="POST"> 
<!-- à la sélection du formulaire on recharge la page--> 
<select name="categorie" onchange="javascript:submit(this)"> 
<option value="0">Choix</option> 
<?php 
//on sort les catéorie 
$query = mysql_query("SELECT cat_id,catNom FROM categorie");  
while($categorie = mysql_fetch_array($query)) 
 {  
  echo '<option value=\''.$categorie['cat_id'].'\'>'.$categorie['catNom'].'</option>'; 
 } 
?> 
</select> 
</form> 

</body>  

</html> 

Une question stupide engendre une réponse stupide!
Une question mal formulé engendre une réponse aléatoire!
1
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
11 juin 2012 à 20:50
Salut,

Cette partie de point doit s'afficher sous quelle conditions?
0
smiling-bandit
12 juin 2012 à 11:01
Ces points doivent s'afficher sous la condition de la sélection du nom de catégorie dans un menu déroulant.
En gros, j'ai un menu de 4 entrées différentes, en fonction du choix fait (catégorie 1, catégorie 2, catégorie 3 ou catégorie 4) je voudrais que les points ayant pour catégorie la "catégorie 1" s'affichent, mais pas les autres. C'est ni plus ni moins qu'un filtrage par catégorie comme sur beacoup de sites (e-bay, leboncoin etc...) mais c'est plus simple à dire qu'à faire.
0
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
12 juin 2012 à 13:01
Dans l'hypothèse que la table qui contient les données des points possède un champ qui contient les numéros des catégories associées, il suffit de faire une simple condition avec la clause "WHERE" :
SELECT * FROM ma_table WHERE id_categorie = $categorie

ou "$categorie" correspond à la sélection du menu déroulant (POST ou GET).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
c'est justement ce que je fais,mais je pense qu'il y a un souci quelque part, j'utilise la méthode "GET" pour mon formulaire de choix, la selection se fait, mais rien ne change dans mes marqueurs. Voici le code que je fais :


$PointsMaps = mysql_query('SELECT * FROM map'); --> création de mes points

while ($donnees = mysql_fetch_array($PointsMaps))
{
$nom = stripslashes($donnees['nom']);
$prenom = stripslashes($donnees['prenom']);
$adresse = stripslashes($donnees['adresse']);
$ville = stripslashes($donnees['ville']);
$pays = stripslashes($donnees['pays']);
$numero = stripslashes($donnees['numero']);
$mail = stripslashes($donnees['mail']);
$info = stripslashes($donnees['info']);
$horaire = stripslashes($donnees['horaire']);
$cat1 = stripslashes($donnees['cat1']);
$cat2 = stripslashes($donnees['cat2']);
$cat3 = stripslashes($donnees['cat3']);
$cat4 = stripslashes($donnees['cat4']);

$map->disableDirections();
$map->addMarkerByAddress($adresse.' '.$ville.' '.$pays ,$adresse ,$adresse.' '.$ville .'<br>'.$info.'<br>'.$numero.'<br>'.$mail.'<br>'.$horaire, $adresse);

}
?>

<!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" xml:lang="fr" >

<head>
<title>Carte </title>
<?php $map->printHeaderJS(); ?>
<?php $map->printMapJS(); ?>
</head>

<body onload="onLoad();">
<?php $map->printMap();?>

<form method="GET" action="" > ---> ma méthode GET
trier par :
<?php

$query = mysql_query("SELECT cat_id,catNom FROM categorie");
$id = stripslashes($donnees['cat_id']);

echo('<select name="categorie">');
if($produit=="")
{
echo('<option value="\' . $cat_id' . '">< Choisir ></option>');
}
else
{
echo('<option value="\' . $cat_id' . '">'.'</option>');
}
while ($ligne1=mysql_fetch_object($query))
{
//la concatenation des champs se fait ici
echo('<option VALUE=">'.$ligne1->cat_id .'">' . $ligne1->catNom. $ligne1->NULL.'</option>');
}
echo('</select>');



/*if ($ligne1 = $id) ---> Partie d'essaie mais pas concluante
{
$requete = mysql_query("SELECT * from map WHERE cat1 = $ligne1 OR cat2 = $ligne1 OR cat3= $ligne1 OR cat4 = $ligne1 OR cat5 = $ligne1");
$query = mysql_result($requete);
echo $query;
}*/



mysql_close();
?>

<?php $SQL='SELECT * FROM map WHERE cat_id = '.$_GET['cat_id'];?> ---> Ma requête avec le WHERE




<input type="submit" name="Envoyer" name="envoyer">
</form>
</body>

</html>
0
tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 219
12 juin 2012 à 14:14
Je ne suis pas un fan de votre code ( je code à l'ancienne :)).
<?php $SQL='SELECT * FROM map WHERE cat_id = '.$_GET['cat_id'];?>

Vous ne récupérez pas la valeur du formulaire la ou je me plante?
ça ne serait pas plutôt $_GET['categorie']?
0
smiling-bandit
12 juin 2012 à 14:26
Merci de votre réponse rapide, mais lorsque je change mon $_GET et que je met ['categorie'] le navigateur me dit :

Notice: Undefined index: categorie in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\carte\map2.php on line 91

ça c'est normal parce que je ne sélectionne pas de catégorie. Une fois qu'un choix est fait, l'erreur disparaît, mais le filtrage ne s'applique pas. Si vous avez d'autres suggestion je suis à votre écoute parce-que cela fais déjà 4 forum où je poste mon problème et personnes n'a su m'aider, pourtant dans l'idée j'ai pas l'impression de faire quelque chose de compliqué, ebay le propose, leboncoin le propose (par region ou genre d'objet), je dois avoir un problème dans la rédaction de la fonction de filtrage mais je ne sais pas où ^^
0
smiling-bandit
13 juin 2012 à 08:25
Bonjour et merci pour votre aide, votre code à l'air de fonctionner, j'ai tout ce qu'il faut après avoir ajouté ma connection à la base de données avec mysql_connect et mysql_db, mais malheureusement il reste une erreur à partir du moment où je fais le choix de catéorie.
L'erreur c'est :
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\carte\carte_ccm.php on line 32

la ligne 32 c'est : while ($donnees = mysql_fetch_array($PointsMaps))

J'ai déjà eu ce souci mais j'avais réussi à le régler, mais la question c'est "comment j'ai fait déjà" ^^
Si vous pouviez me donner un dernier coup de main et régler ce soucis, mon projet serait enfin bouclé et je pourrais le mettre en ligne.
Merci encore et à très bientôt.
0
smiling-bandit
13 juin 2012 à 09:31
Problème résolue, en fait, dans votre code vous aviez marqué :

if(isset($_POST["categorie"]))
{
//on sélectionne tout ce qui correspond à la catégorie envoyé par POST
$PointsMaps = mysql_query('SELECT * FROM map WHERE cat_id = '.$_POST['categorie'].' )
}

En réalité il aurait fallu écrire à la place de cat_id --> "cat1", "cat2", "cat3", "cat4" et "cat5" .
Dans la table map je n'avais pas d'entrée "cat_id", celle là était dans la table categorie.

Enfin ça marche, merci encore de votre aide utiliser le javascript était une bonne idée et franchement ça à beaucoup alléger mes lignes de codes à rallonge pour la sélection de catégorie ^^

Merci du temps que vous m'avez accordé, bonne continuation et peut-être à bientôt si j'ai d'autres problèmes en php et sql ;)
0