Problème d'affichage de résultats dans recherche par 4 listes déroulantes

Eléphanteau du PHP | 18 Messages

28 mars 2008, 12:52

En effet ca n'a pas de jambe ;)

Le problème est que cela ne s'affiche pas quand l'on sélectionne que l'un ou l'autre. Je viens de remarquer aussi que quand je choisis tous les 4 critères comme ils sont dans la BDD cela ne s'affiche plus non plus ...

J'ai donc 5 BDD : 4 pour les listes déroulantes, et 1 qui contient toutes les données.

La table secteur (les 4 sont de structure et contenu identique)

`id_secteur` int(5) NOT NULL default '0',
`secteur` varchar(250) NOT NULL default ''
TYPE=MyISAM;

Contenu de la table `secteur`

INSERT INTO `secteur` VALUES (0, 'Zone géographique ...');
INSERT INTO `secteur` VALUES (1, 'Centre Ville');
INSERT INTO `secteur` VALUES (2, 'Sud');
INSERT INTO `secteur` VALUES (3, 'Nord');
INSERT INTO `secteur` VALUES (4, 'Est');
INSERT INTO `secteur` VALUES (5, 'Ouest');
INSERT INTO `secteur` VALUES (6, 'Alentours');
INSERT INTO `secteur` VALUES (7, 'Alentours 2');


La table principale

structure
`id` int(4) NOT NULL auto_increment,
`budget_id_budget` int(5) NOT NULL default '0',
`etat_id_etat` int(5) NOT NULL default '0',
`secteur_id_secteur` int(5) NOT NULL default '0',
`type_id_type` int(5) NOT NULL default '0',
......
Contenu

INSERT INTO`mulhouse` VALUES (10, 1, 1, 1, 1, .....)
INSERT INTO`mulhouse` VALUES (11, 2, 5, 3, 4, .....)
INSERT INTO`mulhouse` VALUES (12, 3, 1, 4, 5, .....)
INSERT INTO`mulhouse` VALUES (13, 4, 4, 2, 1, .....)


A chaque fois je fais des essais sur le serveur quand je modifie le code.
Affiche la requête SQL que tu as généré avant de l'exécuter.
Ca veut dire quoi ? (desolé je suis vraiment débutant ...)


En tout cas un très grand merci pour ton aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 mars 2008, 13:00

Seul la table principale nous interesse ici. C'est elle que nous interrogeons :)
Affiche la requête SQL que tu as généré avant de l'exécuter.
Ca veut dire quoi ? (desolé je suis vraiment débutant ...)
Tout simplement faire un :
echo $query_rsmulhouse;
une fois que ta requête est construite...

A mon avis, la requête est bien construite, mais les valeurs de tes chaines sont vides et c'est pour cela qu'il ne trouve aucun résultat. En l'affichant, tu verras tout de suite si c'est bien cela :)

La question est alors de savoir pourqoi est-ce qu'elles sont vides ? Il faut donc regarder ce qu'on met dedans. Prenons la première : GetSQLValueString($coletat_rsmulhouse, "text")
Tu demandes a php de formater la variable $coletat_rsmulhouse pour pouvoir l'utiliser comme une chaine de type "text" dans une requête SQL. Ne remettons pas en doute le travail de GetSQLValueString() dans un premier temps, et interrogeons nous sur la valeur de $coletat_rsmulhouse.

Cette variable existe-t-elle dans ce script ?
Il me semblait avoir vu passer un
$coletat_rsmulhouse = "0"; 
if (isset($_GET['etat'])) { 
  $coletat_rsmulhouse = $_GET['etat']; 
} 
dans ton code, qui aurait pu la définir, mais était-ce bien dans la même page ? si ce n'est pas le cas, c'est sans doute ce qui te manque. Si ce code est bien présent, peut être est il appelé après la construction de la requête alors que tu en aurais besoin avant ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 18 Messages

28 mars 2008, 14:59

Dans le script les variables existent bien, elles sont bien affichées avant la requête.
Je met le code complet pour te montrer.
Maintenant j'avais construit ça par Dreamweaver cs3, et je sais que niveau codage ce n'est pas le top, peut être que le problème vient de ma construction ...

Voici le code
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_secure, $secure);
$query_rsetat = "SELECT * FROM etat";
$rsetat = mysql_query($query_rsetat, $secure) or die(mysql_error());
$row_rsetat = mysql_fetch_assoc($rsetat);
$totalRows_rsetat = mysql_num_rows($rsetat);

mysql_select_db($database_secure, $secure);
$query_rstype = "SELECT * FROM type";
$rstype = mysql_query($query_rstype, $secure) or die(mysql_error());
$row_rstype = mysql_fetch_assoc($rstype);
$totalRows_rstype = mysql_num_rows($rstype);

mysql_select_db($database_secure, $secure);
$query_rsbudget = "SELECT * FROM budget";
$rsbudget = mysql_query($query_rsbudget, $secure) or die(mysql_error());
$row_rsbudget = mysql_fetch_assoc($rsbudget);
$totalRows_rsbudget = mysql_num_rows($rsbudget);

mysql_select_db($database_secure, $secure);
$query_rssecteur = "SELECT * FROM secteur";
$rssecteur = mysql_query($query_rssecteur, $secure) or die(mysql_error());
$row_rssecteur = mysql_fetch_assoc($rssecteur);
$totalRows_rssecteur = mysql_num_rows($rssecteur);

$coletat_rsmulhouse = "0";
if (isset($_GET['etat'])) {
  $coletat_rsmulhouse = $_GET['etat'];
}
$colbudget_rsmulhouse = "0";
if (isset($_GET['budget'])) {
  $colbudget_rsmulhouse = $_GET['budget'];
}
$colsecteur_rsmulhouse = "0";
if (isset($_GET['secteur'])) {
  $colsecteur_rsmulhouse = $_GET['secteur'];
}
$coltype_rsmulhouse = "0";
if (isset($_GET['type'])) {
  $coltype_rsmulhouse = $_GET['type'];
}

mysql_select_db($database_secure, $secure);

$isWhere=false;
$query_rsmulhouse = "SELECT * FROM mulhouse" ;  
   
if (isset($_GET['etat'])) { // si un état est specifié  

  if ($isWhere==false) { // Si flag est faux  
    $query_rsmulhouse.= " WHERE ";// Alors complete requete avec WHERE  
    $isWhere=true ; // flag en true (pour indiquer aux autres conditions qu'on a déjà utilisé le where) 
  }  
  else { // Sinon (si le where a déjà été utilisé) 
    $query_rsmulhouse.= " AND ";// complete requete avec AND 
  } 

  $query_rsmulhouse.= " etat_id_etat = ".GetSQLValueString($coletat_rsmulhouse, "text") ; // complete requete avec la condition  

} 

if (isset($_GET['budget'])) { // si un état est specifié  

  if ($isWhere==false) { // Si flag est faux  
    $query_rsmulhouse.= " WHERE ";// Alors complete requete avec WHERE  
    $isWhere=true ;// flag en true (pour indiquer aux autres conditions qu'on a déjà utilisé le where) 
  }  
  else { // Sinon (si le where a déjà été utilisé) 
    $query_rsmulhouse.= " AND ";// complete requete avec AND 
  } 

  $query_rsmulhouse.= " budget_id_budget = ".GetSQLValueString($colbudget_rsmulhouse, "text") ; // complete requete avec la condition  

} 

if (isset($_GET['secteur'])) { // si un état est specifié  

  if ($isWhere==false) { // Si flag est faux  
    $query_rsmulhouse.= " WHERE ";// Alors complete requete avec WHERE  
    $isWhere=true ;// flag en true (pour indiquer aux autres conditions qu'on a déjà utilisé le where) 
  }  
  else { // Sinon (si le where a déjà été utilisé) 
    $query_rsmulhouse.= " AND ";// complete requete avec AND 
  } 

  $query_rsmulhouse.= " secteur_id_secteur = ".GetSQLValueString($colsecteur_rsmulhouse, "text") ; // complete requete avec la condition  

} 

if (isset($_GET['type'])) { // si un état est specifié  

  if ($isWhere==false) { // Si flag est faux  
    $query_rsmulhouse.= " WHERE ";// Alors complete requete avec WHERE  
    $isWhere=true; // flag en true (pour indiquer aux autres conditions qu'on a déjà utilisé le where) 
  }  
  else { // Sinon (si le where a déjà été utilisé) 
    $query_rsmulhouse.= " AND ";// complete requete avec AND 
  } 

  $query_rsmulhouse.= " type_id_type = ".GetSQLValueString($coltype_rsmulhouse, "text") ; // complete requete avec la condition  
} 
$query_rsmulhouse.= " ORDER BY alphabet "; 
$rsmulhouse = mysql_query($query_rsmulhouse, $secure) or die(mysql_error());
$row_rsmulhouse = mysql_fetch_assoc($rsmulhouse);
$totalRows_rsmulhouse = mysql_num_rows($rsmulhouse);
echo $query_rsmulhouse; 

?>
Concernant l'echo, je ne sais pas si je l'ai bien intégrée ?

S'il le faut je vais reprendre la construction manuelle des 4 listes déroulantes sans utiliser les possibilités de DW ..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 mars 2008, 15:20

Tu pouvais le mettre avant le mysql_query(), mais il est très bien là :) Par contre l'intérêt, c'est de nous montrer la valeur de la requête qui doit être affiché à l'écran :)

Pis tant qu'on y est, ajoute également un, print_r($_GET) juste après pour que l'on puisse voir les données reçues en get par le script :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 18 Messages

28 mars 2008, 15:29

Par conte est ce normal que dans mon body j'ai :
SELECT * FROM mulhouse ORDER BY alphabet

Il m'a fait l'echo de ma dernière ligne $query_rsmulhouse ...

Voilà la valeur de la requête qui doit être affichée à l'écran :
<?php 
    echo '<div class="restaurant">' . $donnees['type'] . '</div>';  
	echo '<div class="fiche">'; 
	
    echo '<div class="photo"><a href="' . $donnees['url'] . '"> <img src="restaurants/images/' . $donnees['photo'] . '.jpg" WIDTH=270 HEIGHT=90/></a></div>' ; // PHOTO LIEN	
	
	echo '<div class="typecuisine"><b>' . $donnees['titre'] . '</b></div>';
	echo '<div class="adresse"><i>' . $donnees['adresse'] . '</i></div>';
	echo '<div class="descriptionrestaurant">' ;
	echo substr(''.$donnees['description'].'', 0, 240);
	echo '...<br/></div>';
	
	
	echo '</div>';  



?>
Tu veux en MP l'adresse du site où je publie pour tester ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 mars 2008, 16:10

Le echo te permet justement d'afficher à l'écran la requête qui a été générée et qui est donc exécutée. Puisqu'aucune des conditions n'apparait (ni de WHERE, ni de AND), c'est qu'il n'est entré dans aucun des if(), donc qu'aucun des tests n'est vrai, donc que $_GET['etat'], $_GET['budget'], ... ne sont pas définis...

Est ce que tu passes bien des valeurs dans l'url ? vérifies donc le contenu de $_GET avec un print_r()
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 18 Messages

28 mars 2008, 16:56

Les valeurs passent bien dans l'url :
recherche_choice.php?type=1&etat=&budget=&secteur=&submit=rechercher

Question bête, le print_r je l'intègre où? Je ne connais pas du tout ..
Ca serait sous cette forme ?
if (isset(print_r ($_GET['etat']))) { // si un état est specifié  

Concernant le fait que le contenu de $_GET soit vide, ca ne serait pas parce que chaque liste est chargée par une BDD mais la valeur a afficher est celle dans la table principale mulhouse qui a les valeurs sous formes : budget_id_budget ... ?