Afficher si la date existe !

Mammouth du PHP | 545 Messages

14 févr. 2007, 00:36

Bonjour,

J'ai une question par rapport à un morceau de script qui me renvoit la date du jour hors que la variable est vide !
Voici mon code:
<?php 
	if ($soci->nom_1_course != '') {
		$nom_1_course = '<strong>Ma 1er course &agrave; l\'ACRHO est " </strong>'. $soci->nom_1_course . '<strong> "</strong>';
		}else { 
		$nom_1_course = '';
		}

	if ($soci->date_1_course != '0000-00-00') {
		$tag = '<strong>, le </strong>';
		$date_1_course = $soci->date_1_course;
		}else { 
		$date_1_course = ' ';
		$tag = '';
		}

	echo $nom_1_course;
	echo $tag;
	setlocale (LC_ALL,"fr_FR"); 
	echo strftime("%d-%m-%Y",strtotime($date_1_course)); 
?>
L'erreur se passe lors du 'else' du deuxième 'if' qui est normalement vide mais qui me renvoit la date du jour !
Il me semble que la correction doit se faire sur la dernière ligne mais je ne sais comment m'y prendre.

Quelqu'un a-t-il une idée pour moi ?
Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

ViPHP
ViPHP | 1961 Messages

14 févr. 2007, 00:56

Bonsoir,

Si je comprends bien, tu as $soci->date_1_course qui est vide, mais je ne vois pas où tu testes ce cas.

Ta condition dans le second if c'est qu'elle soit différente de '0000-00-00' ce qui es le cas de vide, (elle est différente).

Ajoute le test
if ($soci->date_1_course != '0000-00-00' && trim($soci->date_1_course) != '' ) { 
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 545 Messages

14 févr. 2007, 01:09

Ta condition dans le second if c'est qu'elle soit différente de '0000-00-00' ce qui es le cas de vide, (elle est différente)
Oups ! Me suis un peu planté ... j'ai mis dans ma table une valeur par défaut '0000-00-00' !
Donc je voudrais que, si la variable égal '0000-00-00', elle ne soit pas prise en compte ... de la façon dont j'ai procédé, il m'est renvoyé la date du jour !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

ViPHP
ViPHP | 1961 Messages

14 févr. 2007, 01:13

Re,

Dans ce cas, comment est déclarée la colonne dans ta table ?
Comment tu la récupères ??? un DATE_FORMAT() ?? sans rien ???
Il se peut que $soci->date_1_course contienne aussi l'heure
Pour t'en assurer affiche cette valeur avant de faire ton test (second if)
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 545 Messages

14 févr. 2007, 01:18

Comme type pour mon champs, j'ai mis 'date' mais au cas où, j'ai quand même fait le test est voici ce qu'il m'est renvoyé:
0000-00-00 14-02-2007
La valeur du champs suivit de la date du jour ... et non, je n'ai à aucun moment demandé que la date du jour soit imprimée ! J'en suis certain :evil:

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

ViPHP
ViPHP | 1961 Messages

14 févr. 2007, 01:20

Dans ce cas tu devrais revoir ta class, tu lui demandes à un moment ou un autre de concaténer les deux valeurs.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 545 Messages

14 févr. 2007, 01:23

Dans ce cas tu devrais revoir ta class, tu lui demandes à un moment ou un autre de concaténer les deux valeurs.
Hum !
Je suis dans le PHP débutant ... peux-tu m'expliquer ce que tu veux dire ?

Merci

Note: Y'a peut-être un peu de fatigue qui m'oblige à aller dormir 8-)
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

ViPHP
ViPHP | 1961 Messages

14 févr. 2007, 01:25

Re,

Si cette date ne te sert pas à autre chose qu'à l'affichage, tu peu la récupérer directement au format français (ça t'évite tes locale, strftim, strtotime) à partir de MySQL.
SELECT DATE_FORMAT(ta_colonne, '%d-%m-%Y') AS date_fr FROM ...
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 1961 Messages

14 févr. 2007, 01:27

J'avais posté mon message sans voir le tien.

Montre-nous la partie de code ou tu passes ta requête et celle ou tu assignes la valeur récupérée à $soci->date_1_course
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 545 Messages

14 févr. 2007, 11:14

Salut,

Voici un nouveau jour! Donc voici ma requête qui se trouve dans une fonction:
function fiche($id_soci){
global $database, $mosConfig_live_site;

	// try to find search component's Itemid
	$query = "SELECT id"
		. "\n FROM #__menu"
		. "\n WHERE type = 'components'"
		. "\n AND link = 'index.php?option=com_societaire'"
		;
	$database->setQuery( $query );
	$_Itemid = $database->loadResult();

	if ($_Itemid != "") {
		$Itemid = $_Itemid;
	}
	
	// Adds parameter handling
	if( $Itemid > 0 && $Itemid != 99999999 ) {
		$params = $Itemid;
		$link = 'index.php?option=com_societaire&Itemid=' . $Itemid. '&task=';
		}
///////////////////////////////////////////////// Requêtes /////////////////
//echo $id_soci;
	$fichesoc = "SELECT id_societaire, nom, prenom, sexe, YEAR(NOW()) - YEAR(naissance) AS age, naissance, site_internet, image, nom_1_course, date_1_course, datekb"
	. "\n FROM #__societaire"
	. "\n WHERE id_societaire = $id_soci"
	;
	
	$database->setQuery( $fichesoc );// met le bon préfixe à la table
	$fiche = $database->loadObjectList ();
	//print_r($fiche);
	//$resultat = $database->getQuery();
	//echo $resultat;
///////////////////////////////////////// Fin de  Requêtes /////////////////
societaire_html::fiche_societaire($mosConfig_live_site, $link, $fiche); // envoit de la variable $fiche qui contient tous les champs sélectionnés dans la requête
}
Pour la partie affichage du code ... c'est ici:
<?php
	function fiche_societaire($url, $link, $fiche) {
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<?php
	if ( count($fiche) > 0 ){
	foreach ($fiche as $soci){
?>

<tr>
    <td width="40%" rowspan="7" align="center" valign="middle"><div align="center"><img src="<?php echo $url; ?>/images/soci/<?php echo $soci->image; ?>" alt="Photo soci&eacute;taire" name="photo" height="200" border="1" id="photo" /></div></td>
    <td></td>
    <td>
		<?php
		echo '<strong>Pr&egrave;nom: </strong>';
		echo $soci->prenom;
		echo '<br /><strong>Nom: </strong>';
		echo $soci->nom;
		?>
	</td>
  </tr>

  <tr>
    <td></td>
    <td>
		<?php
		echo '<strong>N&eacute; le </strong>';
        setlocale (LC_ALL,"fr_FR");
		echo strftime("%d-%m-%Y",strtotime($soci->naissance));
		echo '<br /><strong>Sexe: </strong>';
		echo $soci->sexe;
		?>
	</td>
  </tr>

  <tr>
    <td></td>
    <td></td>
  </tr>

  <tr>
    <td></td>
    <td>
	
	<?php 
		if ($soci->nom_1_course != '') {
			$nom_1_course = '<strong>Ma 1er course &agrave; l\'ACRHO est " </strong>'. $soci->nom_1_course . '<strong> "</strong>';
			}else { 
			$nom_1_course = '';
			}
		
		//echo $soci->date_1_course;
		if ($soci->date_1_course != '0000-00-00' && trim($soci->date_1_course) != '') {
			$tag = '<strong>, le </strong>';
			$date_1_course = $soci->date_1_course;
			}else { 
			$date_1_course = ' ';
			$tag = '';
			}

		echo $nom_1_course;
		echo $tag;
		setlocale (LC_ALL,"fr_FR"); 
		echo strftime("%d-%m-%Y",strtotime($date_1_course)); 
	?>
        </td>
  </tr>

  <tr>
    <td></td>
    <td>
		<?php
			echo '<strong>Je suis &agrave; Kain Bruy&egrave;re depuis le </strong>';
			setlocale (LC_ALL,"fr_FR");
			echo strftime("%d-%m-%Y",strtotime($soci->datekb));
		?>
	</td>
  </tr>

  <tr>
    <td></td>
    <td></td>
  </tr>

  <tr>
    <td></td>
    <td>
		<?php 
		echo '<strong>Site internet: </strong><a href="';
		echo $soci->site_internet;
		echo '" title="Site du soci&eacute;taire" target="_blank">';
		echo $soci->site_internet;
		echo '</a>';
		?>
	</td>
  </tr>

  <?php
	}}else{
      echo '$fiche est vide';
	  }
  ?>
</table>

<?php
	}
?>
Pour les non avertis, c'est une programmation pour le portail Joomla (CMS) et toutes mes variables passes sans problème sauf quand je cherche à exprimer ma date dans un test !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

ViPHP
ViPHP | 1961 Messages

14 févr. 2007, 11:46

Bonjour,

Ce que je te propose c'est du bricolage car on ne vois pas la partie ou tu charges $soci->date_1_course.
Change cette ligne
if ($soci->date_1_course != '0000-00-00' && trim($soci->date_1_course) != '') { 
pa ces deux là
$tabDate = explode(" ", $soci->date_1_course);
if ($tabDate[0] != '0000-00-00' ) {
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 545 Messages

14 févr. 2007, 13:04

on ne vois pas la partie ou tu charges $soci->date_1_course.
Cela passe via la variable $fiche ... si j'ajoute ce morceau de code [print_r($fiche);] dans une balise 'php', j'ai ce résultat qui s'affiche :
Array ( [0] => stdClass Object ( [id_societaire] => 6 [nom] => Devos [prenom] => Sébastien [sexe] => H [age] => 33 [naissance] => 1974-03-11 [site_internet] => http://www.kain-bruyere.be [image] => devos.JPG [nom_1_course] => Le Jogging du Mont de la Trinité [date_1_course] => 1999-11-11 [datekb] => 2000-02-01 ) )
Ne surtout pas me demander comment c'est possible car je n'ai pas les connaissance nécessaire pour pouvoir l'expliquer !

J'ai trouvé une solution qui vaut ce qu'elle vaut mais qui ne m'affiche rien si c'est vide ... j'ai mis les 'echo' dans le 'if':
<?php 
		if ($soci->nom_1_course != '') {
			$nom_1_course = '<strong>Ma 1er course &agrave; l\'ACRHO est " </strong>'. $soci->nom_1_course . '<strong> "</strong>';
			}else { 
			$nom_1_course = '';
			}

		echo $nom_1_course;
		
		if ($soci->date_1_course != '0000-00-00' && trim($soci->date_1_course) != '') {
			$tag = '<strong>, le </strong>';
			$date_1_course = $soci->date_1_course;
			echo $tag;
			setlocale (LC_ALL,"fr_FR"); 
			echo strftime("%d-%m-%Y",strtotime($date_1_course));
			}else { 
			$date_1_course = ' ';
			$tag = '';
			echo $tag;
			echo $date_1_course;
			}
	?>
Voilà, pour moi c'est [Réglé] à moins que l'on trouve un problème :evil:

Merci pour cette patience
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

ViPHP
ViPHP | 1961 Messages

14 févr. 2007, 13:07

Bien, si c'est résolu, n'oublie pas le tag.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 545 Messages

14 févr. 2007, 13:13

Bien, si c'est résolu, n'oublie pas le tag.
J'attendais juste de savoir si mon code ne risquait pas de poser de problème avant de mettre [résolu] !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

ViPHP
ViPHP | 1961 Messages

14 févr. 2007, 13:18

Je ne vois rien dans ton code qui puisse poser PB, du moins dans syntaxe et structure.
En ce qui concerne les fonctionnalités, c'est toi qui vois.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein