Probleme avec un switch()

Fermé
olivier - 18 déc. 2007 à 16:11
 olivier - 19 déc. 2007 à 11:10
Bonjour,

J'essaie, tant bien que mal d'effectuer une boucle switch dont le contenu serait dynamique et alimenté par une requete MySQL...
Voici le dernier de mes essais qui se borne à imprimer le code dans le code source (logique vous me direz...)

<?php echo '<?php '; ?>

switch($btid) {  
<?php
require("./db.inc.php");
$connexion = mysql_connect (SERVEUR, NOM, PASSE);
mysql_select_db (BASE,$connexion); 		
$req = mysql_query("SELECT * FROM bt ORDER BY 'id' DESC") 
or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  
while ($row=mysql_fetch_array($req))
	{	
		$idK[]=$row['id'];
		$btidK[]=$row['btid'];
	}
for($i=0;$i<sizeof($idK);$i++) 
	{ 
	echo "case'$btidK[$i]':\n"; 
	echo "include('actus/livres/book-tease/$btidK[$i].php');\n";
	echo "break;\n"; 
	}
?>
default: 
include('default.php');
break;
}

<?php echo '?>'; ?>


J'ai rajouté les <?php echo '<?php'; ?> et <?php echo '?>'; ?> pour éviter l'erreur qui s'affiche lorsque je mets mes requetes directement dans la boucle switch...

Merci pour vos réponses.
A voir également:

5 réponses

Leskate Messages postés 80 Date d'inscription lundi 11 juin 2007 Statut Membre Dernière intervention 29 mai 2008 8
18 déc. 2007 à 16:44
switch n'est pas une boucle!!
elle permet de différencier les cas d'une variable!

soit tu connais les valeur possible prises par ta variable et tu les prévois une à une (copier coller poWa ^_^)
soit tu place le résultat de ta requette dans un tableau et tu teste dynamiquement toute les case de ton tableau.
0
Bonsoir,

pourquoi veux tu absolument mettre <?php alors que tu est déja dans le php ?

Que veut tu faire exactement, quel est le but de la manœuvre, tu dois pouvoir faire beaucoup plus simple sans utiliser switch()

quelle différence entre $btidK[$i].php et $btid ? sachant que le premier est chargé par le second ?
0
Ce que je voulais faire à la base, c'est un switch($btid) dynamique sur base des infos contenues dans ma base "bt" pour automatiser mes include sur une page.

La page à inclure est créée via mon backoffice, et j'aurais voulu que la liste des switch() pour l'include se fasse également automatiquement sans que j'aie à chaque fois à aller rajouter une ligne dans le switch().

par exemple, lorsque je crée, via le backoffice, la page demo.php, une ligne avec pour btid demo se crée dans la db. J'aurais voulu qu'à ce moment se rajoute également la ligne

case : 'demo'
include (actus/livres/book-tease/demo.php');
break;

dans mon switch.
La seule solution que j'ai trouvée pour faire cela était d'utiliser une boucle while ... for ... pour créer le contenu dynamiquement. Mais... switch refuse d'avoir ce type de fonctions dans ses {...}

Utiliser le <?php en plus me permettait de générer le bon code mais hélas, il ne fait que s'imprimer et ne s'exécute pas...

Auriez-vous une idée magique ? ;)
0
Bonjour,

dans ce cas tu n'as pas besoin de switch()

pour faire ton include:

si dans ta base tu as une table qui contient les correspondances entre bitd et demo.php

au moment de generer ta page qui doit contenir l'include, tu interroge ta base

<?php
require("./db.inc.php");
$connexion = mysql_connect (SERVEUR, NOM, PASSE);
mysql_select_db (BASE,$connexion); 		
$req = mysql_query("SELECT * FROM bt WHERE id='".$btid."' ") or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

$result=mysql_fetch_array($req);

//le nom du fichier a inclure:
$fich=$result['nom_du_champ_contenant_le_fichier'];

//et include
include("actus/livres/book-tease/".$fich".".php");  //il faut bien le deuxième point de .php


modifie id='".$btid."' en fonction du nom du champ de ta table et de la valeur a chercher,je ne connais pas ta base.

Il y a peut être des erreurs de frappe c'est juste une piste faite rapidos
0

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

Posez votre question
Effectivement... c'était totalement inutile.
Merci d'avoir éclairé mon esprit embrouillé ! ;)
0