Afficher si seulement une valeur est présente

Petit nouveau ! | 5 Messages

28 juin 2005, 15:15

Bonjour tous,
je suis sur un projet de gestion de calendrier tout simple qui affiche la date, le lieu, 2 fichiers à télécharger en pdf( articles et resultat)

j'ai plusieurs soucis avec car je debute vraiment.

Mon premier probleme: comment dans mon tableau afficher le mot télécharger en lien sur le fichier qui se nomme " fichier.pdf" dans ma base de donnée. Ou plutot comment faire pour ne pas qu'il soit afficher quand il n'y a pas de fichier derriere?
<html>
<body>
<?
//====================
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'amosfr';
//====================
$nombre = 20;  
if (!$limite) $limite = 0; 
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];
//===================
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
//====================
$select = 'SELECT count(id) FROM vbois';
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];
//====================
$select = 'select id,Date_Format(date, "%d/%m/%Y") AS dates ,lieu,articles,resultats,region,departement FROM vbois ORDER BY date ASC limit '.

$limite.','.$nombre;
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
//===================

//===================
if($total) {
echo '<table bgcolor="#ffffff">'."\n";
echo '<tr>';
echo '<td><center><b><font color="#000000">Date</font></b></center></td>';
echo '<td><center><b><font color="#000000">Lieu</font></b></center></td>';
echo '<td><center><b><font color="#000000">Téléchargement Articles</font></b></center></td>';
echo '<td><center><b><font color="#000000">Téléchargement Résultats</font></b></center></td>';
echo '<tr>';
//lecture et affichage ligne par ligne
while($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td><center>'.$row['dates'].'</center></td>';
echo '<td><center>'.$row['lieu'].'</center></td>';
echo '<td><center><a href="http://amosxp/amos2.0/up/'.$row['articles'].'">'.$row['articles'].'</a></center></td>';
echo '<td><center>'.$row['resultats'].'</center></td>';
echo ' </tr>'."\n";
}
echo '</table>'."\n";
//fin tablo
}
else echo 'Pas d\'enregistrements dans cette table...';
mysql_free_result($result);
?>
</body>
</html>
si je remplace '.$row['articles'].' dans la balise <a href> </a>
par le mot télécharger:
echo '<td><center><a href="http://amosxp/amos2.0/up/'.$row['articles'].'">Télécharger</a></center></td>';
Le mot "télécharger" apparait partout, et comme une grande majorité de lignes n'ont pas de fichier articles, le lien ne donne sur rien.
Comment faire pour n'afficher le mot télécharger qu'aux lignes ou un article à télécharger est present?

Merci beaucoup d'avance je bloque

j'avais essayer ca mais comme je suis nul en algo:
if ($row['articles'] !='')
{
$row['articles']='telecharger';
}
else
{
echo '';
}
j'ai d'autres problemes avec mon projet, mais je prefere avancer et comprendre progressivement...

Merci

Mammouth du PHP | 1353 Messages

28 juin 2005, 15:40

En attendant mieux je ne sais pas si cela pourra t'aider mais : si tu fais un
if(empty(var)){}
cela vérifie l'existance de la variable

D'ou ton code pourrait etre plus du genre :
if (!empty($row['articles']))
{
$row['articles']='telecharger';
}
else
{
echo '';
}
Au cas ou... :wink:

VaN
Mammouth du PHP | 1107 Messages

28 juin 2005, 15:53

Je prefere pour ma part utiliser if (isset($var)) { }

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juin 2005, 15:55

empty -- Détermine si une variable contient une valeur non nulle
isset -- Détermine si une variable est affectée
Pour empty, je pense qu'il peut y avoir des problèmes très très râres en cas de affectations/libérations en chaînes

Mais je préfère également isset
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

28 juin 2005, 16:09

merci bcp pour vos réponses
mais honte sur moi :oops: , je n'arrive pas a mettre en place : if (isset($var)) { }
if (isset($row['articles'])) 
{ 
echo ' telecharge';
}
else
{
echo '';
}
je ne sais pas non plus quoi mettre la
echo '<td><center><a href="http://amosxp/amos2.0/up/'.$row['articles'].'">[u]'.$row['articles'].'[/u]</a></center></td>';
bref, je m'en sort pas...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 juin 2005, 16:39

Je viens de trouver un autre argument pour isset
empty

(PHP 3, PHP 4, PHP 5 )
empty -- Détermine si une variable contient une valeur non nulle

Valeurs de retour

Retourne FALSE si var a une valeur non-vide et différente de zéro.

Ce qui suit est considéré comme étant vide :

"" (une chaîne vide)
0 (0 en tant qu'entier)
"0" (0 en tant que chaîne de caractères)
NULL
FALSE
array() (un tableau vide)
var $var; (une variable déclarée, mais sans valeur dans une classe)
une variable qui contient 0 est une variable qui existe pour moi 8)
Modifié en dernier par zeus le 28 juin 2005, 16:55, modifié 1 fois.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 1353 Messages

28 juin 2005, 16:54

oui j ai eu ce probleme avec 0 cela vaut aussi pour empty().

Pour une machine la valeur 0 et considérée comme nulle, faut faire attention avec ca !!!

A bon entendeur,

Eléphant du PHP | 104 Messages

28 juin 2005, 17:03

D'où l'intérêt d'employer les bons opérateurs :

- ===
- !==

Sinon bonjour les surprises des fois (souvent) ! Mais bon c'est évident car des fonctions PHP peuvent retourner un résultat de type integer ou boolean ! Personnellement je trouve ça absurde mais le langage n'est pas typé donc...

Si on teste le retour d'une fonction qui retourne un integer ou un boolean et qu'on teste :

if($result == true)
... si le retour est un entier 1 bonjour les conséquences !

Mais il y a des avertissements dans les docs des fonctions. Ce qui est embêtant c'est que le développeur est obligé de faire un test de typage.

Petit nouveau ! | 5 Messages

28 juin 2005, 17:14

et du coup c'est quand meme jouable pour mon problème?

car j'ai essayé mais je n'y arrive pas du tout
si qqun peut m'éclairer, merci d'avance...

VaN
Mammouth du PHP | 1107 Messages

28 juin 2005, 17:22

if (isset($row['articles'])) 
{ 
echo ' telecharge'; 
} 
else 
{ 
echo ''; 
} 
doit fonctionner parfaitement, tu peux meme te passer du else { } inutile.

Quel est le msg d'erreur ? Es tu au moins sur que $row['articles'] contient une valeur ?

Petit nouveau ! | 5 Messages

28 juin 2005, 17:44

voila le code
<?
//====================
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'amosfr';
//====================
$nombre = 20;  
if (!$limite) $limite = 0; 
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];
//===================
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());
//====================
$select = 'SELECT count(id) FROM vbois';
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];
//====================
$select = 'select id,Date_Format(date, "%d/%m/%Y") AS dates ,lieu,articles,resultats,region,departement FROM vbois ORDER BY date ASC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
//===================
if (isset($row['articles'])) 
{ 
echo ' telecharge'; 
} 
else 
{ 
echo ''; 
} 


//===================
if($total) {
echo '<table bgcolor="#ffffff">'."\n";
echo '<tr>';
echo '<td><center><b><font color="#000000">Date</font></b></center></td>';
echo '<td><center><b><font color="#000000">Lieu</font></b></center></td>';
echo '<td><center><b><font color="#000000">Téléchargement Articles</font></b></center></td>';
echo '<td><center><b><font color="#000000">Téléchargement Résultats</font></b></center></td>';
echo '<tr>';
//lecture et affichage ligne par ligne
while($row = mysql_fetch_array($result)) {
echo '<tr>';
echo '<td><center>'.$row['dates'].'</center></td>';
echo '<td><center>'.$row['lieu'].'</center></td>';
echo '<td><center><a href="http://amosxp/amos2.0/up/'.$row['articles'].'">'.$row['articles'].'</a></center></td>';
echo '<td><center>'.$row['resultats'].'</center></td>';
echo ' </tr>'."\n";
}
echo '</table>'."\n";
//fin tablo
}
else echo 'Pas d\'enregistrements dans cette table...';
mysql_free_result($result);


?>
ben tu m'crois tu m'crois pas
mais j'ai 12 lignes dans mon tableau, et une seule avec une valeur dans la colonne articles

ca fait rien du tout, ca porte le meme nom que ce que j'ai mis dans la base de donné, autrement dit " fichier.pdf"

alors que je cherche a avoir "telecharge"

je suis perdu, en plus a coté j'essaye de faire un affiche par tri avec menu deroulant, je galere severe...

VaN
Mammouth du PHP | 1107 Messages

28 juin 2005, 18:02

peut etre a cause de ça ?
echo '<td><center><a href="http://amosxp/amos2.0/up/'.$row['articles'].'">'.$row['articles'].'</a></center></td>'; 
a transformer en :
echo '<td><center><a href="http://amosxp/amos2.0/up/'.$row['articles'].'">TELECHARGER</a></center></td>'; 

Petit nouveau ! | 5 Messages

29 juin 2005, 09:08

hélas non

dans ce cas la, le mot "telecharger" s'affiche partout
donc la aussi ou il n'y a pas de fichier derriere, ce qui donne un lien mort...

Mammouth du PHP | 19672 Messages

29 juin 2005, 09:15

Et si tu testais l'existence du fichier ???
?>
<td><?php echo(file_exists("http://amosxp/amos2.0/up/".$row['articles']))?"<center><a href=\"http://amosxp/amos2.0/up/".$row['articles']."\">TELECHARGER</a></center>":"&nbsp;"; ?></td>
<?php
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 5 Messages

29 juin 2005, 14:10

lol, ya plus rien qui s'affiche.

et si on bidouillait du coté de la bdd?

faire une colonne de plus ou on ecrit le mot "telecharger"
et une colonne ou on ecrit le nom du fichier ( fichier.pdf)

comme ca si ya un fichier, on ecrit télécharger dans la colonne voisine.

je vais essayer ca...

merci