8721 sujets

Développement web côté serveur, CMS

Bonjour,

après une requête SQL, je cherche à remplacer les abréviation d'une colonne par le mot complet. J'y vais à l'aide d'une array comme suit:
$provinces = array('AL' => "Alberta", 
						'BC' => "Colombie-Britanique",
						'ON' => "Ontario",
						'SK' => "Saskatchewan",
						'QC' => "Québec");


Mais je n'arrive pas à faire un affichage correct par la suite...

Si je fais comme ça:
foreach($provinces as $key => $val) {
		$recherche = "SELECT * FROM prostaff WHERE pays='Canada' AND categorie='pro' AND province='$key' ORDER BY nom NOT IN ('Gagnon'), groupe NOT IN ('Buck Addict'), nom";
		$requete = mysql_query($recherche);
		while ($info = mysql_fetch_assoc($requete)){
}

Les noms s'affiche selon l'ordre alphabétique des provinces, alors que je veux que ça soit selon l'ordre alphabétique des noms!

Je cherche également à faire afficher 2 noms en particulier avant les autres...
Modifié par juliesunset (10 Dec 2012 - 16:50)
Bonsoir,

Tu as 2 problèmes ou j'ai du mal à saisir ?

D'où sortent tes abbréviations et leurs équivalents ? Il serait peut être judicieux de stockés ces données dans une table pour les extraire via une jointure SQL.

Pourrais-tu êtres plus précise ?
Problème 1 : Les abréviations des provinces sont stocké dans une table (prostaff) avec d'autres info... Il n'y que sur une seul page que je doit changé les abréviation stocké par le mot complet, d'où le array.

Problème 2: Il s'agit de faire l'affichage en ordre alphabétique de nom. Pour le moment, avec le code donné, l'ordre se fait par provinces.
Donc, pour le problème 1, je te propose de rajouter un champs dans ta table, qui sera le nom complet de l'abbréviation (ça sera d'autant plus simple pour la mise à jour plus tard, tout sera centralisé au même endroit), et ainsi, tu peux directement obtenir le nom complet d'une simple requête SQL.

Pour le problème 2, le ORDER est en général toujours placé à la fin de la requête ?

Ce qui donnerait plus ceci :

SELECT * FROM prostaff WHERE pays='Canada' AND categorie='pro' AND province='$key' WHERE nom NOT IN ('Gagnon'), groupe NOT IN ('Buck Addict') ORDER BY nom
Mmmm, non désolé, je n'aime pas du tout cette solution. Pourquoi créer une nouvelle colonne alors que c'est possible de faire le changement dans le code de la page? Je doit ajouter plus de 300 lignes juste pour ça? On parle d'une seule page, ici...
Modérateur
Bonjour,

Je considère également qu'il est plus judicieux de stocker cette information dans la base de données. Ce ne sera pas plus long que de créer manuellement un array. Je parle d'avoir une table pays et/ou provinces qui contient l'abbréviation et le nom complet. Ensuite, il suffit de faire une jointure entre les tables.

Ce sera plus facile à mettre en place, plus propre, plus performant, plus facile à maintenir et à réutiliser dans d'autres pages dans le futur.
Ok, puisque vous êtes 2 à me conseiller la même chose, j'en prend note... c'est juste que je vais aussi devoir modifier mon formulaire de gestion pour qu'on puisse entrer "2 fois la même info"... ce que ne me semble pas logique...

Sinon pour ce qui est de ma problématique, voici où j'en suis, c'est le "mieux" que j'ai pu faire après plusieurs recherche... Sauf que ça m'affiche chaque nom pour chacune des provinces...
<ul class="pro">
		<?php
		$recherche = "SELECT * FROM prostaff WHERE pays='Canada' AND categorie='pro' ORDER BY nom NOT IN ('Gagnon'), groupe NOT IN ('Buck Addict')";
		$requete = mysql_query($recherche);
		while ($info = mysql_fetch_array($requete)){
			
			$province = $info['province'];
			$provinces = array('AL' => "Alberta", 
								'BC' => "Colombie-Britanique",
								'ON' => "Ontario",
								'SK' => "Saskatchewan",
								'QC' => "Qu&eacute;bec");
			foreach($provinces as $key => $val){
				$provinces['$key'] = $province['$val'];
		?>
    	<li>
        <?php
			$groupe = $info['groupe'];
			$nom = $info['nom'];
			$nom_complet = $nom.', '.$info['prenom'];
		
			$nom_lien = $info['prenom'].' '.$nom;
			$pastille = $info['pastille'];
			
			if (!empty($groupe)){
				?>
            <a onclick="javascript:showPopup('prostaff_info.php?prostaff=<?php  echo $groupe ?>','scrollbars=yes, width=900')"><img src="/Images/Partenaires/HomeCAN/<?php echo $pastille ?>.png" width="50" height="50" alt="" />
				<?php 
				echo $groupe."<br />"
					.$val."</a>";
            }
			elseif(!empty($groupe) && !empty($nom)){
				?>
        	<a href="http://www.spypoint.com/FR/partenaires/Canada/<?php  echo $groupe ?>.php" width="900" onclick='showPopup(this.href);return(false);scrollbars=yes'><img src="/Images/Partenaires/HomeCAN/<?php echo $pastille ?>.png" width="50" height="50" alt="" />
				<?php  
				echo $groupe."<br />"
					.$val."</a>";
			}
			else{
				?>
             <a onclick="javascript:showPopup('prostaff_info.php?prostaff=<?php  echo $nom_lien ?>','scrollbars=yes, width=900')">
        		<img src="/Images/Partenaires/HomeCAN/<?php echo $pastille ?>.png" width="50" height="50" alt="" />
				<?php  
				echo $nom_complet."<br />"
					.$val."</a>";
			}
			?>
        </li>
        <?php
		}
		}
	?>
    </ul>
Modérateur
juliesunset a écrit :
Ok, puisque vous êtes 2 à me conseiller la même chose, j'en prend note... c'est juste que je vais aussi devoir modifier mon formulaire de gestion pour qu'on puisse entrer &quot;2 fois la même info&quot;... ce que ne me semble pas logique...


Je ne suis pas sûr qu'on se comprenne bien. Voici un exemple plus concret :

tblProvinces (Code, Nom)
QC, Québec
ON, Ontario
AL, Alberta
etc...

tblProStaff (ID, Prenom, ProvinceCode)
1, Mario, QC
2, Jessica, ON
3, Julie, AL
4, Luigi, QC

Je ne vois pas où tu dois entrer deux fois la même info versus ton array. Dans le formulaire de création d'un membre de l'équipe, tu mets un menu déroulant qui permet de sélectionner le code de la province et le libellé sera le nom de la province. Tu ne stockes pas le nom de la province dans prostaff, juste le code. C'est bien ce que tu fais déjà, non?

Après, tu peux faire des requêtes sur l'une ou l'autre table, ou faire une jointure entre les deux selon les besoins.

Pour ton problème principal, j'essayerai d'y revenir si je me trouve un peu de temps.

Bon courage!
Modifié par Tony Monast (05 Dec 2012 - 16:54)
Ah ok! Effectivement on s'était mal compris. Donc je crée carrément une nouvelle table. Parce que présentement ça comme tu montre en 2e:
tblProStaff (ID, Prenom, ProvinceCode)
1, Mario, QC
2, Jessica, ON
3, Julie, AL
4, Luigi, QC

Et le formulaire est comme tu le décris.

Il faudra donc que j’étudie les jointures... une référence à me donner?
Modérateur
Les mots clés à rechercher sur google sont "SQL INNER JOIN" et "SQL LEFT JOIN". Ça devrait te donner pas mal de résultats avec des exemples concrets. Je n'ai pas un site en particulier en tête.
Après étude du tuto voici ce que ça donne... c'est moins compliqué que je pensais, mais je n'arrive pas à faire l'affichage, ça m'indique une erreur.

"Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/ggteleco/public_html/FR/partenaires/pro-staff-canada4.php on line 46"

<ul class="pro">
		<?php
		$recherche = 
			"SELECT PRO.'pastille', PRO.'nom', PRO.'prenom', PRO.'groupe', PRO.'province', ST.'prov'
			FROM 'prostaff' PRO
			LEFT JOIN 'provinces' ST
			ON PRO.'province' = ST.'prov'
			WHERE PRO.'pays'='Canada'
			AND PRO.'categorie='pro'";
			
		$requete = mysql_query($recherche);
		while ($info = mysql_fetch_array($requete)){
		?>
    	<li>
        	<?php
			$province = $info['prov'];
			$groupe = $info['groupe'];
			$nom = $info['nom'];
			$nom_complet = $nom.', '.$info['prenom'];
			$nom_lien = $info['prenom'].' '.$nom;
			$pastille = $info['pastille'];
			
			$groupe_vide = '';
			$nom_vide = '';
			
			if (!empty($groupe)){
				?>
            <a onclick="javascript:showPopup('prostaff_info.php?prostaff=<?php  echo $groupe ?>','scrollbars=yes, width=900')"><img src="/Images/Partenaires/HomeCAN/<?php echo $pastille ?>.png" width="50" height="50" alt="" />
				<?php 
				echo $groupe."<br />"
					.$province."</a>";
            }
			elseif(!empty($groupe) && !empty($nom)){
				?>
        	<a href="http://www.spypoint.com/FR/partenaires/Canada/<?php  echo $groupe ?>.php" width="900" onclick='showPopup(this.href);return(false);scrollbars=yes'><img src="/Images/Partenaires/HomeCAN/<?php echo $pastille ?>.png" width="50" height="50" alt="" />
				<?php  
				echo $groupe."<br />"
					.$province."</a>";
			}
			else{
				?>
             <a onclick="javascript:showPopup('prostaff_info.php?prostaff=<?php  echo $nom_lien ?>','scrollbars=yes, width=900')">
        		<img src="/Images/Partenaires/HomeCAN/<?php echo $pastille ?>.png" width="50" height="50" alt="" />
				<?php  
				echo $nom_complet."<br />"
					.$province."</a>";
			}
			?>
        </li>
        <?php
		}
	?>
    </ul>
Bon après recherche et bûchage de tête, j'ai finalement trouvé mon erreur.

Ça va comme suis et ça fonctionne très bien:
<ul class="pro">
		<?php
		$recherche = 
			"SELECT *
			FROM `prostaff` PRO
			LEFT JOIN `provinces` ST
			ON PRO.`province` = ST.`abbr`
			WHERE PRO.`pays`='Canada'
			AND PRO.`categorie`='pro'
			ORDER BY 
				PRO.`nom` NOT IN ('Gagnon'), 
				PRO.`groupe` NOT IN ('Buck Addict'),
				PRO.`nom`, 
				PRO.`groupe`";
		$requete = mysql_query($recherche);
		while ($info = mysql_fetch_array($requete)){
		?>
    	<li>
        	<?php
			$province = $info['prov'];
			$groupe = $info['groupe'];
			$nom = $info['nom'];
			$nom_complet = $nom.', '.$info['prenom'];
			$nom_lien = $info['prenom'].' '.$nom;
			$pastille = $info['pastille'];
			
			$groupe_vide = '';
			$nom_vide = '';
			
			if (!empty($groupe)){
				?>
            <a onclick="javascript:showPopup('prostaff_info.php?prostaff=<?php  echo $groupe ?>','scrollbars=yes, width=900')"><img src="/Images/Partenaires/HomeCAN/<?php echo $pastille ?>.png" width="50" height="50" alt="" />
				<?php 
				echo $groupe."<br />"
					.$province."</a>";
            }
			elseif(!empty($groupe) && !empty($nom)){
				?>
        	<a href="http://www.spypoint.com/FR/partenaires/Canada/<?php  echo $groupe ?>.php" width="900" onclick='showPopup(this.href);return(false);scrollbars=yes'><img src="/Images/Partenaires/HomeCAN/<?php echo $pastille ?>.png" width="50" height="50" alt="" />
				<?php  
				echo $groupe."<br />"
					.$province."</a>";
			}
			else{
				?>
             <a onclick="javascript:showPopup('prostaff_info.php?prostaff=<?php  echo $nom_lien ?>','scrollbars=yes, width=900')">
        		<img src="/Images/Partenaires/HomeCAN/<?php echo $pastille ?>.png" width="50" height="50" alt="" />
				<?php  
				echo $nom_complet."<br />"
					.$province."</a>";
			}
			?>
        </li>
        <?php
		}
	?>
    </ul>


Merci beaucoup pour votre aide et les piste donné, ça ma beaucoup aidé!