Comparaison de variables dans un tableau.Comment faire?

BFH
Eléphant du PHP | 214 Messages

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!
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Eléphant du PHP | 219 Messages

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

Mammouth du PHP | 19672 Messages

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 .
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

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.
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Mammouth du PHP | 19672 Messages

03 mai 2005, 17:26

$query2="SELECT * FROM report WHERE RHost LIKE '".$N."%' "; 
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

03 mai 2005, 17:33

Cyrano t'es trop fort! :pouce: =D> =D> =D> =D> =D>
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Mammouth du PHP | 19672 Messages

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

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>"; 
} 
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

BFH
Eléphant du PHP | 214 Messages

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/
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...