pb recuperation de données dans BDD

Eléphanteau du PHP | 13 Messages

05 juil. 2010, 15:10

Bonjour,
j'ai un petit probleme de recuperation de données dans une table, enfin pas de toutes les données seulement le champ id. En effet je peut recuperer toutes les données mais si l'id est superieur a 10 cela ne me recupere que les dizaines,le champs id est en int(25) et auto-increnent.
Voila mon code de recuperation des données:
<?$result = mysql_query('SELECT * FROM commentaire WHERE wallpaper='.$id.' ORDER BY id ASC LIMIT ' . $page_commentaire . ',4');
  
if($result)
  {
    for ($i = 1; $i <=5; $i++)
	{
	  if($row = mysql_fetch_assoc($result)) 
	  {
	  $id[$i] = $row['id'];
	  $commentaire[$i] = $row['commentaire'];
	  $nickname[$i] = $row['nickname'];
	  }	
        }			
  }?>
Merci de votre aide.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 juil. 2010, 16:22

Si c'est un problème de récupération de données il nous faut le SQL exécuté, comment veux-tu qu'on sache la requête que tu exécutes avec ce code ?

Lis cet article : sql-bases-donnees/php-sql-etapes-suivre ... 19378.html et appliques les conseils.

Et expliques nous comment tu as constaté ton soucis.

Eléphanteau du PHP | 13 Messages

05 juil. 2010, 17:39

alors j'ai essayé ma requete dans phpadmin elle fonctionne nickel, j'ai deux entrées dans ma table quand je demande de m'afficher l'id de la premiere entrée qui est egal a 8 cela fontionne , mais si je demande de m'afficher l'id de la deuxieme entrée qui est egal à 13 cela m'affiche 1??????
j'utilise ce code:
$db_host = "*****";
$db_user = "*******";
$db_pass = "********";
$db_name = "*******";
$link = mysql_connect($db_host,$db_user,$db_pass,true);
mysql_select_db($db_name,$link);
$result = mysql_query('SELECT * FROM commentaire WHERE wallpaper=31 ORDER BY id ASC LIMIT 0,4') ;;

if($result)
					{
						for ($i = 1; $i <=5; $i++)
						{
						if($row = mysql_fetch_assoc($result)) 
							{
							$id[$i] = $row['id'];
							$commentaire[$i] = $row['commentaire'];
							$nickname[$i] = $row['nickname'];
							
							
							}	
						}			
					}
echo $id[2];

 
et donc echo $id[1] m'affiche 8 qui est le bon id mais echo $id[2] m'affiche 1 alors que l'id est de 13.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 juil. 2010, 18:30

Remplace ton for() et if() par un while(), ce sera plus simple déjà:
while ($row = mysql_fetch_assoc($result)) {

Eléphanteau du PHP | 13 Messages

05 juil. 2010, 19:03

voila c'est fait
$result = mysql_query('SELECT * FROM commentaire WHERE wallpaper=31 ORDER BY id ASC LIMIT 0,4') ;;
$i=1;
while ($i <= 10)
{$row = mysql_fetch_assoc($result);
$id[$i] = $row['id'];
$commentaire[$i] = $row['commentaire'];
$nickname[$i] = $row['nickname'];
$i++;
}	
echo $id[1];
Mais cela ne resout pas le pb????

ViPHP
AB
ViPHP | 5818 Messages

05 juil. 2010, 22:10

voila c'est fait
$result = mysql_query('SELECT * FROM commentaire WHERE wallpaper=31 ORDER BY id ASC LIMIT 0,4') ;;
$i=1;
while ($i <= 10)
{$row = mysql_fetch_assoc($result);
$id[$i] = $row['id'];
$commentaire[$i] = $row['commentaire'];
$nickname[$i] = $row['nickname'];
$i++;
}	
echo $id[1];
Mais cela ne resout pas le pb????
Bah c'est un peu farfelu comme code puisqu'avec LIMIT 0,4 (y'a d'ailleurs un ; en trop après dans ton code) tu limites le nombre d'enregistrements retournés à 4 et qu'ensuite tu fait une condition while pour limiter le nombre à 10...

Essaies plutôt
while ($row = mysql_fetch_assoc($result))
{
echo $row['commentaire'].'<br />';
}
pour voir ce que cela retourne

Eléphanteau du PHP | 13 Messages

05 juil. 2010, 22:18

cela m'affiche bien les commentaires correspondant, et si je remplace 'commentaire' par 'id' cela m'affiche les bon id mais je les voudraient dans $id[$i].
lorsque j'utilise le code suivant
$result = mysql_query('SELECT * FROM commentaire WHERE wallpaper=31 ORDER BY id ASC LIMIT 0,4') ;;
$i=1;
while ($i <= 4)
{$row = mysql_fetch_assoc($result);
$id[$i] = $row['id'];
$commentaire[$i] = $row['commentaire'];
$nickname[$i] = $row['nickname'];
echo $row['id'].'<br />';
echo $id[$i].'<br />';
$i++;

}      
cela m'affiche
8
8
13
1
pourquoi ce 1 et pas 13?????

ViPHP
AB
ViPHP | 5818 Messages

05 juil. 2010, 22:44

... mais je les voudraient dans $id[$i].
Pourquoi faire ?

Eléphanteau du PHP | 13 Messages

05 juil. 2010, 22:47

pour qu'il soit ordonnée

ViPHP
AB
ViPHP | 5818 Messages

05 juil. 2010, 23:15

Mais c'est déjà ordonné dans ta requête avec la clause ORDER BY

Eléphanteau du PHP | 13 Messages

05 juil. 2010, 23:40

si je veut afficher le premier commentaire recupereren haut a droite et le second en haut a gauche de ma page je fait comment pour connaitre le premier et le second avec $commentaire[$i]je m'y retrouve mais sans????

ViPHP
AB
ViPHP | 5818 Messages

06 juil. 2010, 00:10

Faits par exemple comme cela :
//...
$tab_result = array();

while ($row  = mysql_fetch_assoc($result))
{
$tab_result[] = $row['commentaire'];
}
Le premièr réultat, s'il existe, sera $tab_result [0], le second $tab_result [1] etc.

Donc dans ton code html, pour afficher le premier en haut à droite tu mets dans la balise <div> ou <p> correspondante :
<div><?php if (isset($tab_result[0])) echo $tab_result[0]?></div>