Page 1 sur 1
stockage additionnel
Posté : 17 mai 2005, 16:31
par BFH
Bonjour, je desirerais savoir comment faire pour avoir une variable qui stocke en additionnant les valeurs:
Explications, je voudrais que
$bla recueille a la fin du
for toutes les valeurs que
$bla a eut pendant l'execution du for.
Voila mon code, (qui est faux bien sur)
for($i=1;$i<count($Ch);$i++)
{
echo ("Valeur cochée numero ".$i." : ".$Ch[$i]."<br>");
$bla=$Ch[$i];
}
$query="SELECT DISTINCT IPage FROM item WHERE ReportID=\"$P\" && IPage IN ('$bla') ";
Si quelqu'un sait comment le corriger. D'avance Merci.
Posté : 17 mai 2005, 16:37
par Cyrano
Ce que tu peux faire, c'est mettre les valeurs dans un tableau,mais en fait, ce tableau existe déjà ; exemple:
$bla = array();
for($i=1;$i<count($Ch);$i++)
{
echo ("Valeur cochée numero ".$i." : ".$Ch[$i]."<br>");
array_push($bla,$Ch[$i]);
}
Tu transfèrerais le contenu de $ch dans $bla, ce qui ne sert strictement à rien, autant utiliser directement $ch.
Ou alors j'ai mal compris la question et encore moins vu le but de la manoeuvre.
Posté : 17 mai 2005, 16:43
par BFH
Posté : 17 mai 2005, 17:12
par Cyrano
ha non, ok, je vois ce que tu veux dire. Non, MySQL ne saura pas lire le tableau comme ça, enfin je ne crois pas.
j'ai déjà fait un truc du genre, faut que j'y réfléchisse: tu vas devoir construire dynamiquement la requête. Donne moi un petit moment.
Posté : 17 mai 2005, 17:17
par Cyrano
Ça devrait fonctionner avec un truc dans ce goût là :
<?
$query="SELECT DISTINCT IPage FROM item WHERE ReportID=\"$P\" && ";
for($i=1;$i<count($Ch);$i++)
{
echo ("Valeur cochée numero ".$i." : ".$Ch[$i]."<br>");
if($i < (count($Ch) - 1))
{
$query .= "IPage = ". $Ch[$i] ."|| ";
}
else
{
$query .= "IPage = ". $Ch[$i];
}
}
$query .= ")";
?>
Posté : 17 mai 2005, 17:34
par rami
Et pourquoi pas ca:
<?
$query="SELECT DISTINCT IPage FROM item WHERE ReportID IN \"$P\" && IPage IN ";
$maListe = '(';
$nbelem= count($Ch);
for($i=1;$i<$nbelem;$i++)
{
$maListe.=$Ch[$i].',';
}
//on supprime la derniere virgule de la liste
$maListe = substr($maListe,0,-1);
$maListe.=')';
$query .= $maListe;
?>
J'ai édité: en effet, on faisait le count dans la condition du for, ce qui n'est pas du tout optimisé

Posté : 17 mai 2005, 17:47
par Cyrano
pourquoi pas en effet: il faudrait mettre les deux en compétition point de vue performance.
Posté : 17 mai 2005, 19:28
par pjl
Et avec la fonction implode, ce ne serait pas plus simple ?
Posté : 18 mai 2005, 15:39
par Invité
J'ai testé la formulation de rami pour voir, en l'adaptant une peu
$Ch=$_GET["Ch"];
$Total="";
for($i=0;$i<count($Ch);$i++)
{
$Total=$Total.', '.$Ch[$i].' ';
}
$Total=substr($Total,2,-1);//sert à supprimer le permier espace et la premiere virgule ainsi que le dernier espace.
echo ($Total."<p>");
$query= "SELECT DISTINCT IPage FROM item WHERE ReportID='".$P."' && IPage IN ( ".$Total." )";
Bon pour moi ce code semble correct mais cela me retourne
Démarage automatique, Imprimantes, Antivirus, ... //Bref, cela ecris la valeur de $Total
Errreur de syntaxe près de 'automatique , Imprimantes , Antivirus)' à la ligne 1
Je comprends pas pourquoi il y a cette erreur! Si qq peut m'expliquer merci.
Posté : 18 mai 2005, 15:48
par BFH
C'est moi qui ait posté ci_dessus mais j'avais oublié de me logger!
Avec la méthode de Cyrano ça fonctionne mais je rencontre un porblème car j'ai des mots qui contiennent des apostrophes donc ça bug! Y a t il un moyen d'ignorer les apostrophes contenues dans
$Ch[$i] 
Posté : 18 mai 2005, 15:50
par Cyrano
Posté : 18 mai 2005, 16:01
par zeus
c'est plutôt
addslashes($ch[$i]);
Posté : 18 mai 2005, 16:02
par BFH
oui c'est ce que je voulais dire
=D> =D> =D> Cyrano,=D> =D> =D> encore une fois merci
Posté : 18 mai 2005, 17:11
par Cyrano
c'est plutôt
addslashes($ch[$i]);
T'as raison, me suis gourré tiens, l'autre, c'est l'ancienne formulation me semble (php3)
Posté : 18 mai 2005, 17:12
par zeus
Ca se peut !!!
Perso, je ne l'ai jamais utilisée donc je ne me pronoce pas trop !!!
