Probleme avec les valeurs stockées dans un tableau

tibandit Messages postés 16 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 2 octobre 2005 - 8 août 2005 à 18:42
tibandit Messages postés 16 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 2 octobre 2005 - 9 août 2005 à 14:18
Hello

Voila je veux stocker des données dans un tableau afin de pouvoir les reutiliser a ma convenance,

Ca donne ca comme code :



$table="produits";

$query="SELECT id,marque,image,produit FROM $table WHERE marque='$_GET[product]' AND actif='y'";

$result=mysql_query($query) or die ("error");

while($row = mysql_fetch_array($result))

{

$id[$i]=$row['id'];

echo "direct : $row[id]
"; // pour debugger

echo "tableau: $id[$i]
"; // pour debugger

$produits[$i]=$row['produit'];

$image[$i]=$row['image'];

$marque[$i]=$row['marque'];

$i++;

}




et au niveau de l'id le resultat est different suivant si je stocke la
valeur dans un tableau ou si je l'affiche directement des que je
depasse 2 digits :



direct : 1

tableau: 1

direct : 8

tableau: 8

direct : 9

tableau: 9

direct : 10

tableau: 1

direct : 11

tableau: 1

direct : 12

tableau: 1

direct : 13

tableau: 1



Qqn aurait il une idée......merci de votre aide

12 réponses

davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
8 août 2005 à 19:18
tu devrais initilaiser ta variable $i à 0 avant ta boucle.

de plus, pour le debugage, peut etre pourrais tu faire un

echo 'i='.$i.'
',




-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
tibandit Messages postés 16 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 2 octobre 2005
8 août 2005 à 19:42
ok voici le code en entier :



#

# Structure de la table `produits`

#


CREATE TABLE produits (
id int(11) NOT NULL auto_increment,
marque text NOT NULL,
produit text NOT NULL,
reference text NOT NULL,
descriptif text NOT NULL,
image text NOT NULL,
zoom text NOT NULL,
prix text NOT NULL,
actif text NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


######################################################################



include("./include/connect.inc.php");



$i=0;

$table="produits";

$query="SELECT id,marque,image,produit FROM $table WHERE marque='$_GET[product]' AND actif='y'";

$result=mysql_query($query) or die ("error");

while($row = mysql_fetch_array($result))

{

$id[$i]=$row['id'];

echo "direct : $row[id]
"; // pour debugger

echo "tableau: $id[$i]
"; // pour debugger

echo "i=$i
"

$produits[$i]=$row['produit'];

$image[$i]=$row['image'];

$marque[$i]=$row['marque'];

$i++;

}



ce qui donne



direct : 1
tableau: 1

i=0
direct : 8
tableau: 8
i=1

direct : 9
tableau: 9
i=2

direct : 10
tableau: 1
i=3

direct : 11
tableau: 1

i=4

direct : 12
tableau: 1

i=5

direct : 13
tableau: 1

i=6

direct : 113

tableau: 1


i=7


tjrs le meme probleme... on dirait que mon tableau n'accepte pas les int de 2 chiffres ou plus
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
8 août 2005 à 21:14
En même temps, je vois pas pourquoi tu t'emmerdes avec "$id[$i]" si tu ne te sers que de $i :o
0
tibandit Messages postés 16 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 2 octobre 2005
8 août 2005 à 22:21
Pour la simple et bonne raison que je veux pouvoir rappeler par exemple l'id de ma 180eme valeur dans une boucle et le 2 apres.

Je vais pas interroger 50 fois ma base de données, augmenté les tps de
requetes, augmenté le tps de chargement alors que je peux tout stocker
en une seule fois.

Apparemment l'optimisation du code et des requetes n'a pas l'air d'etre
une de tres priotiés mais moi oui et une seule requete pour pouvoir
utiliser a ma convenance toutes mes valeurs est le + efficace !

Enfin je te laisse méditer la dessus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
8 août 2005 à 22:55
houlaa...

faut pas etre agressif grand.

Si l'optimisation compte vraiment pour toi, n'utilise pas les " (double
quote) pour interpreter tes variables. utilise les simplie quotes ' et
la concaténation . (point).



enfin bon..tu fais comme tu veux...



sinon pour ton pb initial.. vraiment bizarre. Juste pas curiosité, ça donne la meme chose avec cette syntax ? :

echo 'direct : '.$row[id].'
'; // pour debugger

echo 'tableau: .'$id[$i].'
'; // pour debugger

echo 'i='.$i.'
';






-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
8 août 2005 à 23:13
C'est bien ce que je te dis, tu te fais chier pour rien ;)



<?php

$produits = array();

$image = array();

$marque = array();

$i = 0;



$table="produits"; // Ou est l'optimisation ici d'ailleur ?!

$query="SELECT id,marque,image,produit FROM $table WHERE
marque='$_GET[product]' AND actif='y'"; // La pareil, manque
d'optimisation :)

$result=mysql_query($query) or die ("error");

while($row = mysql_fetch_array($result))

{

$id[$i]=$row['id'];

echo 'direct : '.$row["id"].'
'; // pour debugger // Optimisation " par '.

echo 'tableau : '.$id[$i]
"; // pour debugger // Même chose

echo 'i=$i
' ; // Y manque un ";" à cette endroit la.

$produits[$id] =$row['produit'];

$image[$id]=$row['image'];

$marque[$id]=$row['marque'];

$i++;

}

?>



Me parler d'optimisation est une chose, le faire en ait une autre...



$id[] = $row['id']

$produit[] = $row['produit'];

$image[] = $row['image'];

$marque[] = $row['marque'];



peut faire la même chose sans utiliser le compteur $i.
0
tibandit Messages postés 16 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 2 octobre 2005
9 août 2005 à 09:11
$table="produits"; // Ou est l'optimisation ici d'ailleur ?!

J'ai mis en dure la varaible table car j'utilise une fonction qui me renvoie la valeur $table.

mais pour tester juste cette partie de mon script je l'ai codé ici en dur.


echo 'direct : '.$row["id"].'
'; // pour debugger // Optimisation " par '.

echo 'tableau : '.$id[$i]
"; // pour debugger // Même chose

echo 'i=$i
'; // Y manque un ";" à cette endroit la. => copier/coller malheureux

ici c pour debugger que j'affiche ces variables donc on s'en foue des " ou des '



je m'enerve pas je m'exprime ;-)



en faite pourquoi je mets ca dans un tableau

ex:

for($j=150;$j<$_GET['max_1'];$j++)

{

echo 'link.php?$id[$i];

}



mais suivant les options choisi par l'utlisateur je peux ensuite faire un appel a une autre boucle



for($j=15;$j<$_GET['max_2'];$j++)

{

echo 'link.php?$id[$i];

}



je vais essayer avec ton code et te tiens au courant

merci
0
tibandit Messages postés 16 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 2 octobre 2005
9 août 2005 à 09:25
Me parler d'optimisation est une chose, le faire en ait une autre...


$id[] = $row['id'] => manque ; ... lol


$produit[] = $row['produit'];


$image[] = $row['image'];


$marque[] = $row['marque'];

peut faire la même chose sans utiliser le compteur $i.




$produits = array();

$image = array();

$marque = array();

........

{

$id[]=$row['id'];

$produits[]=$row['produit'];

$image[]=$row['image'];

$marque[]=$row['marque'];

$i++;

}



voila le resultat :


Fatal error : [] operator not supported for strings in produits.inc.php on line 12


et sinon



while($row = mysql_fetch_array($result))

{

$id[$i]=$row['id'];

$produits[$i]=$row['produit'];

$image[$i]=$row['image'];

$marque[$i]=$row['marque'];

echo 'id : '.$id[$i].'
';

$i++;

}



id : 1 => ok

id : 8 => ok

id : 9 => ok

id : 1 => faux

id : 1 => faux

id : 1 => faux

id : 1 => faux
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 août 2005 à 11:35
Si t'as une erreur avec [], c'est que t'as une variable qui est défini
en tant que chaine et que tu veux l'utiliser comme un tableau.



Mais t'as quoi à la ligne 12 de ton fichier produits.inc.php ? (et en même temps, les lignes aux alentours ) ?
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
9 août 2005 à 11:58
en effet, je pense que tu dois définir $id comme étant un array !
0
tibandit Messages postés 16 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 2 octobre 2005
9 août 2005 à 14:12
la ligne 12 c celle la



$id[]=$row['id'];



j'ai reduit mon code au max.

ca donne ca :



<?

include './include/connect.inc.php';

$i=0;

$produits = array();

$image = array();

$marque = array();

$table=produits;

$query="SELECT id,marque,image,produit FROM $table WHERE marque='$_GET[product]' AND actif='y'";

$result=mysql_query($query) or die ("error");

while($row = mysql_fetch_array($result))

{

$id[]=$row['id'];

$produits[]=$row['produit'];

$image[]=$row['image'];

$marque[]=$row['marque'];

$i++;

}



for($j=0;$j<$i;$j++)

{

echo 'id : ',$id[$j],'
';

}



?>

Je vais essayer davwart
0
tibandit Messages postés 16 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 2 octobre 2005
9 août 2005 à 14:18
ok je viens de rendre compte de l'erreur en recopiant le script.... et oui j'avais oublier



$id = array();



merci a vous



ca marche nickel chrome maintenant !!!!!!!!!!!!!!!!
0
Rejoignez-nous