Je n'arrive pas à déclarer convenablement une variable.

Rechercher

Je n'arrive pas à déclarer convenablement une variable.

Par jlb59  -  7 reponses  -  Le 26/02/2023 14:06  -  Editer  - 

Bonjour,

Cyrano, two3D et Saian m'ont grandement aidé pour faire un site propre en php.

Cyrano m'avait donné la maquette de l'index.php et autres, pour que les fichiers à consulter soit intégrés dans un tableau.

J'ai voulu faire pareil pour d'autres fichiers, mais je ne parviens pas à obtenir le même résultat :

$cadre_droit = array(
'cadre_droit' => 'cadre_droit_inc.php'
);

Ca c'est la nouvelle table que je voudrais faire car il va y avoir d'autres fichiers en rapport avec l'élément "conteneur".

/* On détermine quelle page est appelée */
$page = (isset($_GET['page'])) ? $_GET['page'] : 'accueil';


(...)

$aContenu = array(
    'fm' => "Pour gérer le script du grand test.",
    'accueil' => "Bienvenue chez QI98.",
    'apropos' => "En savoir plus sur QI98.",
    'faq' => "Questions fréquemment posées.",

(...)

/* On initialise les variables nécessaires dans les fichiers qui seront inclus */
switch ($page)
{
/*
*/
    case 'accueil':
        $title = "QI98 - Accueil";
        $titrePage = "Bienvenue chez nous";
        $url_page="pages/accueil/accueil.php";
        break;
    case 'apropos':
        $title = "QI98 - À propos";
        $titrePage = "À propos de nous";
        $url_page="pages/apropos/apropos.php";
        break;


(...)

$contenupage = $aContenu[$page];

$cadre_droit = array(
'cadre_droit' => 'cadre_droit_inc.php'
);

Je suis vraiment perdu !

Voulez-vous m'aider ?

Merci d'avance.

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 26/02/2023 23:28  -  Haut de page  - 

Bonsoir JIB, j'avoue que je comprends mal la nature exacte du problème.

Que ça ne marche pas, soit, mais quel est le résultat obtenu par rapport au résultat attendu ?

Ce que je vois à ce stade, c'est que quatre variables sont initialisées en fonction de la page appelée :
* $contenupage ;
* $title ;
* $titrepage ;
* $url_page ;

Là où je comprends moins, c'est le tableau $cadre_droit.

Il faudrait montrer le code où ces variables sont attendues et là j'aurais une meilleure idée de ce qui se déroule après ces initialisations.

 
Par jlb59  -  Le 27/02/2023 11:29  -  Haut de page  - 

Bonjour Cyrano,

C'est vrai que c'est pas évident à comprendre !

Comme vous me l'aviez suggéré par l'exemple, tout va à merveille.

Les 4 variables que vous avez citées fonctionnent parfaitement.
Celle que je voudrais créer afin de la rendre opérationnelle est en fait pour faire de la "pub".
C'est à dire que juste à côté du contenu des pages ($contenupage), je voudrais y mettre ce cadre ($cadre_droit) qui en contiendrait plusieurs autres avec le logo du site à publié.
Ce cadre serait toujours affiché en permanence; mais là, je crois qu'il va falloir utiliser le CSS, comme position:fixed par exemple.

Je me doute que ça doit pas être très clair pour vous.
Effectivement, en mettant le code ce sera plus parlant pour vous :

<?php
/* index.php */

/* On détermine quelle page est appelée */
$page = (isset($_GET['page'])) ? $_GET['page'] : 'accueil';
/* Pour les beoins de l'execice, on crée du contenu */
/*
$contenupage = $aContenu[$page];
*/
$aContenu = array(
    'gt' => "Pour gérer le script du grand test.",
    'accueil' => "Bienvenue chez QI98.",
    'apropos' => "En savoir plus sur QI98.",
    'faq' => "Questions fréquemment posées.",
    'grand_test' => "Faites un test complet de votre QI en ligne",
    'test_qi' => "Réalisez le test de QI qui vous correspond.",
    'sitemap' => "Sachez localiser l'endroit où vous êtes.",
    'download' => "Téléchargement",
    'screenshot' => "Capture d|'écran.",
    'exemples' => "Quelques exemples faciles.",
    'observation' => "Exemple de test d'observation.",
    'logique' => "Exemple de test de logique.",
    'verbal' => "Exemple de test du verbal.",
    'spatial' => "Exemple de test du spatial.",
    'numeration' => "Exemple de test de numération.",
    'mot_etranger' => "Cherchez le mot étranger dans une série",
    'manque_chiffre_lettre' => "Retrouvez la lettre ou le chiffre dans un série.",
    'chiffre_manquant' => "Retrouvez le chiffre dans un série.",
    'suite_numerique' => "Trouvez le nombre qui suit dans une série.",
    'suite_logique' => "Découvrez votre logique visuelle.",
    'nombre_etranger' => "Nombre étranger dans une série.",
    'tableau_juste' => "Trouvez la lettre ou le chiffre dans un tableau.",
    'sens_rotation' => "Trouvez le bon sens de rotation.",
    'dessin_etranger' => "Trouvez l'image qui ne correspond pas.",
    'chiffre_manquant' => "Retrouvez le chiffre manquant dans une série.",
    'contact' => "Contactez-moi",
    'mentions' => "Mentions légales",
    'p404'    => "Page introuvable, utilisez le menu de navigation pour trouver la bonne page."

);

/* ou encore 
$aContenu = array(
    `'accueil' => 'accueil.inc.html',
    `'apropos' => 'apropos.inc.html',
    `'contact' => 'contact.inc.html',
    `'erreur404' => 'erreur-404.inc.html',
);
*/
/* On peut initialiser ici le logo qui sera le même pour toutes les pages */
/* $logo = "./images/banniere/logo2.jpg"; */

// Pour les tests de QI 
//ajoute un script au tableau $array_js
/*
$array_js[] = 'mot_etranger.js';

//et un autre, pourquoi pas, c'est prévu pour :
$array_js[] = 'un-autre-script.js';
*/

/* On initialise les variables nécessaires dans les fichiers qui seront inclus */
switch ($page)
{
/* Pour les pages standard */    
    case 'accueil':
        $title = "QI98 - Accueil";
        $titrePage = "Bienvenue chez nous";
        $url_page="pages/accueil/accueil.php";
        break;
    case 'apropos':
        $title = "QI98 - À propos";
        $titrePage = "À propos de nous";
        $url_page="pages/apropos/apropos.php";
        break;
    case 'faq':
        $title = "QI98 - Foire Aux Questions";
        $titrePage = "Foire Aux Questions";
        $url_page="pages/faq/faq.php";
        break;
    case 'sitemap':
        $title = "QI98 - Plan du site";
        $titrePage = "Sitemap";
        $url_page="pages/sitemap/sitemap.php";
        break;
    case 'contact':
        $title = "QI98 - Contact";
        $titrePage = "Contactez-vous";
        $url_page="pages/contact/contact.php";
        break;
    case 'download':
        $title = "QI98 - Téléchargements";
        $titrePage = "Téléchargements des logiciels";
        $url_page="pages/download/download.php";
        break;
    case 'mentions':
        $title = "QI98 - Mentions légales";
        $titrePage = "Mentions légales";
        $url_page="pages/mentions/mentions.php";
        break;
/* pour les exemples */
    case 'exemples':
        $title = "QI98 - Exemples";
        $titrePage = "Exemples simples de tests";
        $url_page="pages/exemples/exemples.php";
        break;
    case 'observation':
        $title = "QI98 - Observation";
        $titrePage = "Exemples de test d'observation";
        $url_page="pages/exemples/observation.php";
        break;
    case 'numeration':
        $title = "QI98 - Numération";
        $titrePage = "Exemples de test de numération";
        $url_page="pages/exemples/numeration.php";
        break;
    case 'logique':
        $title = "QI98 - Logique";
        $titrePage = "Exemples de test de logique";
        $url_page="pages/exemples/logique.php";
        break;
    case 'spatial':
        $title = "QI98 - Spatial";
        $titrePage = "Exemples de test sur l'environnement spatial";
        $url_page="pages/exemples/spatial.php";
        break;
    case 'verbal':
        $title = "QI98 - Verbal";
        $titrePage = "Exemples de test sur le verball";
        $url_page="pages/exemples/verbal.php";
        break;
    case 'screenshot':
        $title = "QI98 - Capture d\'écran";
        $titrePage = "Captures d\'écran des logiciels";
        $url_page="pages/screenshot/screenshot.php";
        break;
/* Pour le grand test de QI en ligne */ 
 case 'grand_test':
        $title = "QI98 - Grand test";
        $titrePage = "Grand test";
        $url_page="pages/tests/grand_test.php";
        break;
/* Pour les tests de QI définis */
    case 'test_qi':
        $title = "QI98 - Test de QI";
        $titrePage = "Test de QI";
        $url_page="pages/tests/test_qi.php";
        break;
    case 'manque_chiffre_lettre':
        $title = "QI98 - Manque chiffre ou lettre";
        $titrePage = "Manque chiffre ou lettre";
        $url_page="pages/tests/manque_chiffre_lettre.php";
        break;
    case 'chiffre_manquant':
        $title = "QI98 - Chiffre manquant";
        $titrePage = "Chiffre manquant";
        $url_page="pages/tests/chiffre_manquant.php";
        break;
    case 'dessin_etranger':
        $title = "QI98 - Dessin étranger";
        $titrePage = "Dessin étranger";
        $url_page="pages/tests/dessin_etranger.php";
        break;
    case 'mot_etranger':
        $title = "QI98 - Mot étranger";
        $titrePage = "Mot étranger";
        $url_page="pages/tests/mot_etranger.php";
        break;
    case 'nombre_etranger':
        $title = "QI98 - Nombre étranger";
        $titrePage = "Nombre étranger";
        $url_page="pages/tests/nombre_etranger.php";
        break;
    case 'sens_rotation':
        $title = "QI98 - Sens de rotation";
        $titrePage = "Sens de rotation";
        $url_page="pages/tests/sens_rotation.php";
        break;
    case 'suite_logique':
        $title = "QI98 - Suite logique";
        $titrePage = "Suite logique";
        $url_page="pages/tests/suite_logique.php";
        break;
    case 'suite_numerique':
        $title = "QI98 - Suite numérique";
        $titrePage = "Suite numérique";
        $url_page="pages/tests/suite_numerique.php";
        break;
    case 'tableau_juste':
        $title = "QI98 - Tableau juste";
        $titrePage = "Tableau juste";
        $url_page="pages/tests/tableau_juste.php";
        break;
    default:
        $title = "QI98 - Page introuvable";
        $titrePage = "Page introuvable";
        $url_page="pages/erreur-404.php";
}
$contenupage = $aContenu[$page];

/* Pour afficher des "Pubs" à droite des pages affichées */
$cadre_droit = array(
'cadre_droit' => 'pages/cadre_droit/cadre_droit_inc.php'
);

/**
 * À présent, toutes nos variables sont prêtes, on va pouvoir procéder à la 
 * construction du code html complet de la page
 */
/* D'abord l'entete */
include('entete_inc.php');
/* On continue avec le menu de navigation */
include('menu_inc.php');
/* A présent le contenu principal */
include('contenu_inc.php');
include('cadre_droit_inc.php');
/* Enfin le pied de page */
include('footer_inc.php');
?>

<!--
Attention aux commentaires, tous sont importants.

Créez les fichiers tels quels et testez ça. 
Rapportez-moi toute anomalie s'il y a lieu, mais surtout suivez bien le code ligne par ligne 
pour en comprendre le fonctionnement et faites-moi un retour là-dessus.
-->

Je vous remercie de prendre de votre temps pour m'aider.

 
Par Cyrano  -  Le 27/02/2023 11:46  -  Haut de page  - 

Ok, le code est ici plus complet, mais il manque toujours l'élément important : le ou les code(s) où celui-ci est utilisé, donc a priori les fichiers inclus à la fin de celui-ci..

Le problème se pose au niveau du « cadre droit ».
Je comprends mal l'idée de la création du tableau associatif « $cadre_droit » pour ensuite faire un include en indiquant directement le fichier.

À la rigueur, j'aurais mieux compris quelque chose comme ceci :

include($cadre_droit['cadre_droit']);

Là, ce serait plus logique et le chemin vers le fichier à inclure étant défini complètement dans l'initialisation du tableau indexé, ça se tiendrait mieux.
Alors je ne sais pas si ça fonctionnerait pour autant, mais là de toutes façons, ce tableau indexé n'est pas utilisé dans ce code là. L'est-il dans le code d'un des fichiers inclus ? Ça, sans le code de ces fichiers, je ne peux pas le savoir.

 
Par jlb59  -  Le 27/02/2023 12:57  -  Haut de page  - 

Je me demandais si en mettant la page "cadre_droit" à côté de celle qui affiche les pages ($contenupage), ça irait mieux, mais c'est pas le cas.

En mettant votre code, j'ai une erreur sur cette ligne.
````
Warning: Undefined array key "cadre_droit" in C:\laragon\www\MaquettePHP\index.php on line 217

Fatal error: Uncaught ValueError: Path cannot be empty in C:\laragon\www\MaquettePHP\index.php:217 Stack trace: #0 {main} thrown in C:\laragon\www\MaquettePHP\index.php on line 217

```

J'ai un problème de déclaration certainement, mais je vais encore regarder et vous tiendrais informé !

 
Par Cyrano  -  Le 27/02/2023 14:45  -  Haut de page  - 

Heu .... quand je fais la suggestion d'inscrire un include du tableau, ce n'est pas pour remplacer ça :

$cadre_droit = array(
    'cadre_droit' => 'pages/cadre_droit/cadre_droit_inc.php'
);

Mais bien ceci :

include('cadre_droit_inc.php');

Sinon il est évident que ça ne marchera pas.

Donc en fin de compre, le code ressemblerait alors à ceci :

/* ... */
$contenupage = $aContenu[$page];

/* Pour afficher des "Pubs" à droite des pages affichées */
$cadre_droit = array(
    'cadre_droit' => 'pages/cadre_droit/cadre_droit_inc.php'
);

/**
 * À présent, toutes nos variables sont prêtes, on va pouvoir procéder à la 
 * construction du code html complet de la page
 */
/* D'abord l'entete */
include('entete_inc.php');
/* On continue avec le menu de navigation */
include('menu_inc.php');
/* A présent le contenu principal */
include('contenu_inc.php');

/* Le cadre de droite */
include($cadre_droit['cadre_droit']);

/* Enfin le pied de page */
include('footer_inc.php');
?>
 
Par jlb59  -  Le 27/02/2023 15:09  -  Haut de page  - 

C'est la modification que j'avais faite et ça s'affichait bien... mais en bas !

Mon idée est que l'affichage se fasse à droite du conteneur, et de manière fixe.

Je suppose que tout ceci se règlera avec le CSS, enfin, je crois !
Il me semble l'avoir déjà fait et ça fonctionnait assez bien !

Si, je pense, le meilleur moyen d'avoir un cadre à droite peut-être que je pourrais gérer facilement le contenu.
Comme je voulais mettre plusieurs petits cadres dedans qui seront modifiés si besoin est, ce sera peut-être moins compliqué.

C'est malheureux que je n'eusse pas la même logique et méthodologie que vous, ce serait certainement plus facile, mais je suis trop pressé et c'est pour ça que j'aie beaucoup d'erreurs !
Et comme une erreur en entraine une autre... c'est pas gagné !

Mais je vais quand même suivre vos conseils et m'abstenir de me compliquer la vie en évitant de faire ce cadre à droite du conteneur.

 
Par Cyrano  -  Le 04/03/2023 18:08  -  Haut de page  - 

C'est pour ça que je dis qu'il faut commencer par construire des maquettes en HTML.

Le HTML

On établit la structure des différents éléments de la page sans mise en forme particulière, on distingue juste les titres/sous-titres du texte, des images ou des formulaires, etc.. en employant les balises HTML appropriées selon l'élément considéré

Les CSS

Là on applique un style de mise en page, des couleurs, des positions, des écartements, etc ..

Ensuite ...

Alors seulement on s'occupe de programmation. On sait que telle partie de la page doit être dynamique, alors on va construire le code qui va récupérer le contenu et on va isoler la partie HTML de la maquette, créer un gabarit qui sera inclus dans le code PHP et dans lequel on insérera le contenu dynamique.

Éventuellement, ce contenu pourra provenir d'une base de données, peu importe.

Mais l'important, c'est de distinguer ce qui se passe coté serveur de ce qui se passe coté client.

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |