Problèmes de PHP débutant (2e partie)

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


miltonis
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 237
Inscription: Mar Juil 27, 2004 21:16

Problèmes de PHP débutant (2e partie)

Message le Ven Jan 20, 2006 10:07

Bonjour,

comme prévu me revoici. tout réussir du 1er coup c'était bien un doux rêve. :roll:

Cette fois je bloque sur un probleme de passage de valeurs de variable d'un page à un autre, j'explique :

à partir d'une page qui est censée afficher des infos, content_w3c.php :
Code: Tout sélectionner
<?php
$msTitreA = "";  $msTitreB = "";  $msTitreC = "";
$msPhotoA = "";  $msPhotoB = "";  $msPhotoC = "";
$msResumA = "";  $msResumB = "";  $msResumC = "";

$starA_title1 = "";  $starA_title2 = "";  $starA_text = "";
$starA_link = "";  $starA_image = "";

include("fonctions.php");
include("star.php");
?>

<!-- ===  STARS   === -->
<!--=== bloc-star 01 ===-->
<h2 id="title01_star" class="width_titles"><?php echo $starA_title1; ?></h2>
<h1 id="title_star" class="width_titles"><?php echo $starA_title2; ?></h1>
<div id="star">
<div id="text_star"><?php
     echo $starA_text;
         echo $starA_link; ?></div>
<div id="image_star"><?php echo $starA_image; ?></div>
</div>
?>

je vais chercher à déterminer quelle info afficher suivant le tiers du mois en cours, star.php :
Code: Tout sélectionner
<?php
/**********  =====  AFFICHE LE CONTENU DE LA SECTION "STAR" DU MOIS EN COURS, PROCHAIN ou PRECEDENT  =====  *********/

/* récupère les valeurs du jour, mois de la date courante */
$jour = date("j");
$mois = date("m");
//echo $mois;
//echo $jour;

/* determine what third of month we are */
if ($jour>=1 && $jour<=10) {
  echo "1er tiers";
    for ($i=1; $i<=2; $i++) {
     if ($i=1)
       blocA($mois);
         else if ($i=2)
         blocB($mois);
    }
}
else if ($jour>=11 && $jour<=20) {
  echo "2e tiers";
    for ($i=1; $i<2; $i++) {
     if ($i=1)
               blocA($mois);
         else if ($i=2)
               blocB($mois);
    }
}
else if ($jour>=21 && $jour<=31) {
  echo "3e tiers";
      for ($i=1; $i<2; $i++) {
     if ($i=1)
               blocA($mois);
         else if ($i=2)
               blocB($mois);
    }
}
?>

qui appelle la fonction adéquate, focntions.php :
Code: Tout sélectionner
<?php

/* STAR : Pour le BLOC A */
function blocA($valeurdumois) {

include("star_words.php");

   switch ($valeurdumois) {
      case 01 : $starA_title1 = $starJan_title1;
         $starA_title2 = $starJan_title2;
         $starA_text = $starJan_text;
         $starA_link = $starJan_link;
         $starA_image = $starJan_image;
         //echo $starA_title1;
         break;
      case 02 : $starA_title1 = $starFev_title1;
         $starA_title2 = $starFev_title2;
         $starA_text = $starFev_text;
         $starA_link = $starFev_link;
         $starA_image = $starFev_image;
                                    break;   

                                .................

      case 12 : $starA_title1 = $starDec_title1;                       $starA_title2 = $starDec_title2;
         $starA_text = $starDec_text;
         $starA_link = $starDec_link;
         $starA_image = $starDec_image;
         break;
   }
}
?>

à l'affichage la zone censée récupérer les infos reste vide. pourtant au niveau de fonctions.php (le 3e script), la variable est bien renseignée. Mais à l'affichage des infos (content_w3c.php) elle est vide.

Si quelqu'un a une solution ou un lien qui expliquerait comment arriver au résultat voulu, je suis preneur :wink:
merci par avance

Milt


MarvinLeRouge
WRInaute impliqué
WRInaute impliqué
 
Messages: 451
Inscription: Mer Sep 01, 2004 20:10

Message le Ven Jan 20, 2006 10:18

Salut,

Je vois plusieurs problèmes dans ton script :

1) tu as des tests avec des =, et non des == (if $i = 1 par exemple)
2) tu as une boucle qui va de 1 à 2, et qui fait exactement une action dans chaque cas. Je ne comprends pas pourquoi tu utilises une boucle.
3) tes tests pourraient être fortement simplifiés

As-tu tenté un affichage de debug, par exemple à chaque entrée dans une fonction, afin de voir où le bât blesse ?


miltonis
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 237
Inscription: Mar Juil 27, 2004 21:16

Message le Ven Jan 20, 2006 10:27

merci de répondre rapidement Marvin,

1- pour le "==" dans IF c'est corrigé, erreur d'inattention

2- je suppose que tu parles de la boucle FOR, en fait pour l'instant ça ne se voit pas, mais j'en aurai besoin plus tard et elle sera un peu plus compliquée. je veux juste savoir si la structure focntionne.
C'est vrai par contre qu'il faudrait en faire une fonction à appeler. C'est ce àq uoi tu pensais?

3- "tes tests pourraient être fortement simplifiés"
-----> je ne vois pas ce que tu veux dire par là, comment?

mais corriger tout ça n'arrangera pas le problème. A ce sujet as-tu une idée?
merci :wink:


miltonis
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 237
Inscription: Mar Juil 27, 2004 21:16

Message le Ven Jan 20, 2006 10:41

Pour info, j'ai supprimé le INCLUDE("fonction.php"); et j'ai récupéré la focntion dans la boucle.

Là, ça marche, si je mets aussi le INCLUDE("star_words"); (là où il y a tous les textes à afficher.
mais si j'enlève cet include j'ai ceci comme erreur:
Code: Tout sélectionner
Notice: Undefined variable: starJan_title1 in c:\program files\easyphp1-8\www\perou\star.php on line 35

pour toutes les variables starJan_xxxxx


MarvinLeRouge
WRInaute impliqué
WRInaute impliqué
 
Messages: 451
Inscription: Mer Sep 01, 2004 20:10

Message le Ven Jan 20, 2006 13:24

a) Pour tes variables, elles ne sont effectivement pas définies dans le cadre de ta fonction. Si elles sont définies à un niveau supérieur (externes à ta fonction), tu peux récupérer leurs valeurs en iniquant au début de ta fonction
Code: Tout sélectionner
global $truc;

pour indiquer que la variable truc est définie en dehors de la fonction. C'est une question de portée de variable (scope en anglais).

b) Pour tes tests, tu peux simplifier
Code: Tout sélectionner
if ($jour >= 1 && $jour <= 10)
{ ...
}
else if ($jour >= 11 && $jour <= 20)
{ ...
}
else if ($jour >= 21 && $jour <= 31)
{ ...
}

en
Code: Tout sélectionner
if ($jour <= 10)
{ ...
}
elseif ($jour <= 20)
{ ...
}
else
{ ...
}


En effet :
a) la fonction date te retournera pour le jour un nombre positif donc inutile de tester cet aspect
b) quand tu arrives au premier "else", tu impliques automatiquement que le nombre est >= 11, puisque tu es dans un else de la condition <= 10
c) la condition elseif (accroché) existe en php : c'est fait exprès pour les enchaînements de tests comme ici
d) le dernier cas englobe tout le reste donc pas la peine de faire un test
En clair, tu fais des tests qui ne sont pas faux, mais ne servent à rien, puisque la réponse est connue d'avance : économise ton clavier et le serveur ;)


miltonis
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 237
Inscription: Mar Juil 27, 2004 21:16

Message le Ven Jan 20, 2006 16:25

Tout bon Marvin,
c'est sympa de ta part.
qu'est ce que ça fait plaisir quand ça marche!!! :D
merci


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Compute

  • Analyse de similarité textuelle
    Cet outil vous permet de calculer la similarité entre 2 pages web. L'algorithme utilisé repose sur l'analyse des occurrences des mots (mais pas sur leur positionnement dans les pages). Google utilise cette notion à certains endroits dans son algorithme, mais de façon bien plus évoluée que ce petit outil... Avoir des pages trop similaires peut entraîner des problèmes d'indexation... Cet outil vous permettra peut-être de résoudre certains problèmes de contenus dupliqués.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités