Un if-else qui ne fonctionne pas!
Euskamicha
Messages postés
75
Statut
Membre
-
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!
-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
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
$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
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.
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.
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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é.
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é.
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à/
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à/
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!
Pas taper! Aie ça fait mal.
Merci quand même en tout cas pour le coup de main!
c'est rien ;)
en fait j'ai oublié l'accolade de fermeture du if dans mon code précédent
Ceci risque de fonctionner mieux, et pour mettre en forme la solution dont parlait LeYaude, tu pourrais faire:
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.
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.
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!
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.
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.