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

WRInaute discret
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:
<?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:
<?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:
<?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
 
WRInaute impliqué
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 ?
 
WRInaute discret
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:
 
WRInaute discret
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:
Notice: Undefined variable: starJan_title1 in c:\program files\easyphp1-8\www\perou\star.php on line 35
pour toutes les variables starJan_xxxxx
 
WRInaute impliqué
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:
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:
if ($jour >= 1 && $jour <= 10)
{ ...
}
else if ($jour >= 11 && $jour <= 20)
{ ...
}
else if ($jour >= 21 && $jour <= 31)
{ ...
}
en
Code:
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 ;)
 
Discussions similaires
Haut