Aller au contenu

Eviter les balises vides


Sujets conseillés

Posté

J'ai un formulaire de recherche, + l'affichage des résultats sous la forme d'une liste de définition.

<div id="formulaire_recherche>
<form action="#resultat" method="post">
<input type="Text" name="mot" size="20" />
<input type="Submit" value="Traduire" />
</form>
</div>

<div id="resultats">
<?php
if(isset($_POST['mot'])) {
$mot = $_POST['mot'];
$db = mysql_connect('localhost', 'user', '***');
mysql_select_db('base',$db);
$sql = "SELECT ... FROM dictionnaire,fr_entree WHERE fr_entree_val='$mot' AND fr_entree.id_mot = dictionnaire.id_mot ORDER BY 'mot_fr' ";
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
echo '<dl>';
while($data = mysql_fetch_array($req)) {
echo '<dt>'.$data['mot_fr'].' ('.$data['mot_cat'].')</dt><dd>'.$data['mot_ln'].'</dd>';
}
echo '</dl>';
mysql_close();
}
?>
</div>

Le problème que je n'arrive pas à résoudre :

Si aucun enregistrement ne correspond à la requête, la page html affichera :

<div id="resultats">

<dl></dl>

</div>

Autrement dit des balises dl vides. Ce qui n'est pas top...

Comment peut-on éviter cela ? J'ai essayé plusieurs trucs, sans succès. Je pense m'être approché d'une solution en utilisant mysql_num_rows() , mais n'y suis pas arrivé... A l'aide, svp !

--

Pascal Grouselle

Posté

Si tu entre dans le while, c'est que tu fait au moin 1 echo.

Avant le while, initialise une variable à 0.

Si, quand tu entre dans le while, ta variable est à 0, tu fait

echo '<dl>';

variable=variable+1;

quand tu sort de ton while, si la variable est à 1, tu fait :

echo '</dl>';

variable=variable-1;

l'état de variable correspond alors au nombre de dl ouvertes et avec ce système, tu peux les imbriquer...

Tizel

Posté

cela devrait t'aider

<?php

$req = mysql_query($sql)

if(mysql_num_rows($req) == 0)

{

    echo "aucun resultat";

}

else

{

    while($data = mysql_fetch_array($req))

    {

        [...]

    }

}

?>

:D

Posté (modifié)

Merci Ldo, cela m'a aidé effectivement : en essayant d'utiliser "if (mysql_num_rows..." , j'avais oublié de refermer des accolades. Moralité : je placerai désormais toutes mes accolades sur des lignes isolées, et les indenterai par des tabulations !

Modifié par Ndeko

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...