Page 1 sur 1

Array et chaine

Posté : 29 févr. 2012, 13:38
par Dom!
Bonjour,

J'extrait de ma Base de données les id de mes enregistrements selon un critère.
Cela me donne donc tous les id de ma table sous forme de chaîne. Par exemple : 41424344

Je souhaite insérer une virgule entre chaque id pour obtenir 41,42,43,44.
J'ai essayé la fonction implode sans succès, un foreach sans succès également...

Que faut il faire pour réussir ?

Merci d'avance.
$id_v = $_GET['id_v'];
$sqldip = 'SELECT * FROM tb_garanties WHERE contrat_id = '.$_GET['id_v'];
   // $nbsql += 1;
	if ($resselectdip = mysql_query($sqldip)) {
         while ($selectdip = mysql_fetch_array($resselectdip))
         {
		$temp = array($selectdip["id_garantie"]);
		$imp = implode(",",$temp);
	}
} ?>

Re: Array et chaine

Posté : 29 févr. 2012, 13:42
par Thibaud C
Implode passe un tableau en chaine avec séparateur entre chaque case, la tu n'as qu'une case dans ton tableau, donc normal qu'il ne fasse rien, donc c'est normal que ça ne fonctionne pas
$temp=array();
while ($selectdip = mysql_fetch_array($resselectdip))
         {
                $temp[] = $selectdip["id_garantie"];
               
        } 
$imp = implode(",",$temp);
Si tu tiens a utiliser le implode :p

Re: Array et chaine

Posté : 29 févr. 2012, 13:51
par Dom!
Pourquoi il y'a une autre solution que implod ?
ça m’intéresse !!

Merci pour ton aide.

Re: Array et chaine

Posté : 29 févr. 2012, 13:57
par sirakawa
$id_v = $_GET['id_v'];
$sqldip = 'SELECT * FROM tb_garanties WHERE contrat_id = '.$_GET['id_v'];
   // $nbsql += 1;
        if ($resselectdip = mysql_query($sqldip)) {
         while ($selectdip = mysql_fetch_array($resselectdip))
         {
                $temp = array($selectdip["id_garantie"]);
                $imp = implode(",",$temp);
        }
} ?>
1) Déjà si le même nom de variable ne servait pas à 36 trucs différents le code serait plus lisible et plus cohérent ( Note aux experts: Oui, je sais qu'une variable peut être redéfinie, et que PHP n'étant pas typé, la variable peut changer de type).
2a) Chaque temp n'est pas le moins du monde une chaîne, mais un tableau, et vu comment tu t'en sers, il suffirait d'écrire:
while ($selectdip = mysql_fetch_array($resselectdip, MYSQL_ASSOC)).
2b) Je doute que cette syntaxe soit bien utile:
$temp = array($selectdip["id_garantie"]);
2b1) ceci renseignerait efficacement:
$temp = array($selectdip["id_garantie"]); print_r($temp);
2b2) quant à moi je m'en tiendrais à:
$temp = $selectdip["id_garantie"];
en suivant:
http://fr2.php.net/manual/fr/function.m ... -array.php

Menfin, je suis un sous-doué du PHP, alors peut-être me gouré-je.

Re: Array et chaine

Posté : 29 févr. 2012, 14:10
par Thibaud C
Pourquoi il y'a une autre solution que implod ?
ça m’intéresse !!

Merci pour ton aide.
Fais marcher ton imagination, mais moi j'aurais utilisé implode aussi ^^
Je disais ça comme ça !

$temp.= $selectdip["id_garantie"].',';

des trucs du genre mais bon :)

Re: Array et chaine

Posté : 29 févr. 2012, 15:05
par popy
$temp = array();
 while ($selectdip = mysql_fetch_array($resselectdip))
 {
     $temp[] = $selectdip["id_garantie"];
}
$imp = implode(",",$temp);
Mais c'est vrai que c'est chaud, faut reflechir.

Re: Array et chaine

Posté : 29 févr. 2012, 15:36
par Thibaud C
Implode passe un tableau en chaine avec séparateur entre chaque case, la tu n'as qu'une case dans ton tableau, donc normal qu'il ne fasse rien, donc c'est normal que ça ne fonctionne pas
$temp=array();
while ($selectdip = mysql_fetch_array($resselectdip))
         {
                $temp[] = $selectdip["id_garantie"];
               
        } 
$imp = implode(",",$temp);
Si tu tiens a utiliser le implode :p
$temp = array();
 while ($selectdip = mysql_fetch_array($resselectdip))
 {
     $temp[] = $selectdip["id_garantie"];
}
$imp = implode(",",$temp);


Mais c'est vrai que c'est chaud, faut reflechir.
ok ^o)

Re: Array et chaine

Posté : 29 févr. 2012, 15:47
par sirakawa
Reprenons depuis le départ, car, apparemment, personne ne parle de la même chose.
1) Dans la BDD, à chaque enregistrement, il y a plusieurs champs: lesquels?
2) Ce que tu souhaites, c'est :
a) obtenir, pour chaque enregistrement, une chaîne regroupant tous les champs le concernant.
b) obtenir un tableau où, pour chaque enregistrement, existe une ligne contenant, une chaîne regroupant tous les champs le concernant.
c) obtenir une chaîne contenant tous les champs de tous les utilisateurs.
?
À partir de là, on peut réfléchir utilement.
Oui, de toute façon, il y a une histoire d'implode là-dedans, mais tout dépend de ce que tu veux obtenir.
Je répète qu'il serait utile de passer par :
            $temp = $selectdip["id_garantie"]; print_r($temp);
et non par:
            $temp = array($selectdip["id_garantie"]);
comme tu fais.
Essaie donc sur ton code
            $temp = array($selectdip["id_garantie"]);print_r($temp);
au lieu de bidouiller dans tous les sens.
L'informatique est d'abord question de clarification de ce qu'on veut avant d'être une question de grammaire, comme d'ailleurs tout langage, formel ou non.