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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Petit probléme avec un IF et un ELSE...

par Kimble » 24 janv. 2006, 12:07

Salut, aprés 3 jours de vacances, je reviens...
Bon, ça fonctionne bien, j'ai juste rajouté dans la requéte un petit DISTINCT. Merci et à bientôt pour un autre probléme :D
Kimble

par Truc » 21 janv. 2006, 16:38

Voila la requete ne diffère pas beaucoup de celle d'avant hormis la présence du champ "id_vente" de la table "mairies_info"
<?php $sql="SELECT v.commune, i.mairie from vente v LEFT JOIN mairies_info i on v.id_vente = i.id_vente where v.commune LIKE '%".$commune."%'"; ?>
Donc les champs "id_vente" doivent être les mêmes pour les deux tables s'il s'agit de la mairie d'une même commune.

par Truc » 21 janv. 2006, 16:18

J'ai crée un nouveau champ "id_vente", mais je ne vois pas comment à partir de mon formulaire d'insertion des données, comment l'auto-alimenter ?
justement il ne faut pas l'autoincrémenter, mais donner à ce champ l'id correspondant à la commune.



Si dans la table vente:

id_vente=12 (autoincrément, OK)
commune=toulouse

alors il faut mettre dans la table "info_mairie":

id (en autoincrément)
id_vente=12
mairie=toulouse
Et si la recherche ne se faisait que sur commune et mairie ?
ce serai possible mais pas évident, par principe et facilité on fait toujours correspondre deux tables avec des entiers.

Je vais faire quelques essaies avec ça.

par Kimble » 21 janv. 2006, 16:11

J'ai crée un nouveau champ "id_vente", mais je ne vois pas comment à partir de mon formulaire d'insertion des données, comment l'auto-alimenter ?

Code : Tout sélectionner

-- -- Structure de la table `mairies_info` -- CREATE TABLE `mairies_info` ( `id` int(11) NOT NULL auto_increment, `id_vente` int(11) default NULL, `dde` varchar(30) default NULL, `mairie` varchar(30) default NULL, `ad_dde` varchar(255) default NULL, `cp_dde` varchar(20) default NULL, `tel_dde` varchar(20) default NULL, `fax_dde` varchar(20) default NULL, `ad_mairie` varchar(255) default NULL, `cp_mairie` varchar(20) default NULL, `tel_mairie` varchar(20) default NULL, `fax_mairie` varchar(20) default NULL, `site_web` varchar(255) default NULL, `idpatro` int(11) default NULL, `instructeur` varchar(30) default NULL, `jour_mairie` varchar(255) default NULL, `jour_dde` varchar(255) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Infos sur les mairies' AUTO_INCREMENT=6 ; -- -- Contenu de la table `mairies_info` -- INSERT INTO `mairies_info` VALUES (1, NULL, 'Grenade', 'Carla bayle', '78, Avenue du 8 mai 1945', '31600', '05.62.79.81.60', '05.63.32.56.98', '1 impasse de l''enclos', '31120', '05.61.76.71.76', '05.63.98.58.21', 'http://www.Carlabayle.com', 2, 'Letourmi', 'Tous les jours', 'Tous les jours');

Code : Tout sélectionner

-- Structure de la table `vente` -- CREATE TABLE `vente` ( `id_vente` int(11) NOT NULL auto_increment, `client` varchar(100) NOT NULL default '', `idsecteur` int(11) default NULL, `commune` varchar(50) default NULL, `date` varchar(50) default NULL, `idcategorie` int(11) default NULL, `adresse` blob, `idcommercial` int(11) default NULL, `idannexe` int(11) default NULL, `idfondation` int(11) default NULL, `idsol` int(11) default NULL, `idtoiture` int(11) default NULL, `idmillesime` int(11) default NULL, `idgeotechnicien` int(11) default NULL, `notes` text, `surface` varchar(150) default NULL, `profondeur` varchar(50) default NULL, PRIMARY KEY (`id_vente`), FULLTEXT KEY `client` (`client`), FULLTEXT KEY `commune` (`commune`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Détails des ventes' AUTO_INCREMENT=332 ; -- -- Contenu de la table `vente` -- INSERT INTO `vente` VALUES (1, 'Adanero Donderis', 4, 'Carla Bayle', '10 mai 2005', 24, 1, 276, 3, 3, 1, 1, 11, 2, 'En cours de permis', '86', '4.50');
Et si la recherche ne se faisait que sur commune et mairie ?

par Truc » 21 janv. 2006, 15:35

avant d'aller plus loin... je me demande comment peut s faire le lien entre les tables alors que le champs qui doivent le faire (le lien) sont tous deux en autoincément !!

Il faudrai un champ séparé dans la table "mairies_info" qui rappel le même ID (id_vente) de la table vente !

sinon le lien aura du mal a se faire correctement.

Apres si tu pouvais aussi donner de quoi remplir les tables :wink:
(mais peut etre qu'en y ajoutant ce champ manquant le problème sera réglé)

par Kimble » 21 janv. 2006, 13:23

Merci pour ta patience :)

La table "vente" :

Code : Tout sélectionner

-- phpMyAdmin SQL Dump -- version 2.6.1 -- http://www.phpmyadmin.net -- -- Serveur: localhost -- Généré le : Samedi 21 Janvier 2006 à 10:14 -- Version du serveur: 4.1.9 -- Version de PHP: 4.3.10 -- -- Base de données: `toulouse` -- -- -------------------------------------------------------- -- -- Structure de la table `vente` -- CREATE TABLE `vente` ( `id_vente` int(11) NOT NULL auto_increment, `client` varchar(100) NOT NULL default '', `idsecteur` int(11) default NULL, `commune` varchar(50) default NULL, `date` varchar(50) default NULL, `idcategorie` int(11) default NULL, `adresse` blob, `idcommercial` int(11) default NULL, `idannexe` int(11) default NULL, `idfondation` int(11) default NULL, `idsol` int(11) default NULL, `idtoiture` int(11) default NULL, `idmillesime` int(11) default NULL, `idgeotechnicien` int(11) default NULL, `notes` text, `surface` varchar(150) default NULL, `profondeur` varchar(50) default NULL, PRIMARY KEY (`id_vente`), FULLTEXT KEY `client` (`client`), FULLTEXT KEY `commune` (`commune`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Détails des ventes' AUTO_INCREMENT=332 ;
La table "mairies_info" :

Code : Tout sélectionner

-- phpMyAdmin SQL Dump -- version 2.6.1 -- http://www.phpmyadmin.net -- -- Serveur: localhost -- Généré le : Samedi 21 Janvier 2006 à 10:17 -- Version du serveur: 4.1.9 -- Version de PHP: 4.3.10 -- -- Base de données: `toulouse` -- -- -------------------------------------------------------- -- -- Structure de la table `mairies_info` -- CREATE TABLE `mairies_info` ( `id` int(11) NOT NULL auto_increment, `dde` varchar(30) default NULL, `mairie` varchar(30) default NULL, `ad_dde` varchar(255) default NULL, `cp_dde` varchar(20) default NULL, `tel_dde` varchar(20) default NULL, `fax_dde` varchar(20) default NULL, `ad_mairie` varchar(255) default NULL, `cp_mairie` varchar(20) default NULL, `tel_mairie` varchar(20) default NULL, `fax_mairie` varchar(20) default NULL, `site_web` varchar(255) default NULL, `idpatro` int(11) default NULL, `instructeur` varchar(30) default NULL, `jour_mairie` varchar(255) default NULL, `jour_dde` varchar(255) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Infos sur les mairies' AUTO_INCREMENT=6 ;
Le but est de dire que si le champ "MAIRIE" de la table "MAIRIES_INFO" ne contient aucun enregistrement, par exemple TOULOUSE et que dans le champ "COMMUNE" de la table "VENTE" le mot "TOULOUSE" y figure donc on affiche une icone pour prévenir qu'il n'y a aucun enregistrement concernant "TOULOUSE" dans le champ "MAIRIE" de la table "MAIRIES_INFO". En fait, la vérification ne se fait que sur ces 2 champs.
IF
le champ "COMMUNE" contient "TOULOUSE" et le champ "MAIRIE" est vide on affiche une icone.
ELSE
le champ "COMMUNE" et le champ "MAIRIE" contiennent le mot "TOULOUSE" donc on affiche une autre icone pour dire qu'il y a des infos dans la table "MAIRIES_INFO" qui concernent "TOULOUSE".

par Truc » 20 janv. 2006, 22:27

La table qui contient toutes les communes est bien "Vente" ?

La table qui contient les infos sur les mairies est la table "mairies_info" ?

Il y a donc plus d'enregistrements dans la table "Vente" que la table "mairies_info".

On essaie de récupérer tous les enregistrements de la table "Vente" (qu'ils aient ou non une correspondance dans l'autre table) pour ce faire on utilise:
... FROM vente v LEFT JOIN ...
Les champs qui font le lien entre les deux tables sont "id_vente" (pour vente) et ID (pour mairies_info).

Et à la base on recherche une Commune et non une mairie, donc on affiche les données sur la Commune les infos sur la mairie si elles existent dans la table "info_mairie".

Donc je ne vois pas pourquoi le résultat n'est pas celui attendu :?
Peux tu me faire un copier/coller de la structure des tables pour faire des essais en local ?

par Kimble » 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.

par Truc » 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]

par Kimble » 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 ?

par Truc » 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)

par Kimble » 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é.

par Kimble » 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>

par Truc » 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

par Kimble » 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: