8800 sujets

Développement web côté serveur, CMS

Bonjours!

Je viens à vous, car je me trouve face à un problème dont la solution m'échappe...

J'ai créer un fichier qui permet de vérifier si la page demandée par le visiteur existe, ou s'il à le droit d'y accéder. Ce fichier fonctionne parfaitement, aucun problème sur ce fichier (pour l'instan).

J'ai récemment créer un script qui permet de rajouter des liens sur le menu. Ces liens sont enregistrés dans la BDD, puis un script contenu dans la page de mon menu récupère tout les liens, et les affiche. Ce script fonctionne bien.

Le problème, c'est que ces liens ne sont pas reconnus par mon premier fichier... Smiley ohwell

Le premier fichier (nommé matrix.php) est codé sur le modèle d'un switch, tout les liens importants sont inclut dans le code, de cette manière:


case "registration":  // Enregistrement //
{
	include("admin/member/registration.php");
}
break;


Pour que mon script d'ajout de lien puisse fonctionner avec mon script matrix, il me faudrait un code comme celui-ci:


case $page['name']:  // Variable contenant le nom du ficher que l'on souhaite inclure //
{
	include($page['url']); // Variable contenant l'url du fichier que l'on souhaite inclure //
}
break;



Le problème, c'est comment inclure un fichier, dont le répertoire est sauvegarder dans une variable?


Merci d'avance pour votre aide, bonne soirée.
connecté
Modérateur
Salut Loxeno,

Si j'ai bien saisie tu reçois tes données par un array ($page) en amont de ton script matrix.php. Logiquement ton code devrait être ceci (regarde également comment s'écrit correctement un switch Smiley cligne ) :


//fichier en amont
$page = array(
	"une clef" => "une valeur",
	"une autre clef" => "une autre valeur",
	"name" => "registration",
        "url" => "monChemin/monRep/monFichier.php"
	// etc.
);


// matrix.php
// si la valeur de la clef de cette variable est égale à :
switch($page['name']){
    case 'une valeur':
        echo $page['url'];
        break;
    case 'une autre valeur':
        echo $page['url'];
        break;
    // registration
    case 'registration':
        // alors tu m'affiches la valeur de cette clef
        echo $page['url'];
        break;
    default:
        echo 'Pas de valeur trouvée ';
} 


++
Modifié par Nolem (21 Jul 2009 - 10:10)
Ce système ne peut fonctionner chez moi (ou alors, je ne vois pas comment...).

Les liens vers les pages de mon sites sont construit sur ce modèle:
index.php?page=news&title=titre_de_ma_news
index.php?page=forum

Mon script matrix.php récupère le nom de la page demandée grâce à $_GET['page'] (et non par un array ^^)

J'ai peut-être trouver une solution, mais qui pose encore problème. Cette partie de code est inclut dans matrix.php .

	$retour = mysql_query("SELECT * FROM menu_link WHERE name='".$page."' ");
	$donnees = mysql_fetch_array($retour);

	case $page; 
	{
		include(''.$donnees['url'].'');
	}
	break;


Résultat, une jolie erreur...

Warning: include() [function.include]: Failed opening '' for inclusion
Salut,

je ne vois pas l'intérêt du switch. Smiley rolleyes

Visiblement ta requête ne ramène rien d'où le problème lors de l'include : il faudrait debugger.
$sql = sprintf("SELECT url FROM menu_link WHERE name='%s'",
mysql_real_escape_string($page));
// echo $sql; // Si besoin de debugger
$result = mysql_query($sql);
$url = mysql_result($result, 0);
include($url);
connecté
Modérateur
Hello,

Heyoan =>J'ai bien saisie qu'il attend une string. Quel est intérêt d'utiliser sprintf() dans ton script ?

Loxeno => Ta syntaxe est erronnée. un switch s'écrit comme ceci Smiley cligne :

switch($uneVar)[b]{[/b]
	case "argument" :
		//instruction;
		// cassure ou continue (break ou continue);
	case "argument2" :
		//instruction;
		// cassure ou continue (break ou continue);
	default :
		//instruction;
[b]}[/b]

Modifié par Nolem (22 Jul 2009 - 11:23)