Sup. ligne vide issue d'une liste déroulante dans un tableau

Eléphant du PHP | 179 Messages

12 oct. 2005, 13:00

Bonjour,

Dans un message précédent (http://www.phpfrance.com/forums/voir_su ... sc-15.php=, vous m'avez aidé à résoudre le problème des lignes vides pour un tableau dynamique.

En résumé, mon exemple était:
Soit une fiche "Film"
Titre du film: ET
Réalisateur du film: Spielberg
Synopsis: Blabla
Année: "rien"

L'objectif était d'éviter qu'une ligne (dans l'exemple la ligne "Année") ne s'affiche si elle était vide.

Le problème a été en partie résolu. Mais lorsque l'information provient d'une liste déroulante où il y a possibilité de choisir un item blanc. Il m'affiche néanmoins la ligne qui ne devrait pas s'afficher.

Voici mon code sur la partie qui me pose problème. Merci pour votre aide.


<?php
	//Récuperation de l identifiant de la donnée//
	$IdSociete = $_POST['IdSociete'];
	?>


<input type="hidden" name="IdSociete" value="<? echo $IdSociete;?>">

	<?php
	//Connection à la base//
	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db(xx", $lien);

	// Sélection de la table societe//
	$requete1="SELECT s.IdSociete, s.NomSociete, s.AutreNomSociete, s.RefGroupe, g.NomGroupe, p.IdProduit, p.NomProduit,
				s.Specialite, s.Presentation, s.InfCompl, s.PaysOrigine, s.Adresse, s.Tel, s.Fax, s.SiteSociete,
				s.NomReprFr, s.AdresseReprFr, s.TelReprFr, s.FaxReprFr, s.MAJ
			FROM societes s, groupes g
			LEFT OUTER JOIN produits p ON s.IdSociete=p.RefSociete
			WHERE IdSociete='".$IdSociete."'";
	$result1=mysql_query($requete1);

	
	$RefGroupe = mysql_result($result1,0,'RefGroupe');
	$NomGroupe = mysql_result($result1,0,'NomGroupe');
	
	mysql_close($lien);
	?>


<table>
  <tbody>
	<?php
		array($NomGroupe, ...);
		
	?>

[...]

	<?php
		}
	if ($NomGroupe!=null && trim($NomGroupe)!="")
		{
	?>
<tr>
	<td style="text-align: justify; vertical-align: top; font-size: 10pt; font-weight: bold; font-family: Arial,sans-serif; color: #ff9900;">
	Nom du groupe :
	</td>
		<?php
 		//Connection à la base//
		$lien = mysql_connect("xx","xx","xx");
		mysql_select_db("xx", $lien);

		//Affichage du nom du groupe//
		$requete2="SELECT IdGroupe, NomGroupe,AutreNomGroupe,Presentation, InfCompl, MAJ
					FROM groupes";
	$result2=mysql_query($requete2);
		while ($val2=mysql_fetch_array($result2))
			{
			if ($val2["IdGroupe"] == $RefGroupe)
				{
				print ('');
?>
<td style="text-align: justify;">
		<span style="font-size: 10pt; font-family: Arial,sans-serif;">
			<a href="aff_xx.php?IdGroupe=<?php print ($val2["IdGroupe"]);?>"><?php echo $val2["NomGroupe"];?></a>
	<?php
				}
			}
	mysql_close($lien);
?>
			</select>
		</span>
	</td>
</tr>
	<?php
		}
[...]

Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Mammouth du PHP | 568 Messages

12 oct. 2005, 13:11

Tu peux rajouter un test sur le nombre de lignes retourné par ta requête... S'il est de 0, alors tu peux glisser une ligne disant qu'il n'y a aucun résultat (ou rien afficher du totu), sinon, tu fais ta boucle...

mysql_num_rows()
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 179 Messages

13 oct. 2005, 11:27

Bonjour heddicmi,

Je te remercie pour ta réponse mais je crois que mon problème est tout autre. J'ai cherché un moment et je crois comprendre où est l'erreur.

Dans mon script A, je sélectionne une société qui peut être affiliée à un groupe ou non.

Dans la base, lorsque j'enregistre une société, soit je sélectionne le groupe auquel la société est affiliée, soit je sélectionne la ligne blanche ( qui correspond à un <option value="">).

Dans mon script B, j'affiche toutes les informations sur la société dont le groupe d'affiliation.

Or lorsque la ligne qui correspond au groupe d'affiliation correspond à la ligne blanche (<option value="">), je voudrais que la totalité de la ligne disparaisse.

Mais avec la condition que j'utilise pour les autres lignes, ça ne fonctionne pas puisque la ligne blanche correspond à une valeur précise.
 if ($NomGroupe!=null && trim($NomGroupe)!="")
Comment lui indiquer que si la valeur est "ligne blanche", je ne veux pas que la ligne s'affiche?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Mammouth du PHP | 568 Messages

13 oct. 2005, 11:50

si tu as "", la sortie de ton test sera FALSE car "" n'est pas différent dans la 2ème condition...

Ne peux tu pas simplement faire un test sur ""... Si c'est différent, tu fais le if, si c'est égal alors rien... Et dans ta base, tu refuses la valeur NULL pour le champ (puisque $NomGroupe est récupéré de la base, je suppose que c'est pour celà que tu test aussi la valeur NULL... Si c'est le cas, fais en sorte que ton champs refuses la valeur NULL... Tu n'auras plus dans ta base que "" ou une valeur quelconque)
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 179 Messages

13 oct. 2005, 12:13

si tu as "", la sortie de ton test sera FALSE car "" n'est pas différent dans la 2ème condition...
Oui c'est pour cela que je ne comprends pas pourquoi il ne fait pas disparaître la ligne.
Si le groupe est égal à l'<option value="">, dans le test [trim($NomGroupe!="")] devrait donner une condition fausse et donc ne devrait pas afficher la ligne.
Et dans ta base, tu refuses la valeur NULL pour le champ (puisque $NomGroupe est récupéré de la base, je suppose que c'est pour celà que tu test aussi la valeur NULL... Si c'est le cas, fais en sorte que ton champs refuses la valeur NULL... Tu n'auras plus dans ta base que "" ou une valeur quelconque)
Dans la conception de ma base une société peut avoir [0,1] groupe. Dans ce cas, je ne peux pas supprimer la valeur NULL. Par ailleurs, pour moi, <option value=""> correspond à la valeur NULL de ma base. Si j'en fais une valeur quelconque, c'est la conception même de mes tables que je remets en question.
Ne peux tu pas simplement faire un test sur ""... Si c'est différent, tu fais le if, si c'est égal alors rien...
J'ai essayé de faire ça mais je ne sais pas comment l'intégrer à mon code. Je me mélange un peu les pinceaux (j'ai du mal avec les conditions à tiroir :oops: )
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Mammouth du PHP | 568 Messages

13 oct. 2005, 12:21

Oui non je me suis fourvoyé là :oops:

Euh... En effet, il ne devrait pas passer dans le IF...

A noter aussi, mais jedis peut-être une connerie, il faudrait vérifier... A noter doncque null est différent de NULL... Je crois...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 oct. 2005, 13:03

Salut, j'ai essayé de remettre un peu d'ordre dans ce code (balises mal placées </select> et </span>):
<?
if ($NomGroupe != null)
    {
    ?>
	<tr>
		<td style="text-align: justify; vertical-align: top; font-size: 10pt; font-weight: bold; font-family: Arial,sans-serif; color: #ff9900;">
			Nom du groupe :
		</td>
        <?php
			//Connection à la base//
			$lien = mysql_connect("xx","xx","xx");
			mysql_select_db("xx", $lien);

			//Affichage du nom du groupe//
			$requete2="SELECT IdGroupe, NomGroupe,AutreNomGroupe,Presentation, InfCompl, MAJ
                    FROM groupes";
			$result2=mysql_query($requete2);
			while ($val2=mysql_fetch_array($result2))
            {
				if ($val2["IdGroupe"] == $RefGroupe)
                {
					print ('');
					?>
					<td style="text-align: justify;">
						<span style="font-size: 10pt; font-family: Arial,sans-serif;">
						<a href="aff_xx.php?IdGroupe=<?php print ($val2["IdGroupe"]);?>"><?php echo $val2["NomGroupe"];?></a>
						</span>
					</td>
					<?php
				}
			}
			mysql_close($lien);
		?>  
		</td>
	</tr>
    <?php
    }
	else 
	echo "pas affiliée à un groupe";
si la valeur récupèrer de la base est NULL (ou "", la meme chose) en faissant ce test => if ($NomGroupe != null) , ça devrai suffir pour ne pas entrer dans le if.

Si tu fait afficher $NomGroupe avant ce test est ce que tu as un affichage quelconque ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 179 Messages

13 oct. 2005, 13:28

Si tu fait afficher $NomGroupe avant ce test est ce que tu as un affichage quelconque ?
Si j'ai une société affiliée à un groupe j'ai une fiche qui se présente ainsi:

Nom de la société: BabaORhum
Nom du groupe: GâteauAlcoolisé

Si je n'ai pas de société affiliée, j'ai une fiche qui se présente ainsi:

Nom de la société: BonbonCaramel
Nom du groupe: [Rien]

Si j'enlève la condition ou si je l'écris comme tu me l'as conseillé, ça ne présente aucune différence.
Soit la condition ne fonctionne pas pour une raison que je ne comprends pas.
Soit le php est mal articulé avec le html
Soit je n'ai plus d'idées #-o
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 oct. 2005, 13:33

Dans ce cas pourquoi ne pas le préciser dans la requete, ajoute:

Code : Tout sélectionner

WHERE IdSociete='".$IdSociete."' AND g.NomGroupe <> '' ";
séléction des lignes dont NomGroupe est différent de NULL

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 179 Messages

13 oct. 2005, 14:03

Ca ne change rien.

Actuellement la condition instaurée est:
Si $NomGroupe n'est pas vide
alors afficher

Est-ce que je ne peux pas faire la condition suivante:
Si $NomGroupe=" "
alors ne pas afficher
sinon afficher

Ou ça ne changerait rien du tout?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 oct. 2005, 15:30

tu peut toujours essayer, mais ça ne changera rien :wink:
mais je comprend pas le pourquoi du comment du mauvais fonctionnement de la requete avec la 2nd condition... tu peut afficher la requete et nous la montrer (echo $requete1) tu peut aussi la tester dans phpmyadmin.

avec cette condition tu n'aura plus de lignes (données) dont "NomGroupe" est vide (NULL).

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 179 Messages

13 oct. 2005, 15:58

Dans ma fiche "Société', j'affiche:

Le nom de la societe
Le nom du groupe auquel elle est affilié
Le nom des produits qu'elle fabrique

Lorsqu'elle n'a pas de produits, la ligne "Nom du/des produit(s)" ne s'affiche pas, ce qui n'est pas le cas pour la ligne "Nom du groupe". Or c'est le même code excepté une ligne

Pour le groupe
if ($val2["IdGroupe"] == $RefGroupe)

Pour le produit
if ($val3["RefSociete"] == $IdSociete)
Est-ce que ce ne serait pas un problème de relation entre les tables?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 oct. 2005, 16:24

problème de relation je pense pas mais si tu demandes de réafficher le tout c'est normal.

tu me dis si je me trompes... l'affichage du nom du groupe doit se faire par la requete "$requete2" ?!

essai comme ça:
<?
$requete2="SELECT IdGroupe, NomGroupe,AutreNomGroupe,Presentation, InfCompl, MAJ 
			FROM groupes
			WHERE IdGroupe=".$RefGroupe." 
			AND NomGroupe <> '' ";
			echo "<p>".$requete2."</p>";
            $result2=mysql_query($requete2);// ligne qui affiche la requete a tester dans phpmyadmin
            $nb_lignes=mysql_num_rows($requete2);
            echo "nombres de lignes de retour ".$nb_lignes; // si NomGroupe est NULL alors ce chiffre doit etre a 0 sinon a 1
            while ($val2=mysql_fetch_array($result2))
            {               
                ?>
                 <td style="text-align: justify;">
                    <span style="font-size: 10pt; font-family: Arial,sans-serif;">
                    <a href="aff_xx.php?IdGroupe=<?php print ($val2["IdGroupe"]);?>"><?php echo $val2["NomGroupe"];?></a>
                    </span>
                 </td>
              <?php                
            }
            mysql_close($lien);
        ?>  
et la il n'y aura comme resultat de la requete que les données correspondant à $RefGroupe et dont le NomGroupe est différent de NULL et "" .

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 oct. 2005, 16:37

ou en plus correct:
$requete2="SELECT IdGroupe, NomGroupe,AutreNomGroupe,Presentation, InfCompl, MAJ
            FROM groupes
            WHERE IdGroupe=".$RefGroupe."
            AND NomGroupe IS NOT NULL ";
puisque si j'ai bien compris dans la BD tu as NULL dasn les champs

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 179 Messages

16 oct. 2005, 05:51

Bonjour,

Finalement grâce à ta requête modifiée j'ai réussi. J'ai bidouillé un moment pour voir ce qui convenait le mieux pour l'affichage. J'ai finalement retenu cette version:

<?php
		}
	if ($NomGroupe!=null && trim($NomGroupe)!="")
		{

	?>
<tr>
	<td style="text-align: justify;">
	<?php
	//Connection à la base//
	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db("xx", $lien);

	//Affichage du nom des produits//
	$requete2="SELECT IdGroupe, NomGroupe,AutreNomGroupe,Presentation, InfCompl, MAJ
            FROM groupes
            WHERE IdGroupe='".$RefGroupe."'";
    $result2=mysql_query($requete2);
		while ($val2=mysql_fetch_array($result2))
            {               
    ?>
	Nom du groupe :
	</td>
    <td style="text-align: justify;">
    	<span style="font-size: 10pt; font-family: Arial,sans-serif;">
    	<a href="xx.php?IdGroupe=<?php print ($val2["IdGroupe"]);?>"><?php echo $val2["NomGroupe"];?></a>
    	</span>
    </td>
    <?php                
            }
    mysql_close($lien);
    ?>
</tr>
Encore sauvée de la débâcle :wink:
Merci :agenouille: :agenouille:
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!