Un if-else qui ne fonctionne pas!

Euskamicha Messages postés 75 Statut Membre -  
Euskamicha Messages postés 75 Statut Membre -
Bonjour,


-voilà je m'arrache les cheveux sur ma page sans comprendre pourquoi ça ne marche pas! L'idée, je stocke des liens de sites dans une bdd. A l'ouverture de ma page liens, par défaut, tous sont affichés. Je mets une liste déroulante permettant de n'afficher que les liens d'une certaine catégorie qui est définit dans ma bdd.

Le truc, c'est que l'affichage à l'ouverture, c'est ok, l'affichage en choisissant "toutes" (c'est à dire toutes les familles) ça fonctionne. Par contre, pour les autres, que néni! J'ai l'impression que c'est mon WHERE qui est problématique. Qu'en pensez vous?

Merci d'avance!

<!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>Les Liens</title>
		<meta http-equiv="title" content="Comité départemental de tennis de table des Pyrénées Atlantiques" />
		<meta name="description" content="Le site du comité départemental 64 de tennis de table !" />
		<meta name="keywords" content="Tennis de Table 64, Ping, Pongiste, Pyrénées Atlantiques, Ping-pong, raquette, balle, FFTT, Aquitaine" />
		<meta name="language" content="fr" />
		<meta name="robots" content=" index,follow" />

		<meta name="author" content="Micha" />
		<meta name="reply-to" content="sitecd64tt@free.fr" />
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<meta name="verify-v1" content="JB+4m1zPQaXsglWSwDf+qWi06YH05k6xoz6s1NT7pYc=" />
		<link rel="shortcut icon" type="image/x-icon" href="../gestionsite/images/raquette.ico" />
	   	<link rel="stylesheet" type="text/css" href="../gestionsite/css/essainouvellepage.css">
	   <!--[if IE 7]>
		<link rel="stylesheet" type ="text/css" href="../gestionsite/css/essainouvellepageie.css">
		<![endif]-->
		
			<!--[if lte IE 6]>
		<link rel="stylesheet" type ="text/css" href="../gestionsite/css/essainouvellepageie6.css">
		<![endif]-->
   </head>
   
   <body>

	 <!-- L'en-tête -->
 
       <div id="en_tete">
           
       </div>
	   
<div id="page">
<div id="hautpage">
		<?php
		  include '../hautpage.php';?>
		  </div>
 
   <!-- Le corps -->
 
       <div id="corps">
           <h1>Les liens</h1>
		
			
             <?php
			  mysql_connect("localhost","root","");
			  mysql_select_db("test");
			  
			  
			if (isset($_POST['categorie']))// Si une famille est sélectionnée
			  
			{
				$categorie = $_POST['categorie'];
			  
				{
					if ($categorie=="Toutes")// Si toutes les familles sont sélectionnées
					{
						$reponse=mysql_query("SELECT * FROM liens") or die(mysql_error());// J'affiche tous les sites
					}

				
					elseif($categorie=="Institutionnels")// Si la famille institutionnels est sélectionnée
					{
						$reponse=mysql_query("SELECT * FROM liens WHERE famille='Institutionnels'")or die(mysql_error());// J'affiche les sites institutionnels
					}

				
					elseif($categorie=="Clubs")// Si la famille clubs est sélectionnée
					{
					$reponse=mysql_query("SELECT * FROM liens WHERE famille='Clubs'")or die(mysql_error());// J'affiche les sites Clubs
					}
				
				
					elseif($categorie=="Divers")// Si la famille divers est sélectionnée
					{
					$reponse=mysql_query("SELECT  * FROM liens WHERE famille='Divers'")or die(mysql_error());// J'affiche les sites divers
					}
				}
			 
			}
					
			else
			 {
			 $reponse=mysql_query("SELECT * FROM liens")or die(mysql_error());// Par défaut, j'affiche l'ensemble de ma table
			 }
			  
			  while ($donnees=mysql_fetch_array($reponse))
				{
			?>
			<p>
			<strong>Catégorie:</strong> <?php echo $donnees['famille'];?><br/>
			<strong>Nom site:</strong> <?php echo $donnees['nomsite'];?><br/>
			<strong>Adresse:</strong> <a href="<?php echo $donnees['adressesite'];?>"><?php echo $donnees['adressesite'];?></a><br/>
			<strong>Commentaires:</strong> <?php echo $donnees['commentaire'];?><br/>
			</p>
			<?php
			}			  
			  mysql_close();
			  ?>
			  
			<?php
			function choixParDefaut($categorie)
			{
			$par_defaut = '';
				if (isset($_POST['categorie']))

				{
					if ($_POST['categorie'] == $categorie)
						{
						$par_defaut='selected="selected"';
						}
				}
			return $par_defaut;
			}
			?>
			
			<form method="post">
                                
            
					Catégories :<br/><select name="categorie">
					<option value="Toutes" <?php echo choixParDefaut('Toutes');?>>Toutes</option>
					<option value="Institutionnels" <?php echo choixParDefaut('Institutionnels');?>>Institutionnels</option>
					<option value="Clubs" <?php echo choixParDefaut('Clubs');?>>Clubs</option>
					<option value="Divers" <?php echo choixParDefaut('Divers');?>>Divers</option>
					<input type="submit" value="OK" />
					</select>
			</form>
            
           
       
           
		  
          
      </div>
	   <?php
		  include '../bas.html';?>
	  </div>
	  
	<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-3406956-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>  
    </body>
</html>

9 réponses

LeYaude Messages postés 307 Statut Membre 46
 
Après cette instruction :
$categorie = $_POST['categorie'];

Il y a une accolade dont je ne vois pas l'utilité, ça peut peut-être venir de ça.
Sinon, l'utilisation d'une structure en "switch" plutôt que de plein de elseif semblerait plus adapté et plus clair dans ce script
0
Euskamicha Messages postés 75 Statut Membre
 
En effet, une jeu d'accolade en trop, je les ai enlevées. Bon ça ne résout pas mon problème, mais vu qu'elles n'avaient rien à faire là, autant les enlever. Je pensais à faire du switch oui mais vu que jamais fais, je suis resté sur mes else if. Le souci se résoudrait sur du switch? Je pensais que les deux étaient équivalents. Je risque donc d'avoir le même soucis sur le switch. Je vais quand même essayer.
0
phpman1
 
Voilà la version switch.
Essaie de faire un echo de $sqlLiens pour voir si ta requête SQL est correcte, et essaie de la lancer dans phpMyAdmin (si tu l'utilises) pour voir si ça fonctionne.

$sqlLiens =  "SELECT * FROM liens ";

if (isset($_POST['categorie']))// Si une famille est sélectionnée
{
    switch($_POST['categorie'])
    {			
        case "Institutionnels": // Si la famille institutionnels est sélectionnée
        
            $sqlLiens .= "WHERE famille='Institutionnels' "; // J'affiche les sites institutionnels
            
            break;

    
        case "Clubs": // Si la famille clubs est sélectionnée
        
            $sqlLiens .= "WHERE famille='Clubs' "; // J'affiche les sites Clubs
            
            break;
    
    
        case "Divers": // Si la famille divers est sélectionnée

            $sqlLiens .= "WHERE famille='Divers' "; // J'affiche les sites divers

            break;
    }
        
mysql_query($sqlLiens) or die(mysql_error());// Par défaut, j'affiche l'ensemble de ma table
0
phpman1
 
J'ai oublié de refermer l'accolade du if (désolé)
0

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

Posez votre question
LeYaude Messages postés 307 Statut Membre 46
 
Non je ne pense pas que le switch pourrait vraiment résoudre le problème, c'était juste pour que la synthaxe soit plus claire. Une autre manière peut-être encore plus pratique et claire serait de lister "Toutes, Clubs..." dans un tableau, vérifier si $categorie est dans le tableau (avec in_array), puis si oui faire un appel à MySQL directement avec cette variable, sinon faire l'action ar défaut. Le code sera plus court et plus lisible, et aussi si vous voulez changer complètement vos catégories, en enlever une ou en ajouter une, vous n'avez qu'à modifier le tableau et non chaque condition (ouais, c'est aussi un truc de feignasses ! lol)

Sinon pour l'erreur en elle-même c'est de fait probablement le WHERE qui est en défaut vu que la catégorie TOUTES marche. Y a-t-il bien des majuscules en début de catégorie aussi dans la base de donées ? (c'est sensible à la casse). Sinon vous pouvez essayer d'échanger le rôle des " et des ', à savoir mysql_query('SELECT... WHERE categorie="Clubs" '); Il y a peu de chances que ça soit ça, mais ça ne coute pas cher d'essayer.

Pas d'autre idée pour l'instant, mais vérifiez bien ces majuscules et minuscules, j'ai déjà perdu des heures à cause de ça ou de fautes de frappe par le passé.
0
Euskamicha Messages postés 75 Statut Membre
 
Ouh là j'ai pas tout saisi là! J'ai tappé ton code (faudra me l'expliquer si ça marche), et quand je lance la page, pas grand chose qui s'affiche, si je sélectionne "toutes", j'ai bien mes échos, et la réponse est toujours "S"! Sais pas trop pourquoi...Si je sélectionne les autres, il me met une erreur de syntax à proximité de '='Clubs"...

Sur php admin, très étrange, je peux lancer une requete where avec mes id mais c'est impossible avec les 4 autres catégories. Doit y avoir un truc que j'ai pas saisi là/
0
Euskamicha Messages postés 75 Statut Membre
 
Je pense que vous allez me détester.... Je viens de trouver, dans mes noms de famille, dans ma bdd ben après chaque nom, y'avait un retour à la ligne, comme si appuyez sur "entrée"....

Pas taper! Aie ça fait mal.

Merci quand même en tout cas pour le coup de main!
0
phpman1
 
c'est rien ;)

en fait j'ai oublié l'accolade de fermeture du if dans mon code précédent

$sqlLiens =  "SELECT * FROM liens ";

if (isset($_POST['categorie']))// Si une famille est sélectionnée
{
    switch($_POST['categorie'])
    {			
        case "Institutionnels": // Si la famille institutionnels est sélectionnée
        
            $sqlLiens .= "WHERE famille='Institutionnels' "; // J'affiche les sites institutionnels
            
            break;

    
        case "Clubs": // Si la famille clubs est sélectionnée
        
            $sqlLiens .= "WHERE famille='Clubs' "; // J'affiche les sites Clubs
            
            break;
    
    
        case "Divers": // Si la famille divers est sélectionnée

            $sqlLiens .= "WHERE famille='Divers' "; // J'affiche les sites divers

            break;
    }
}
        
mysql_query($sqlLiens) or die(mysql_error());// Par défaut, j'affiche l'ensemble de ma table


Ceci risque de fonctionner mieux, et pour mettre en forme la solution dont parlait LeYaude, tu pourrais faire:

// Par défaut, j'affiche l'ensemble de ma table
$sqlLiens =  "SELECT * FROM liens ";
$categories = array('Institutionnels', 'Clubs', 'Divers')

// Si une famille est sélectionnée
if (isset($_POST['categorie']))
{
	if(in_array($_POST['categorie'], $categories))
	{    
		// J'affiche les sites concernés
		$sqlLiens .= "WHERE famille='" . $_POST['categorie'] . "' "; 
          }
}

mysql_query($sqlLiens) or die(mysql_error());


mais tout ceci ne sert qu'à avoir un code plus court (et plus joli mais c'est une question de goût), heureusement tu as trouvé l'erreur de toi-même.
0
Euskamicha Messages postés 75 Statut Membre
 
Finalement, j'ai fais ça. Bon c'est certainement un peu moins bien que les votres mais au moins je comprends tout. Parceque je dois avouer que le tien phpman, je m'y perds un peu. Un niveau très certainement un peu trop haut pour moi. En tout cas merci!

if (isset($_POST['categorie']))// Si une famille est sélectionnée
			  
			{
				$categorie = $_POST['categorie'];
			}
			  
				switch ($categorie)
				{
					case 'Toutes':
					$reponse=mysql_query("SELECT * FROM liens") or die(mysql_error());// J'affiche tous les sites
					break;
					
					case 'Clubs':
					$reponse=mysql_query("SELECT * FROM liens WHERE famille='Clubs'") or die(mysql_error());// J'affiche tous les sites clubs
					break;
					
					case 'Institutionnels':
					$reponse=mysql_query("SELECT * FROM liens WHERE famille='Institutionnels'") or die(mysql_error());// J'affiche tous les sites institutionnels
					break;
					
					case 'Divers':
					$reponse=mysql_query("SELECT * FROM liens WHERE famille='Divers'") or die(mysql_error());// J'affiche tous les sites divers
					break;
					
					default:
					$reponse=mysql_query("SELECT * FROM liens") or die(mysql_error());// J'affiche tous les sites
				}
				
					
			while ($donnees=mysql_fetch_array($reponse))
				{
			?>


Maintenant c'est parti dans le CSS pour mettre tout ça en joli. Et dernière étape, mettre les bannières/logos en passant par la bdd.
0