question bête cherche réponse intelligente

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : question bête cherche réponse intelligente

par Invité » 28 juil. 2009, 22:10

salut fuzzyline

Je viens seulement de me connecter, et je découvre, oh joie ! ta longue réponse rédigée avec patience et pédagogie, du moins pour ce que j'en déduis de ma lecture en diagonale...

Je vais, pas tout de suite car j'ai du boulot à finir, me plonger sous peu dans l'étude de ce que tu proposes !

Un grand merci, vraiment !

...et je te posterai mes éventuels doutes ou incompréhensions, en espérant ne pas abuser.

Je ne met pas encore "résolu", mais ça ne saurait tarder :wink:

par FuZZyLine » 28 juil. 2009, 10:31

Salut,
hello, fuzzyline,
je pense que tu es dans les bras de morphée ou que tu t'y prépares...
donc ce que je te dis là est pour demain, inchallah (ou si dieu le veut, c'est selon) :
alors voilà, c'est bien ce que je craignais, ta solution, qui semble bien être la résolution de mon problème, est là sous mes yeux et je suis complètement largué |*()
il me manque des passerelles pour passer de ma logique simpliste à ta logique de codeur fou :ordi: , et il faudrait, si j'ose, que tu t'appuies sur les noms et les termes que j'attribue aux éléments de ma question pour me conduire par la main jusqu'à la lumière...
Je comprendrais que ce soit trop demander.
Dans ce cas, je mettrais "résolu" et je concocterais une solution plus artisanale... ElePHPant :tir2:
Quoiqu'il en soit, merci pour ce que tu as déjà fait !
Je reprends tes exemples mais sans HEREDOC je déteste ca, je trouve que ca rend illisible le code.

Info: Fais une séparation plus correcte entre code php et script html.
<!-- appel du tableau identifiant la page demandée via un lien des menus --> 
<?php include("fonction_pages.php"); ?> 
Bon, déja tu peux modifier par: (je profite pour tout passer en php c'est plus clair)
Et je me permets, du reste, de modifier ta forme d'appel et nom de tes variables mais c'est la seule
façon d'être compréhensible et surtout d'être lisible:

Page: index.php
<?php

$pageName = "TU RECUPERE LE NOM DE LA PAGE OU TU ES VIA $_SERVER";

/**
 * Chargement d'un fichier contenant le menu
 */
 include("menu.php");
 $menu = getMenu();

/**
 * Chargement d'un fichier contenant le header
 * oubli pas qu'une fois revenu de la fonction le nom de la page peut avoir
 * changé suite à la détection d'une erreur. En ce cas $pageName = false
 */
 include("entete_index.php");
 $header = getHeader($pageName);

/**
 * Chargement d'un fichier contenant TOUS les body de tes pages
 */
 include("fonction_pages.php");
 $body = getBody($page);

/**
 * Assemblage du container html et affichage
 * la variable employée: $cde correspont à ton script html 
 */
 $cde  = "<!DOCTYPE ...>";
 $cde .= "<html>\n";
 $cde .= "   <head>\n";
 $cde .=         $meta
 $cde .= "   </head>\n";
 $cde .= "   <body>\n";
 $cde .=        $body;
 $cde .= "   </body>\n";
 $cde .= "</html>\n";

 echo $cde;
?> 
Page: menu.php
<?php
   function getMenu()
   {
      // Les liens sont placés dans la partie "fragment" de l'url mais peuvent
      // être lancés de manières directe ex: <a href="./REPERTOIRE/accueil"> en
      // ce cas prévois d'indiquer le nom du répertoire ou les pages se trouvent
      // Autre cas possible: le rewriting mais plus complexe au vu de tes connaisssances.
      // http://www.webrankinfo.com/dossiers/debutants/url-rewriting
      $cde_menu = "";
      $cde_menu ="<ul>\n";
      $cde_menu ="   <li>\n";
      $cde_menu ="      <a href="./index.php?page=accueil">Accueil</a>\n";
      $cde_menu ="   </li>\n";
      $cde_menu ="   <li>\n";
      $cde_menu ="      <a href="./index.php?page=dowload">Download</a>\n";
      $cde_menu ="   </li>\n";
      $cde_menu ="   <li>\n";
      $cde_menu ="      <a href="./index.php?page=login">Login</a>\n";
      $cde_menu ="   </li>\n";
      $cde_menu ="</ul>\n";

      return $cde_menu;
   }
?>
Page: entete_index.php
<?php
  /**
   * Je réceptionne l'argument en référence, d'ou le & 
   * ca me permet ainsi de le modifier s'il y a une erreur d'acces (404).
   */
   function getHeader(& $pageName)
   {
      // J'ai mis n'importe quoi, hein, mais bon t'auras compris le principe.

      $head  ="";
      $head .= "<meta http-equiv=content-type content="text/html; charset=UTF-8">/>\n";
      $head .= "<meta http-equiv="Content-Language" content="fr">\n";
      $head .= " <title>\n";

      /**
       * Assignation de la variable par défaut, ca fait gagner du temps
       */
      $title = "Unknow page, ERROR 404 !!!";

      /**
       * Vérification du nom de la page pour assignation du titre
       * s'il ne trouve pas alors $titre reste inchangé
       */
       switch($pageName)
       {
           case accueil:
              $title = "Page d'accueil, welcome in my world !\n";
           break;

           // Restant un exemple je squize la fin des choix, t'auras compris le principe
           // à toi de remplacer les xxx et ajouter des case
           case xxx:
           .
           .
           .
           break;

           default:
              // si ca passe ici c'est que le nom de la page n'existe pas
              // dans le choix donc on indique l'erreur en modifiant la variable
              // d'argument, celle-ci vaudra: FAUX.
              $pageName = false;
       }

      $head .=       $title."\n";
      $head .= " </title>\n";
      $head .= "<link rel="stylesheet" type="text/css" href=./css/general_css.css">\n";

      return $head;
   }
?>
Page: fonction_pages.php
<?php

   function getBody($pageName)
   {
      if (!$pageName) $pageName = "404";

      $body = "";

      /**
       * Enregistre la partie déterminé par l'argument dans la variable $body
       * le code peut être direct comme ici ou il peut etre chargé via un include
       * ex: include ($pageName."php") getData ...etc
       * ou peut être du script html ex: $fScript = fopen($pageName."htm")
       * T'auras compris le principe
       */
      switch($pageName)
      {          
          case accueil:
             $body .= "<h1>\n";
             $body .= "   Hello world, zet à l'accueil...\n";
             $body .= "</h1>
          break;

          case 404:
             $body .= "<h1>\n";
             $body .= "   Perdu, Page inconnue...  Réessaie...\n";
             $body .= "</h1>
          break;
      }
      return $body;
   }
?>
Pas le temps de faire le footer mais le principe reste le même.
J'ai tenté d'être le plus didactique possible mais bon, certain termes peuvent t'échaper,
seul une lecture attentive de tutos ou même de sources pourront te renseigner.
Je repasse plus tard, bon code @+ ;)

par Invité » 28 juil. 2009, 00:46

hello, fuzzyline,

je pense que tu es dans les bras de morphée ou que tu t'y prépares...
donc ce que je te dis là est pour demain, inchallah (ou si dieu le veut, c'est selon) :

alors voilà, c'est bien ce que je craignais, ta solution, qui semble bien être la résolution de mon problème, est là sous mes yeux et je suis complètement largué |*()

il me manque des passerelles pour passer de ma logique simpliste à ta logique de codeur fou :ordi: , et il faudrait, si j'ose, que tu t'appuies sur les noms et les termes que j'attribue aux éléments de ma question pour me conduire par la main jusqu'à la lumière...

Je comprendrais que ce soit trop demander.
Dans ce cas, je mettrais "résolu" et je concocterais une solution plus artisanale... ElePHPant :tir2:

Quoiqu'il en soit, merci pour ce que tu as déjà fait !

par FuZZyLine » 27 juil. 2009, 21:06

Re,
ah oui, je comprend ton exemple...
mais c'est pas exactement ça.
en fait, les deux meta_01.php et meta_02.php ne sont pas à tester dans index.php.
je ne cherche d'ailleurs pas à les tester du tout...
ce que je souhaite c'est les insérer dans mes pages comme valeur d'une variable, le meta_01 pour certaines pages et le meta_02 pour les autres[**].
ensuite le meta correspondant à la page en cours sera affiché à la bonne place dans index.php grâce à la variable :wink:
C'est faisable ?
[*]à moins que ce que tu proposes soit LA réponse, mais que je ne suis pas capable de comprendre (trop complexe à mon niveau) :?
[*] Bein : T'as mis le doigt dessus... De ce que j'ai saisi de ta demande ma réponse est la bonne.
Non que je sois extra-lucide hein. Mais il me semble bien:
enfin, "insérer" : je ne sais pas si c'est le bon terme... $mavarible = le fichier meta souhaité, en attente d'être affiché dans index
Cela confirme le fait. Enfaite il ne s'agit pas vraiment d'insert.
La variable se remplit au fur et à mesure autrement dit c'est toi qui, une fois la variable prête
$script = getData("Avec ou pas d'arguments"); décide ou placer celle-ci en faisant: $cde .= $script;

[**] d'ou un test, test que tu peux, il est vrai, mettre ou tu le souhaites ;)

Sinon tu peux faire cela:
.
.
.
$cde  = "<meta>\n"
$cde .= "   {template:meta.nummero}";
$cde .= "</meta>\n";
.
.
.
Puis parser ta variable $cde pour remplacer la partie entre {} par ce que tu auras déclaré.
fonction php : preg_replace. Mais on s'éloigne du sujet.

Sinon pour ce que tu sembles vouloir faire relis mes exemples plus haut, il me semble bien que
c'est tout à fait ce que tu recherches.

Chose qui va peut-être pas t'aider, mais sait on jamais :

__FILE__ Te donne le fichier en cours
$_SERVER["REQUEST_URI"] tu peux récupérer l'url actuelle

Autrement dit tu pourras déja tester quelque points. phpinfo(); est aussi utile hésite pas à le lancer.

Bon 10h à coder... Pause syndicale, @+ espérant t'avoir éclairé, je repasse demain ;)

par Invité » 27 juil. 2009, 20:41

ce que je souhaite c'est les insérer dans mes pages comme valeur d'une variable, le meta_01 pour certaines pages et le meta_02 pour les autres.
enfin, "insérer" : je ne sais pas si c'est le bon terme... $mavarible = le fichier meta souhaité, en attente d'être affiché dans index.

par Invité » 27 juil. 2009, 20:33

ah oui, je comprend ton exemple...

mais c'est pas exactement ça.

en fait, les deux meta_01.php et meta_02.php ne sont pas à tester dans index.php.
je ne cherche d'ailleurs pas à les tester du tout...
ce que je souhaite c'est les insérer dans mes pages comme valeur d'une variable, le meta_01 pour certaines pages et le meta_02 pour les autres.
ensuite le meta correspondant à la page en cours sera affiché à la bonne place dans index.php grâce à la variable :wink:

C'est faisable ?
à moins que ce que tu proposes soit LA réponse, mais que je ne suis pas capable de comprendre (trop complexe à mon niveau) :?

par FuZZyLine » 27 juil. 2009, 19:29

Re,
FuZZyLine,
Merci d'avoir pris la peine de me répondre...
Mais ce n'est effectivement pas ce que je cherche, du moins d'après ce que je comprend de ta réponse.
Bon, réussirais-je à obtenir l'info qui me manque ?
Est-ce que ma question est à ce point incompréhensible ?
J'en appel à votre bon cœur ! Déjà grand par le nombre de personnes qui ont tenté une réponse, mais malheureusement sans que j'y trouve matière à enfin mettre un "résolu" à ce post...
Yeah... Je crois que j'ai compris (je dis bien: "je crois")
En gros, tu veux inclure une page et évaluer son contenu.

Si c'est ca, cela se rapproche dangereusement des templates dont j'ai parlé tout à l'heure.
En revanche la façon que tu as d'apréhender ce problème n'est pas la bonne. (il me semble)

Pour include des fichiers, dans un cas pareil, ce que je fais:

Tu m'excuseras mais le script suivant n'est pas à la norme w3 mais bon... c'est un exemple et
surtout pas trop le temps ;)

Fichier : meta_01.php:
<?php
 function getData()
 {
    $cde = "<meta name="description" lang="fr" content="Toute l'actualité..." />\n"; 
    return $cde;
 }
?>
Fichier : meta_02.php:
<?php
 function getData()
 {
    $cde = "<meta name="description" lang="uk" content="All actuality..." />\n";  
    return $cde;
 }
?>
Fichier : index.php:
<?php

 // C'est un éxemple un peu con mais assez parlant je trouve

 $boolTst = true; // Si l'agent user est francais
 $boolTst = false; // Si l'agent user est ...pas francais

 $fileName = $boolTst ? "meta_01.php" : "meta_02.php";
 require_once($fileName);
 $meta = getData();

 $cde  = "";
 $cde .= "<html>\n";
 $cde .= "   <head>\n";
 $cde .=        $meta;
 $cde .=     </head>\n";
 $cde .= "   </head>\n";
 $cde .= "   <body>\n";

 // ...

 $cde .= "   </body>\n";
 $cde .= "</html>\n";

 echo $cde;
?>
En revanche c'est une perte de temps. Include des fichiers pour si peu de données retournées
c'est (à mon avis) totalement inutile. D'ou le test binaire dont j'ai parlé plus haut. Test en amont ce dont tu as besoin mais ne charge pas pour ensuite faire un test.

@+ et bon code... En espérant avoir compris cette fois-ci lol

par Invité » 27 juil. 2009, 19:06

Bon, réussirais-je à obtenir l'info qui me manque ?
Est-ce que ma question est à ce point incompréhensible ?
Je veux dire : il arrive qu'une question d'un débutant plonge les avertis dans un océan de perplexité, tant elle semble venue d"une autre planète.
Si donc ma question est de cette sorte, dites-le moi et j'arrêterai là un post qui ne peut trouver de réponse !

par Invité » 27 juil. 2009, 18:42

FuZZyLine,

Merci d'avoir pris la peine de me répondre...
Mais ce n'est effectivement pas ce que je cherche, du moins d'après ce que je comprend de ta réponse.

Bon, réussirais-je à obtenir l'info qui me manque ?
Est-ce que ma question est à ce point incompréhensible ?

J'en appel à votre bon cœur ! Déjà grand par le nombre de personnes qui ont tenté une réponse, mais malheureusement sans que j'y trouve matière à enfin mettre un "résolu" à ce post...

par FuZZyLine » 27 juil. 2009, 17:26

Salut,
[...]
non, juste ça : $mavariable = adresse de lapage.php !!
Si je comprends bien ce que tu veux:
/**
 * @Definition
 * Pose une limite de rapatriement
 */
 define ("MAX_READ", 1024);

/**
 * @var hFile
 * Handle du fichier
 */
 $hFile = fopen("./toto.htm", "r");

 if (!$hFile) exit(-1);

/**
 * @var bfWork
 * Flag binaire de réussite
 */
 $bfWork = true;

/**
 * @var strTxt
 * Texte de la page
 */
 $strTxt = "";

/**
 * Boucle tant que le flag est vrai
 */
 while($bfWork)
 {
     $txt = fgets($hf, MAX_READ);
     if ($txt !== false)
     {
        $strTxt .= $txt;
     }
     else $bfWork = false;
 }

 echo $strTxt;

Ca marche à toi de jouer mais souviens toi: y a toujours plusieur façon de faire.
Et la, à ta question, j'en vois au moins 3 lol
j'aimerais avoir deux fichiers pour la partie doctype/meta/title/css : entete_index1.php et entete_index2.php afin de mettre celui qui m'est nécessaire dans l'une ou l'autre de mes pages par ajout d'une variable
Tu peux faire un test unaire:
/**
 * Test, J'ai utilisé $userName pour plus de clareté ;)
 */
 $userName == "MOI" ? $filePage = "./moi.htm" : $filePage="toi.htm";
J'espère avoir été clair...
Bein, sans vouloir de vexer... Entre ton 1er Post et celui-ci ca change pas mal donc je ne sais si
mes réponses sont celles que tu attends lol, désolé si c'est pas le cas. D'autre part tu as l'air
de vouloir séparer le code du script... Essaie de te renseigner sur le MVC si c'est vraiment ce que tu
veux faire. Vois aussi du côté des templates.

En même temps j'ai peut-être tout faux... à toi de dire @+ bon code ;)

EDIT: Je viens de relire et... Désolé ca doit pas être ce que tu cherches comme info.

par Invité » 27 juil. 2009, 15:21

Ok,
je ne voulais pas encombrer avec du code, croyant ma question simple, mais d'accord :
j'ai donc par exemple ma page accueil ainsi construite
<?php
$titre = 'Accueil Racontetapis';
$contenu = <<<SYNTAXE_HEREDOC

<div id="corps">
	<h3>Vous êtes sur la page d'accueil !</h3>
	<p>Ici nous sommes sur la page d'accueil</p>
</div>

SYNTAXE_HEREDOC;
?>
dans index.php j'ai ceci
<!-- appel du tableau identifiant la page demandée via un lien des menus -->
<?php include("fonction_pages.php"); ?>

<!-- appel de la page affichant la partie doctype/meta/title/css -->
<?php include("entete_index.php"); ?>

<!-- appel du menu -->
<?php include("menu.php"); ?>

<!-- affichage de la page demandée (partie contenu) -->
<?php echo $contenu; ?>

<!-- affichage du bas de page -->
<?php include ('bas_index.php'); ?>
j'aimerais avoir deux fichiers pour la partie doctype/meta/title/css : entete_index1.php et entete_index2.php afin de mettre celui qui m'est nécessaire dans l'une ou l'autre de mes pages par ajout d'une variable
<?php
$ref_entete = soit "entete_index1.php" soit "entete_index2.php"
$titre = 'Accueil Racontetapis';
$contenu = <<<SYNTAXE_HEREDOC

<div id="corps">
	<h3>Vous êtes sur la page d'accueil !</h3>
	<p>Ici nous sommes sur la page d'accueil</p>
</div>

SYNTAXE_HEREDOC;
?>
entete qui sera affiché ainsi dans index.php
<?php include("fonction_pages.php"); ?>

<!-- appel de la partie doctype/meta/title/css -->
<?php echo $ref_entete; ?>

<?php include("menu.php"); ?>

<?php echo $contenu; ?>

<?php include ('bas_index.php'); ?>
J'espère avoir été clair...

Merci par avance

par agité » 27 juil. 2009, 14:21

Euh,

je ne sais pas, cher agité...

$_SERVER est une superglobale, n'est-ce pas ?

Et je met l'adresse de ma page ainsi ?
$url = $_SERVER["REQUEST_URI"(mapage.php)];
Je pose la question, mais je vais aussi me documenter à partir de ta réponse...
Non, mais je comprends pas du tout ce que tu veux faire, alors j'essaie. Mais si tu ne nous dit pas exactement ce que tu veux faire et ce que tu as déjà mis en place, par exemple en nous montrant un peu de code, on aura beaucoup de mal à comprendre et t'aider.

Pour que la variable $url contienne la page du script courant il te faut faire :
$url = $_SERVER['REQUEST_URI']

par Invité » 27 juil. 2009, 14:17

Euh,

je ne sais pas, cher agité...

$_SERVER est une superglobale, n'est-ce pas ?

Et je met l'adresse de ma page ainsi ?
$url = $_SERVER["REQUEST_URI"(mapage.php)];
Je pose la question, mais je vais aussi me documenter à partir de ta réponse...

par agité » 27 juil. 2009, 14:05

Genre :
$url = $_SERVER["REQUEST_URI"];
?

par Invité » 27 juil. 2009, 14:02

Nolem,

c'est gentil, mais je ne cesse de m'y reporter dans ma pénible progression en php.

et je ne trouve pas de réponse à cette question très précise évoquée plus haut, car les valeurs de variables sont toujours des chaines de caractères ou des calculs ou d'autres variables...

probablement qu'il faut faut interpréter et adapter, mais là je ne trouve pas la bonne syntaxe pour que ma variable contienne l'adresse d'une page.php

et il ne s'agit pas d'un tableau, ou d'une condition, ou toute autre construction élaborée

non, juste ça : $mavariable = adresse de lapage.php !!