Petit probléme avec un IF et un ELSE...

Eléphant du PHP | 96 Messages

18 janv. 2006, 23:55

Bonjour,
J'affiche un tableau par une requéte et jusque là tout ce passe bien ! :wink:
J'ai 1 champ "commune" qui vient d'une table "vente"...
je viens de créer une nouvelle table "info_mairies" qui donne des infos sur cette commune et qui va chercher les données dans 1 champ appelé "mairies". Comme cette table est toute fraîche, elle n'est pas forcément alimentée.
Je voudrais créer une condition :
"IF"
Si le champ commune (table vente) affiche TOULOUSE et qu'il n'y ait pas de
données concernant TOULOUSE dans (table info_mairies), je voudrais afficher une icone vers une page (que j'ai déjà réalisé) par exemple : inserer des infos dans cette mairie.
ELSE
sinon, les 2 champs correspondent, dans les tables " ventes" et "info_mairies" j'aimerais afficher une autre icone vers une page (que j'ai déjà réalisé) par exemple : afficher les infos sur cette mairie ...
j'espére que c'est clair comme de l'eau de roche ! :lol: merci.
Voilà les 2 requétes :

Requéte sur le champ "commune".
 <?php 
//affiche la commune et le lien pour voir ttes les ventes de cette commune
//commune_choisie appelle la page commune_choisie.php
// la ligne ci-dessous echappe le signe apostrophe "'" par ex : L'isle Jourdain
		$commune = str_replace ("'", "%",$vente['commune']);
		$req = mysql_query("select * from vente where commune LIKE '$commune'");
		$resultats = mysql_num_rows($req);
		echo '<td bgcolor='.$bgcolor.'>';?><span class="Style8">
		<?php $lien="index.php?liste=commune_choisie&choix=commune&ville_choisi=".$vente['commune'];  
		{?>	  
		<?php echo ('<a href="'.$lien.'" target="_top" title=" Il y a '.$resultats.' construction(s) à '.$vente['commune'].' ">'.$vente ['commune'].'</a>'); 
		}?>
Requéte sur le champ "mairie"
<?php // la page info_mairie.ph affiche les infos sur les mairies et DDE
		echo '<td bgcolor='.$bgcolor.'>';?><span class="Style8">
		<?php $lien="index.php?liste=info_mairie&choix&ville_choisi=".$vente['commune'];    
		afficher_url($lien,"<img src=\"images/info_mairie.gif\" width=\"20\" height=\"20\" border=\"0\"alt=\" Infos sur la mairie de ".$vente['commune']." \">");?>
		</span></td>
Là, les variables passent bien, aucun probléme.
Je ne connais pas grand chose du IF et du ELSE...merci
Kimble

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 janv. 2006, 00:32

Salut,

tu dois faire une requete qui prend des valeur sur les deux tables, donc une jointure (Partie SQL)
$sql="SELECT v.commune, i.mairies from vente v INNER JOIN info_mairies i on v.ID = i.ID where commune LIKE '$commune'";
si le lien entre les deux tables est "ID" (sinon mettre les bonnes valeurs)

Ensuite lire les données renvoyées par la requete:
$req = mysql_query($sql);
while($resultats = mysql_fetch_array($req))
{
   if($resultats['mairies'] == "")
   {
       // dans ce cas afficher icone si pas de données dans la table info_mairies
   }
   else
   {
      // ici afficher icone: consultation données
   }
}

/!\ 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 | 96 Messages

19 janv. 2006, 14:49

Salut Truc,
Ca marche mais l'icone (s'il n'y a pas d'infos sur la mairie) ne s'affiche pas...
Voilà ce que j'ai fait :
<?php echo '<td bgcolor='.$bgcolor.'>';?><span class="Style8">
		<?php $sql="SELECT v.commune, i.mairie from vente v INNER JOIN mairies_info i on v.id_vente = i.ID where commune LIKE '$commune'"; 
		$req = mysql_query($sql); 
		while($resultats = mysql_fetch_array($req)) 
{ 
  		 if($resultats['mairie'] == "") 
{ 
       echo "<img src=\"images/[b]pas_mairie.gif\[/b]" alt=\"Oups ! pas d'infos sur cette mairie !\" width=\"21\" height=\"21\">";
   } 
   else 
   { 
      $lien="index.php?liste=info_mairie&choix&ville_choisi=".$vente['commune'];    
		afficher_url($lien,"<img src=\"images/ok_mairie.gif\" width=\"21\" height=\"21\" border=\"0\"alt=\" Infos sur la mairie de ".$vente['commune']." \">");?>
		</span></td>
Donc la vérification ne se fait pas :!: :?:

Eléphant du PHP | 96 Messages

19 janv. 2006, 15:02

:oops: En fait non ça ne marche pas ! il m'affiche l'icone ok_mairie.gif que sur le premier enregistrement...c'est à dire l'id n°1 ! une idée ?

Mammouth du PHP | 1029 Messages

19 janv. 2006, 15:07

et avec les corrections de faute de frappe
<?php echo '<td bgcolor='.$bgcolor.'>';?><span class="Style8">
        <?php $sql="SELECT v.commune, i.mairie from vente v INNER JOIN mairies_info i on v.id_vente = i.ID where commune LIKE '$commune'";
        $req = mysql_query($sql);
        while($resultats = mysql_fetch_array($req))
{
           if($resultats['mairie'] == "")
{
       echo "<img src=\"images/pas_mairie.gif\" alt=\" Oups ! pas d'infos sur cette mairie !\" width=\"21\" height=\"21\">";
   }
   else
   {
      $lien="index.php?liste=info_mairie&choix&ville_choisi=".$vente['commune'];    
        afficher_url($lien,"<img src=\"images/ok_mairie.gif\" width=\"21\" height=\"21\" border=\"0\"alt=\" Infos sur la mairie de ".$vente['commune']." \">");
   }
}
?>
        </span></td>
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

19 janv. 2006, 19:01

au fait pourquois tu fais une boucle ici?
while($resultats = mysql_fetch_array($req)) 
L'expérience est la somme de toutes nos erreurs.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 janv. 2006, 19:16

au fait pourquois tu fais une boucle ici?
while($resultats = mysql_fetch_array($req)) 
je suppose qu'il y a plusieurs villes qui commencent par "Li"... donc si la recherche faite avec "Li" un certain nombre de communes en sortira donc une boucle :wink:

Commences par afficher la requete avec un echo:
echo $sql;
fait un copier coller, du résultat affiché, dans phpmyadmin pour verifier le retour de la requete.

Le test ne fonctionne peut être pas parce que tu as mis "null" en valeur par défaut et non "" (vide)!

/!\ 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 | 96 Messages

19 janv. 2006, 19:59

Aprés le test
<?php echo $sql;?>
et passé dans PHPmyAdmin avec succés...
1ére ligne m'affiche l'icone "ok_mairie" il y a des infos dans la table "mairies_info"
SELECT v.commune, i.mairie from vente v INNER JOIN mairies_info i on v.id_vente = i.ID where commune LIKE 'Carla Bayle'
2éme ligne n'affiche aucune icone, alors que j'ai entré à la main des infos sur la mairie dans la table "mairies_info"
SELECT v.commune, i.mairie from vente v INNER JOIN mairies_info i on v.id_vente = i.ID where commune LIKE 'Montech' 
3éme ligne n'affiche aucune icone, il n'y a aucune infos sur la mairie dans la table "mairies_info"
SELECT v.commune, i.mairie from vente v INNER JOIN mairies_info i on v.id_vente = i.ID where commune LIKE 'Fronton' 
et ainsi de suite...

J'ai bien sur essayé avec et sans NULL, :lol: toujours pareil
if($resultats['mairie'] == "")

A mon avis il ne prend que l'ID de la 1ére ligne... :cry:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 janv. 2006, 20:15

remplace "INNER JOIN" par "LEFT JOIN"

regarde toujours le résultat sous phpmyadmin avant de passer au php, verifier le nombre de lignes de données qui correspodent à la requete

/!\ 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 | 96 Messages

19 janv. 2006, 20:24

Sous PHPmyAdmin :
MySQL a répondu:

#1064 - Erreur de syntaxe pr賠de '$sql="SELECT v.commune, i.mairie from vente v LEFT JOIN mairies_' ࠬa ligne 1

Et sous PHP:
Ca m'affiche 3 ou 4 icones par lignes :!: :!: :!: voilà la source sur une ligne :
<td bgcolor=#bcdd95><span class="Style8">
<?php SELECT v.commune, i.mairie from vente v LEFT JOIN mairies_info i on v.id_vente = i.ID where commune LIKE 'Carla Bayle'<a href="index.php?liste=info_mairie&choix&ville_choisi=Carla Bayle" target=_top><img src="images/ok_mairie.gif" width="21" height="21" border="0"alt=" Infos sur la mairie de Carla Bayle "></a><img src="images/pas_mairie.gif" alt=" Oups ! pas d'infos sur cette mairie !" width="21" height="21"><img src="images/pas_mairie.gif" alt=" Oups ! pas d'infos sur cette mairie !" width="21" height="21"> ?>
        </span></td>

Eléphant du PHP | 96 Messages

19 janv. 2006, 20:30

Sous PHPmyAdmin avec LEFT JOIN j'ai remplaçé $commune par la commune et il n'y a pas d'erreur...désolé.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 janv. 2006, 20:38

illisible ce code que tu propose :?
il faut toujour présenter au plus clair :wink:
<td bgcolor="<? echo $bgcolor; ?>">
<span class="Style8">
<?php 
$sql="SELECT v.commune, i.mairie from vente v LEFT JOIN mairies_info i on v.id_vente = i.ID where commune LIKE '%".$commune."%'";
$req = mysql_query($sql);

while($resultats = mysql_fetch_array($req))
{
    if($resultats['mairie'] == null)
	{
		echo "<img src=\"images/pas_mairie.gif\" alt=\" Oups ! pas d'infos sur cette mairie !\" width=\"21\" height=\"21\"> \r\n";
	}
	else
	{
		$lien="index.php?liste=info_mairie&choix&ville_choisi=".$vente['commune'];    
		afficher_url($lien,"<img src=\"images/ok_mairie.gif\" width=\"21\" height=\"21\" border=\"0\"alt=\" Infos sur la mairie de ".$vente['commune']." \"> \r\n");
	}
}
?>
</span>
</td>
en passant j'ai aussi ajouter des % pour permettre une recherche sur une commune ou celles qui ont le mot recherché en commun.

Le résultat sous phpmyadmin correspond-t-il a ce que tu souhaites ? avec des colonnes égales à "null" en principe donc celles qui n'on pas de description (complémént)

/!\ 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 | 96 Messages

20 janv. 2006, 16:54

j'ai avançé un petit peu... :)
J'ai modifié la requéte :
à la place de
<?php v.id_vente = i.ID where commune LIKE '%".$commune."%'"; ?>
j'ai mis :
<?php v.id_vente = i.ID where i.mairie LIKE '%".$commune."%'"; ?>
La requéte :
<?php $sql="SELECT v.commune, i.mairie from vente v INNER JOIN mairies_info i on v.id_vente = i.ID where i.mairie LIKE '%".$commune."%'"; ?>
L'icone ok_mairie s'affiche bien quand il y a des données dans le champ mairie...mais toujours pas d'affichage de l'icone pas_mairie si le champ mairie est vide ! le IF ne fonctionne pas ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

20 janv. 2006, 18:59

"LEFT JOIN" a la place de "INNER JOIN", pour que les enregistrements de la table "vente" qui n'ont pas de lien dans la table "mairies_info" soient pris en compte:
<?php $sql="SELECT v.commune, i.mairie from vente v LEFT JOIN mairies_info i on v.id_vente = i.ID where v.commune LIKE '%".$commune."%'"; ?>
vaut mieux garder "v.commune LIKE" et non "i.mairie LIKE" pour sortir les enregistrements de la table "vente"[/img]

/!\ 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 | 96 Messages

20 janv. 2006, 19:44

Avec "v.commune LIKE" il affiche l'icone "ok_mairie" mais seulement sur l'ID n°1 :!:
Avec "i.mairie LIKE" il affiche l'icone "ok_mairie" sur tous les enregistrements quand les champs mairie et commune correspondent :!:
Par contre quand il n'y aucune correspondance entre les 2 champs il n'affiche rien !! quand je dis il n'affiche rien, le tableau s'affiche quand même... :?: :?: je ne comprend pourquoi le IF ne fonctionne pas.