Forum-webmaster
Technique - programmation => PHP / MySQL => Message commencé par: Romain14 le le 09-08-2011 a 19:57:31

Titre: Afficher le contenue total d'un array
Posté par: Romain14 le le 09-08-2011 a 19:57:31

Salut tout le monde,

Je voudrais savoir comment affciher tout un array d'un seul coup au lieu de faire ça :
echo $array[1]
echo $array[2]
echo $array[3]

mais plûtot ça :

echo $array[all]

En gros c'est pour dire a ma base de d'utiliser ligne par ligne les données de l'array

Passer de :

"SELECT * FROM compte WHERE friends LIKE '".$array[1], $array[2], $array[3]."'

à :

"SELECT * FROM compte WHERE friends LIKE '".$array[all]."'

Merci de m'aider. ^^

Titre: Re:Afficher le contenue total d'un array
Posté par: Pad le le 10-08-2011 a 22:28:24

à mon avis, il te faudra passer par une boucle while ou for du genre :


Code:
$txt_requete = "";
for($i;$i<count($array);$i++) {
$txt_requete .= $array[$i].",";
}

$sql = "SELECT * FROM compte WHERE friends LIKE $txt_requete";


Titre: Re:Afficher le contenue total d'un array
Posté par: MarvinLeRouge le le 11-08-2011 a 13:17:02

Salut,

La boucle comme indiqué ne marchera pas à mon avis, car tu vas te retrouver avec une virgule à la fin de ta liste de valeurs.
Essaye un truc du genre :

Code:

$sql = "SELECT * FROM compte WHERE friends LIKE '" . implode(",", $array) . "'";

Titre: Re:Afficher le contenue total d'un array
Posté par: Romain14 le le 11-08-2011 a 17:32:21

Ca ne marche pas non plus,

j'explique un peu plus concrètement :

$array contient en faite plusieurs valeur de la même cellule de base de données séparé par un saut a la ligne :

id cellule aray

valeur 1
0 valeur 2
valeur 3

$array ou $row_compte['cellule-array'] content donc : valeur1 valeur2 valeur3

Et je demande a la base de donées de rechercher dans la base de données la cellule contenant l'une de ces valeurs (valeur1, valeur2 et valeur3).

Si je met ça :

"SELECT * FROM compte WHERE friends LIKE '" . $row_compte['cellule-array'] . "'

La requête va comprendre "valeur1valeur2valeur3" au lieu de "valeur1" et "valeur2" et "valeur 3"

Comment faire alors ????


Titre: Re:Afficher le contenue total d'un array
Posté par: Pad le le 11-08-2011 a 19:26:57

il faut traiter le array pour le mettre en forme pour la requête comme sur l'exemple que j'ai mis... Les codes données ne sont là que pour donner des pistes et non la solution finale ;)


Code:
$txt_requete = "";
for($i;$i<count($array);$i++) {
if($i==count($array)-1) $txt_requete .= $array[$i];
else $txt_requete .= $array[$i]." OR friends LIKE ";
}

$sql = 'SELECT * FROM compte WHERE friends LIKE "'.$txt_requete.'"';


Ce qui devrait donner quelque chose comme :


Code:
$sql = 'SELECT * FROM compte WHERE friends LIKE "array1" OR friends LIKE "array2" OR friends LIKE "array3"';

Titre: Re:Afficher le contenue total d'un array
Posté par: Romain14 le le 13-08-2011 a 17:45:07

J'ai un peut de mal à comprendre ton script ^^

A quoi sert "$txt_requete" ?

Pourrait tu m'expliquer en détail ton script stp.

Titre: Re:Afficher le contenue total d'un array
Posté par: Pad le le 13-08-2011 a 19:15:04

Ce que tu recherches c'est bien une requete du style :


Code:
$sql = 'SELECT * FROM compte WHERE friends LIKE "array1" OR friends LIKE "array2" OR friends LIKE "array3"';


sauf que tu n'as pour l'instant que le début de la requête et le tableau array() à traiter pour en faire la suite : friends LIKE "array1" OR friends LIKE "array2" OR friends LIKE "array3" car pour l'instant tu n'as que "array1" "array2" "array3"

pour créer cette chaine et l'ajouter à ta requête, il te faut la traiter, ce que je fais à l'aide de la boucle et je met la chaine dans la variable $txt_requete


Code:
$txt_requete = ""; // la variable est initiée et vide

for($i;$i<count($array);$i++) { // pour tous les champs de ton tableau array()

if($i!=count($array)-1) $txt_requete .= $array[$i]." OR friends LIKE "; // si le champs du tableau n'est pas le dernier, on l'ajoute dans la variable $txt_requete avec le texte SQL (or friends like) -> ceci va donner à la fin de la boucle une variable $txt_requete contenant une chaine de caractère : array[0] OR friends LIKE array[1] OR friends LIKE array[2] OR friends LIKE array[3]...

else $txt_requete .= $array[$i]; // si c'est le dernier champs on le traite différemment et on ajoute pas le texte SQL juste la donnée du champs du array()

}


Cette boucle va donc créer la chaine suivante contenu dans une variable $txt_requete :
Code:
".$array[0]." OR friends LIKE ".$array[1]." OR friends LIKE ".$array[2]." etc...



il te suffit ensuite de mettre cette variable dans ta requete initiale c'est à dire : $sql = 'SELECT * FROM compte WHERE friends LIKE '".$txt_requete.'"';

Ce qui donne finalement la requete tout en haut :)

Titre: Re:Afficher le contenue total d'un array
Posté par: Romain14 le le 13-08-2011 a 19:47:52

Merci j'ai compris ton script (qui est d’ailler exactement ce que j'attendais)

Mais le problème en vérifiant que le contenu de txt_requete est bien correcte je me suit rendu compte que $array1 marche bien mais $array0 ne s'affiche pas alors qu'il contient bien une valeur (j'ai vérifié)

sa met ça :

Code:

OR friends LIKE b857d531678582c47f94fbe17eadefa1 OR friends LIKE

b857d531678582c47f94fbe17eadefa1 ==> Contenu de array[1]
array[0] ===> inexistant


ou est le problème ??

Titre: Re:Afficher le contenue total d'un array
Posté par: Romain14 le le 13-08-2011 a 20:31:18

En faite j'ai trouver le problème mais n'arrive pas à le résoudre.

Dans ma base de données je sépare les valeurs par un tiret :

_Valeur1_ Valeur2

J'ai donc écrit ce code :


Code:
$array= explode("_", $row_compte['friends']);


Et $txt_requete m'affiche ==> OR friends LIKE 9697c444c397092446a6d9503b8d1421 OR friends LIKE b857d531678582c47f94fbe17eadefa1 OR friends LIKE

Apparament array0 = "rien" array1 = "ce que doit etre array0 normalement et array2 = ce que evarit être array1 normalement.

Pourquoi ??

Dans ma BDD il n'y a pas d'espace avant la premiere valeur, juste ça "_"

Dans ma BDD

Code:
_9697c444c397092446a6d9503b8d1421_b857d531678582c47f94fbe17eadefa1


What's the fuck ??

Titre: Re:Afficher le contenue total d'un array
Posté par: Pad le le 13-08-2011 a 23:17:53

c'est parce que quand tu fais ton explode tu dis de récupérer toutes les données séparé par un tiret ce qui donne :

array0 : (rien)_
array1: donnée1_
array2: donnée2_
...

tu devrais donc revoir ton enregistrement sql pour virer le 1er tiret qui fausse l'utilisation du explode.

Titre: Re:Afficher le contenue total d'un array
Posté par: Romain14 le le 14-08-2011 a 18:08:12

Le problème c'est que si je supprime le premier tiret "_" et bien la première valeur (array0) disparait je me retrouve donc que avec array1

Je comprend plus rien !
Est ce que tu pourrais me donner une idée plus simple pour séparer les valeurs entre elles et ensuite faire le script pour les mettre dans un array ??

Ces données sont dans une table de base de données qui contient toute les informations du compte des personnes inscrites sur le site, et ces personnes peuvent avoir des amies, donc je met les identifiant de ces amies dans une colonne appeler "Friends" Mais si le mec à plusieurs amis il faut que je puisse utiliser les identifiant de chacun de ces potes ====> Séparer les identifiants avec explode

Donc voilà !

Je te remercie beaucoup de ton aide !

Titre: Re:Afficher le contenue total d'un array
Posté par: MarvinLeRouge le le 14-08-2011 a 19:02:51

Salut,

Si tes "cases" de base de données sont destinées à contenir des séries de valeurs :
- soit ces valeurs ont potentiellement un usage distinct, et devraient donc être stockées séparément. C'est notamment le cas si la valeur fournie en comparaison doit être similaire à la valeur 1 ET à la valeur 2 ET à la valeur 3, ou similaire à la valeur 1 OU à la valeur 2 ou à la valeur 3.
- soit on les utilise de façon commune, ce qui peut être le cas si l'argument de comparaison doit faire partie de l'ensemble des valeurs stockées : valeur fournie = valeur 1 OU valeur fournie = valeur 2 OU valeur fournie = valeur 3. Si on est dans ce cas, il suffit de remplacer ton séparateur de valeurs par une virgule dans la base de données (ce qui transformerait "valeur1SAUT DE LIGNEvaleur2SAUT DE LIGNEvaleur3" en "valeur1,valeur2,valeur3", auquel cas tu peux probablement utiliser IN dans ta requète SQL.

Titre: Re:Afficher le contenue total d'un array
Posté par: Romain14 le le 14-08-2011 a 20:38:54

Bon entre deux j'ai avancer mais le problème persiste ! (C'est le dernier problème puis ensuite tout marche à merveille ;))



Code:
$les_amies = explode(",",$row_compte['friends']);

BASE DE DONNEES :

1,
2,
3,



Ce que m'affiche $les_amies :

2 3

Je ne comprends absolument pas ! Pourquoi n'affiche t-il pas le "1" ?? Je sais que je suis casse pieds mais me bloquer pour un petit problème comme ça, je suis en rage :'(

Si tu connais la réponse dit moi, Si faut modifier le script "explode" explique moi et montre moi le script nécessaire.

Je te remercie !

Titre: Re:Afficher le contenue total d'un array
Posté par: Koeta le le 15-08-2011 a 16:53:32

Pour afficher le contenu d'un array, on utilise la fonction print_r() que l'on entoure de la balise <pre> pour garder la mise en forme créée par la fonction.

Exemple :


Code:
<pre>
<?php
print_r($array);
?>
</pre>

Titre: Re:Afficher le contenue total d'un array
Posté par: Pad le le 16-08-2011 a 15:10:00

Si tu test cela ça fonctionne :


Code:
$friends = '1,
2,
3,';

$les_amies = explode(",",$friends);

echo $les_amies[0];
echo $les_amies[1];
echo $les_amies[2];


Comment affiches tu les données de $les_amies ?

Titre: Re:Afficher le contenue total d'un array
Posté par: Pad le le 18-08-2011 a 16:24:45

soucis réglé ?


Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.