Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/08/2011, 09h49   #1
Membre habitué
 
Avatar de lolymeupy
 
Inscription : octobre 2006
Messages : 329
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2006
Messages : 329
Points : 106
Points : 106
Envoyer un message via MSN à lolymeupy
Par défaut Affichage requête SQL dans tableau

Bonjour,
j'ai un petit souçi avec l'affichage d'une requête dans un tableau.
Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
$header = false;
if (is_array($result)) {
	echo '<table style="border-collapse: collapse">';
	foreach($result as $row) {
		if (!$header) {
			echo '<tr bgcolor=#f4e7ca>';
			$keys = array_keys($row);
			foreach($keys as $col) {
			if ($col != 'couleur' ) {
				echo '<td style="border: solid 1px #DDDDDD; font-weight: bold; text-align: center; padding: 3px">' . $col . '</td>';
				}
			}
			echo '</tr>';
			$header = true;
		}
		echo '<tr>';
		foreach($row as $value) {
			echo '<td style="border: solid 1px #DDDDDD; padding: 3px; white-space: nowrap">' . $value . '</td>';
		}
		echo '</tr>';
	}
	echo '</table>';
}
et mon problème est à ce niveau là :
Code :
1
2
3
4
 
foreach($row as $value) {
	echo '<td style="border: solid 1px #DDDDDD; padding: 3px; white-space: nowrap">' . $value . '</td>';
}
J'aimerai avant d'afficher les "$value", savoir sur quel champ je me trouve...
En fait, je veux afficher tous les champs sauf le champ 'couleur', mais je ne peux pas le supprimer de la requête car j'en ai besoin pour l'affichage de mon tableau.
J'ai bien essayé de faire quelque chose du style :
Code :
1
2
3
4
5
6
 
foreach($row as $value) {
if ((strpos($value,'#')) === false) {
echo '<td style="border: solid 1px #DDDDDD; padding: 3px; white-space: nowrap">' . $value . '</td>';
}
}
pour contrôler si le champ en cours est un code couleur ou non, et si non alors j'affiche la valeur. Mais ce n'est pas très propre, et rien ne garantie qu'il n'y aura pas de # dans les autres champs...

Merci beaucoup
lolymeupy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 10h00   #2
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
Salut,

Si tu es sur que ta couleur est au format "#FFFFFF" tu peux utiliser une regex, cela réduit les autres champs a n'être qu'une couleur, ce qui est plutot rare.

Sinon, tu peux compter sur ta première requête à quel place est la couleur (un i++ dans ton foreach, et tu stocke dans la variable "position" la valeur du i quand ça passe pas dans ton if.
Ce qui te permet dans ton 2ème foreach de tester si le i est égal à la position, alors tu n'affiche rien

Deux solutions qui me sont venu à l'esprit, peut être pas les meilleurs mais bon...
Nowwis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 10h16   #3
Membre habitué
 
Avatar de lolymeupy
 
Inscription : octobre 2006
Messages : 329
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2006
Messages : 329
Points : 106
Points : 106
Envoyer un message via MSN à lolymeupy
Salut Simdu80,
merci de ta réponse.

Je connais effectivement la position du champ couleur (c'est le 1er champ de ma requête), mais je ne vois pas trop comment tester la position...
Code :
1
2
3
4
5
6
7
 
$keys = array_keys($row);
foreach($row as $value) {
	if ($keys != 'couleur') {
	echo '<td style="border: solid 1px #DDDDDD; padding: 3px; white-space: nowrap">' . $value . '</td>';
	}
}
ne marche pas (bien evidement )

(et il faudrait effectivement que je parte sur une solution comme celle-ci, plutôt que les RegEx, car j'ai également les champs 'prenom' et 'nom' dans ma requête, et je voudrais les concaténer dans une seule colonne. il faut donc que je trouve comment savoir que la valeur 'en cours' correspond à tel ou tel champ...)
lolymeupy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 10h25   #4
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
Re,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$header = false;
if (is_array($result)) {
        $i = 0;
	echo '<table style="border-collapse: collapse">';
	foreach($result as $row) {
		if (!$header) {
			echo '<tr bgcolor=#f4e7ca>';
			$keys = array_keys($row);
			foreach($keys as $col) {
			if ($col != 'couleur' ) {
				echo '<td style="border: solid 1px #DDDDDD; font-weight: bold; text-align: center; padding: 3px">' . $col . '</td>';
				}
                        else{
                                 $position_couleur= $i;
			}
                        $i++;
			echo '</tr>';
			$header = true;
		}
                $i = 0;
		echo '<tr>';
		foreach($row as $value) {
                        if($i != $position_couleur) {
			         echo '<td style="border: solid 1px #DDDDDD; padding: 3px; white-space: nowrap">' . $value . '</td>';
                        }
                        $i++;
		}
		echo '</tr>';
	}
	echo '</table>';
}
Essaie un truc dans le genre (Désolé si y'a des erreurs, sans colorisation syntaxique et connaissance du projet, je suis un peu une daube :p)
Nowwis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 10h40   #5
Membre habitué
 
Avatar de lolymeupy
 
Inscription : octobre 2006
Messages : 329
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2006
Messages : 329
Points : 106
Points : 106
Envoyer un message via MSN à lolymeupy
Oui, je me suis rendu compte que c'était vers ce genre de code qu'il fallait partir (j'ai modifié le code de mon message précédent dans ce genre d'ailleurs)

Donc j'ai trouvé ce qu'il me fallait :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
$keys = array_keys($row);
$i = 0 ;
foreach($row as $value) {
	echo 'KEY='.$keys[$i].'<br />';
	if ($keys[$i] != 'couleur') {
	echo '<td style="border: solid 1px #DDDDDD; padding: 3px; white-space: nowrap">' . $value . '</td>';
	}
$i++;
}
echo '</tr>';
J'ai un peu adapté ton code parce que je dois ensuite contrôler les champs nom et prenom pour la concaténation.

Je te remercie vraiment pour le coup de pouce
lolymeupy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h35.


 
 
 
 
Partenaires

Hébergement Web