Page 1 sur 2

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

Posté : 18 janv. 2006, 23:55
par Kimble
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

Posté : 19 janv. 2006, 00:32
par Truc
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
   }
}

Posté : 19 janv. 2006, 14:49
par Kimble
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 :!: :?:

Posté : 19 janv. 2006, 15:02
par Kimble
: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 ?

Posté : 19 janv. 2006, 15:07
par Maitrepylos
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>

Posté : 19 janv. 2006, 19:01
par Maitrepylos
au fait pourquois tu fais une boucle ici?
while($resultats = mysql_fetch_array($req)) 

Posté : 19 janv. 2006, 19:16
par Truc
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)!

Posté : 19 janv. 2006, 19:59
par Kimble
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:

Posté : 19 janv. 2006, 20:15
par Truc
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

Posté : 19 janv. 2006, 20:24
par Kimble
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>

Posté : 19 janv. 2006, 20:30
par Kimble
Sous PHPmyAdmin avec LEFT JOIN j'ai remplaçé $commune par la commune et il n'y a pas d'erreur...désolé.

Posté : 19 janv. 2006, 20:38
par Truc
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)

Posté : 20 janv. 2006, 16:54
par Kimble
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 ?

Posté : 20 janv. 2006, 18:59
par Truc
"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]

Posté : 20 janv. 2006, 19:44
par Kimble
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.