Comparaison de variables dans un tableau.Comment faire?

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 : Comparaison de variables dans un tableau.Comment faire?

par BFH » 06 mai 2005, 16:28

J'ai enfin trouvé comment faire : \:D/
<TABLE border="0" width="100%">
<?				
$query="SELECT DISTINCT IGroup FROM item WHERE ReportID=\"$P\" && IPage=\"Résumé\" ";
$result=mysql_query($query)or die (mysql_error());
		
while($row=mysql_fetch_assoc($result))
{
$N=$row['IGroup'];			
$query2="SELECT IField,IValue FROM item WHERE ReportID=\"$P\" && IPage=\"Résumé\" && IGroup=\"$N\" ";		
$result2=mysql_query($query2)or die (mysql_error());

echo "
<TR>
  <TD colspan='4'>&nbsp;<p></TD>
</TR>
<TR>
  <TD width='20%'></TD>
  <TD colspan='2'><HR></TD>
  <TD width='20%'></TD>
</TR>
<TR>
  <TD  width='20%'><H2>".$N." : </H2></TD>
  <TD colspan='3'>&nbsp;</TD>
</TR>";

while($row2=mysql_fetch_assoc($result2))
{	
echo "
<TR>
  <TD>&nbsp;</TD>
  <TD width='30%' align='center'><font color='#0033CC' ><b>".$row2['IField']." : <p></b></font></TD>
  <TD width='30%' align='center'>".$row2['IValue']."<p></TD>	
  <TD>&nbsp;</TD>
</TR>";
	}	
}			
?>
</TABLE>
\:D/ Je suis trop un tueur \:D/

par Cyrano » 03 mai 2005, 21:58

À première vue, je ferais une requête ordonnée par groupe et stockerais le tout dans un tableau, liste contenant toutes les lignes et donc où on trouvera éventuellement plusieurs fois chaque groupe.
À partir de ce tableau, Il doit y avoir moyen de créer une liste classée où on affiche le groupe une fois et tant que la ligne appartient à ce groupe, on affiche la ligne.

C'est un schéma très rudimentaire que je vois là, quant à le réaliser, je ne sais pas encore trop comment je m'y prendrais, mais je ne saurais pas trop comment formuler une requête SQL autrement pour récupérer une liste formatée de cette manière.

par BFH » 03 mai 2005, 21:39

Sinon maintenant que mon second problème est réglé est ce que quelqu'un aurait une idée pour que je puisse avoir :
Valeur de IGroup1
Valeur de IField1 : Valeur de IValue1
Valeur de IField2 : Valeur de IValue2
Valeur de IField3 : Valeur de IValue3


Valeur de IGroup2
Valeur de IField4 : Valeur de IValue4
Valeur de IField5 : Valeur de IValue5
Valeur de IField6 : Valeur de IValue6


Valeur de IGroup3
Valeur de IField7 : Valeur de IValue7 etc...
Comme demandé au début de ce post?
(Je suis pret a tester tout ce que vous me direz!)

Sinon j'avais pensé a introduire une seconde requête while dans :
$query="SELECT DISTINCT IGroup FROM item WHERE ReportID=\"$P\" && IPage=\"Résumé\" "; 
$result=mysql_query($query)or die (mysql_error()); 

$query2="SELECT IField,IValue FROM item WHERE ReportID=\"$P\" && IPage=\"Résumé\" "; 
$result2=mysql_query($query2)or die (mysql_error()); 
$row2=mysql_fetch_assoc($result2); 

while($row=mysql_fetch_assoc($result)) 

{ //ICI qqch comme while($row2=mysql_fetch_assoc($result2)) 
echo " 
<TR><TD colspan='2'><H2>".$row['IGroup'] ."</H2></TD></TR> 

<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR> 

<TR><TD><font color='#0033CC' ><b>". $row2['IField'] ." : <p></b></font></TD><TD>".$row2['IValue'] ."<p></TD></TR>"; 
} 

par Cyrano » 03 mai 2005, 17:37

non, pas fort, suffit de le savoir et si personne ne te l'avait jamais dit, tu n'aurais pas pu deviner ;)

par BFH » 03 mai 2005, 17:33

Cyrano t'es trop fort! :pouce: =D> =D> =D> =D> =D>

par Cyrano » 03 mai 2005, 17:26

$query2="SELECT * FROM report WHERE RHost LIKE '".$N."%' "; 

par BFH » 03 mai 2005, 17:19

Désolé je n'ai pas eut le temps d'etoffer outre mesure mon propos dans le post précédent. Une affaire urgente à régler, pardon :agenouille:

Il n'y a aucun message d'erreur retourné mais si j'ai
$N="Paris";
et que dans ma base j'ai stocké des RHost tels que Paris,Paris1, Paris2 ...
Avec la formule suivante je n'ai aucun affichage :
$query2="SELECT * FROM report WHERE RHost='".$N."%' "; 
$result2=mysql_query($query2)or die (mysql_error()); 

while($row2=mysql_fetch_assoc($result2))
{
echo "Poste : ".$row2["RUser"]; //RUser est un champs de la table report au même titre que RHost
}
Si je vire le %, c'est à dire si j'ai la ligne :
$query2="SELECT * FROM report WHERE RHost='".$N."' ";
Et bien dans ce cas j'ai au moins ce qui concerne Paris d'affiché, mais pas ce qui concerne Paris1 ou Paris2 :cry:

Voila merci.

par Cyrano » 03 mai 2005, 14:05

Ce que j'ai fait, c'est une concaténation propre entre une chaine de caractère qui est ici du langage SQL et des variables PHP:

Code : Tout sélectionner

$concatenation = "chaine". $variable ."chaine";
Explication de texte: L'opérateur de concaténation en PHP est le point "."
Dans la mesure où on utilise des guillemets (et non des apostrohpes) pour encadrer une chaine, on "peut" en pratique s'abstenir de séparer les variables PHP qui seront interprétées et non lues. Si on utilisait des apostrophes :

Code : Tout sélectionner

$concatenation = 'chaine $variable chaine';
L'affichage du résultat directement à l'écran nous montrerait Tel quelle contenu en lisant la variable, pas en l'interprétant.

Code : Tout sélectionner

chaine $variable chaine
Au lieu de :

Code : Tout sélectionner

chaine valeur de la variable chaine
Ce qu'on vous a enseigné montre autre chose: l'encadrement de variables dans une commande en SQL avec des quillemets :

Code : Tout sélectionner

SELECT * FROM lieu_intervention WHERE ID_LI="Ville d'Avray"
On procède comme ceci à cause de l'apostrophe contenu dans le nom de la ville qui ne doit pas rentrer en conflit avec l'encadrement de la chaine complete. Mais comme PHP utilise les mêmes guillemets, pour éviter des conflits, on vous a montré qu'il fallait les échapper.

Ma correction : On encadre une chaine traitée par PHP avec des guillemets et on encadre les variables SQL avec des apostrophes.
S'il s'agit d'une variable PHP qui doit servir de référence, on procède à une concaténation de chaine comme illustré plus haut. Tu me diras peut-être : oui, mais en utilisant des apostrophes, si mon nom de ville est "Ville d'Avray", l'apostrophe va entrer en conflit avec les apostrophes SQL. Et là, on doit utiliser pour traiter en PHP la variable une fonction PHP : addslashes() qui va échapper les apostrophes dans la chaine.

Si tu fais afficher à l'écran la requête obtenue, tu devrais pouvoir la copier et l'exécuter directement via PhpMyAdmin sans problème. Et S'il y a une erreur, il faut savoir quel type d'erreur et si ce que je t'ai mis ne fonctionne pas, je ne peux pas deviner pourquoi sans connaître les messages d'erreur générés .

par daoud » 03 mai 2005, 13:53

Ce serait sympa que tu précises le message d'erreur, car sinon cela demande beaucoup d'efforts...

a+
daoud

par BFH » 03 mai 2005, 13:43

Euh j'ai un problème avec ce que tu as ecrit Cyrano :
$query="SELECT * FROM lieu_intervention WHERE ID_LI=\"$LI\" ";
	$result=mysql_query($query)or die (mysql_error());
	$row=mysql_fetch_assoc($result)or die (mysql_error());

	$N=$row["Lieu"];
	$query2="SELECT * FROM report WHERE RHost='".$N."%' ";
	$result2=mysql_query($query2)or die (mysql_error());
	
J'ai fait expres ici de mettre les deux formulation ici la mienne que vous n'aimez pas (mais que j'ai appris en cours) et celle que cyrano m'as donnée mais elle fonctionne pas!

par albat » 02 mai 2005, 23:02

Merci pour tous tes bons conseils Cyrano, t'es vraiment d'une aide précieuse.
C'est pas pour fayoter (quel en serait l'intérêt ?)
mais je crois qu'on est très nombreux sur ce forum
à pouvoir tirer un coup de chapeau à Cyrano.
Sincèrement, grand merci à toi ! ;)
Dit albat, je vois plus message de toi j'espere que tu fais pas la tête, je plaisantais en disant que tu étais méchant.
J'étais juste parti me chercher une binouze dans le frigo. :boire9:
J'ai dû me perdre en route... :lol:
Je comprends que ça puisse t'ennerver les nouveaux comme moi
qui font toujours les mêmes erreurs et qui posent toujours les même questions
mais bon on y peux rien si je puis dire...
Les nouveaux ne me dérangent absolument pas (je ne suis moi-même pas expert en PHP)
et il arrive qu'on ait besoin de faire répéter plusieurs fois pour bien comprendre.
Cela n'a rien de condamnable et sur ce forum, on est généralement assez patients.

Le truc qui m'agace, en revanche, c'est les fainéants qui ne font aucun effort,
qui posent des questions, souvent vagues, sans avoir fait la moindre recherche préalable,
qui ne tripotent pas leur code, ne tentent pas des solutions, ne testent pas...
bref, les pas-curieux, les flemmards, les assistés... Ceux-là nous gonflent.

Mais ceux qui cherchent, lisent, inventent, essaient, ... bref, travaillent,
ceux-là seront toujours les bienvenus. ;) =D>

par Cyrano » 02 mai 2005, 22:57

T'inquiètes pas trop BFH, nous aussi, on a commencé un jour et même si on fait semblant de l'avoir oublié, on a même posé parfois des question particulièrement saugrenues :langue: ou alors en mélangeant tout et n'importe quoi :)

par BFH » 02 mai 2005, 22:46

Merci pour tous tes bons conseils Cyrano, t'es vraiment d'une aide précieuse.

Dit albat, je vois plus message de toi j'espere que tu fais pas la tête, je plaisantais en disant que tu étais méchant. Je comprends que ça puisse t'ennerver les nouveaux comme moi qui font toujours les mêmes erreurs et qui posent toujours les même questions mais bon on y peux rien si je puis dire...

par Cyrano » 02 mai 2005, 17:59

PLusieurs chose, mais je vais te répondre sur le dernier point:
$N=$row["Lieu"];
$query2="SELECT * FROM report WHERE RHost = '". $N ."%'";
$result2=mysql_query($query2)or die (mysql_error());
Si tu peux utiliser le bouton [ PHP ] au lieu de [ Quote ] pour mettre du code on aura une coloration plus facile.

Ensuite, quand tu crées une requête, PHP la traite comme une chaine de caractères : fais des concaténations correctes et sépare le PHP du SQL : l'opérateur de concaténation en PHP est le point ".", pas le "+" (JavaScript)

Pour l'autre au dessus, je dois faire des tests avant de m'aventurer :)

par BFH » 02 mai 2005, 17:35

Pis tant qu'on y est j'aurais besion de votre aide là encore avec ceci :
$N=$row["Lieu"];
$query2="SELECT * FROM report WHERE RHost=
\"$N\"+\"%\" ";
$result2=mysql_query($query2)or die (mysql_error());
Si $N=NewYork
et que j'ai par exemple dans ma base de données un rapport qui correspond à Paris il sera aussi affiché à cause de la formulation \"$N\"+\"%\"

Comment je peux faire pour que cela ne soit pas le cas et que je n'ai alors qu'à l'ecran les rapports qui commence par NewYork ?