Pb de données fantomes

Eléphanteau du PHP | 14 Messages

08 oct. 2007, 15:51

Bonjour,

J'ai un soucis étrange ...
J'effectue la requete suivante directement à partir de phpmyadmin:

Code : Tout sélectionner

select * from gns_news where news_id like (select count(*) from gns_news)
Et je recupère bien ma dernière news.
Qd je fais ma requete dans ma page php, cette même requete faite sur cette même base me retourne 0 enregistrement...

Code : Tout sélectionner

///////////////////////////////////////////////////////////////////////////////////////// /////////////////Requete d'extraction de la news selectionnée//////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// mysql_select_db($bdd, $fbonnet); //requete SQL de selection de la news $query_Recordset1 = "select * from gns_news where news_id like (select count(*) from gns_news)"; $Recordset1 = mysql_query($query_Recordset1, $fbonnet) or die(mysql_error()); $row_Recordset1 = mysql_fetch_array($Recordset1); mysql_close(); while ($row_Recordset1 = mysql_fetch_array($Recordset1)) { echo '<center>'; echo $row_Recordset1['news_title']; echo '</center><br><br>'; echo $row_Recordset1['news_date']; echo '</b></a><br><br>'; echo $row_Recordset1['news_body']; }
Mes variables:

Code : Tout sélectionner

<?php // déclaration de quelques variables $host = "localhost"; $user = "newsuser"; $pass = "******"; $bdd = "*******"; $table = "gns_news"; $fbonnet = mysql_pconnect($host, $user, $pass) or die("Ouverture base impossible"); ?>
Ce qui est bizarre c'est que lorsque je fais un simple select * where news_id like '3' et un bon vieux echo $row_Recordset1['news_title']; dans ma page, ça ne marche pas mieux...

C'est comme si il voulais pas me faire ma requete.

Eléphant du PHP | 443 Messages

08 oct. 2007, 16:06

Exécute plutot

Code : Tout sélectionner

select * from gns_news order by news_id desc limit 1,1
Ca ira déjà plus vite
Modifié en dernier par Tracker le 08 oct. 2007, 16:11, modifié 1 fois.

Eléphant du PHP | 443 Messages

08 oct. 2007, 16:08

$row_Recordset1 = mysql_fetch_array($Recordset1);
mysql_close();

           while ($row_Recordset1 = mysql_fetch_array($Recordset1))
Si tu fermes la connection, tu libères la mémoire du serveur, donc $Recordset1 pointe dans le vide, la seconde fois...
Edit:
En plus, tu n'as au max qu'une seule ligne retournée par ton ordre alors pourquoi faire plusieurs mysql_fetch_array() ?
Modifié en dernier par Tracker le 08 oct. 2007, 16:15, modifié 3 fois.

Eléphanteau du PHP | 14 Messages

08 oct. 2007, 16:13

même sans le close j'ai le même resultat.
Je l'ai juste rajouté à la fin en bidouillant

Eléphant du PHP | 443 Messages

08 oct. 2007, 16:16

même sans le close j'ai le même resultat.
Je l'ai juste rajouté à la fin en bidouillant
Vire toute la ligne du while (...)

Eléphanteau du PHP | 14 Messages

08 oct. 2007, 16:20

même sans le close j'ai le même resultat.
Je l'ai juste rajouté à la fin en bidouillant
Vire toute la ligne du while (...)
Déja fait, je remplace par un bête echo $row_Recordset1['news_title']; et ça marche pas non plus

d0m
Mammouth du PHP | 1141 Messages

08 oct. 2007, 16:30

avec ce code ça donne quelque chose?
mysql_select_db($bdd, $fbonnet);
//requete SQL de selection de la news
$query_Recordset1 = "select * from gns_news where news_id like (select count(*) from gns_news)";
$Recordset1 = mysql_query($query_Recordset1, $fbonnet) or die(mysql_error());
while($row_Recordset1 = mysql_fetch_array($Recordset1))
  print_r($row_Recordset1);
mysql_close();

Eléphanteau du PHP | 14 Messages

08 oct. 2007, 16:33

comme ça ça marche mais je perd la possibilité de pouvoir insérer plus d'une news . :

Code : Tout sélectionner

mysql_select_db($bdd, $fbonnet); ///////////////////////////////////////////////////////////////////////////////////////// /////////////////Requete d'extraction de la news selectionnée//////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// //requete SQL de selection de la news $query_Recordset1 = "select * from gns_news where news_id like (select count(*) from gns_news)"; $Recordset1 = mysql_query($query_Recordset1, $fbonnet) or die(mysql_error()); $row_Recordset1 = mysql_fetch_array($Recordset1); $totalRows_Recordset1 = mysql_num_rows($Recordset1); echo '<center><br><br>'; echo $row_Recordset1['news_title']; echo '</center><br><br>'; echo $row_Recordset1['news_date']; echo '</b></a><br><br>'; echo $row_Recordset1['news_body'];

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

08 oct. 2007, 16:43

Modération :
quendyl, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

d0m
Mammouth du PHP | 1141 Messages

08 oct. 2007, 16:43

déjà si tu veux la derniere ligne insérée (id le plus grand), tu ferais mieux d'utiliser cette requete avec la clause MAX :

Code : Tout sélectionner

select * from gns_news where news_id =(select MAX(news_id) from gns_news);
comme ça ça marche mais je perd la possibilité de pouvoir insérer plus d'une news .
??? tu n'insère pas ici, tu affiches... que veux tu dire par là?

en mettant un while (pas après mais autour de ta première extraction) ça donne ce que tu souhaites nan?

Eléphant du PHP | 443 Messages

08 oct. 2007, 17:56

Code : Tout sélectionner

select * from gns_news where news_id =(select MAX(news_id) from gns_news);
Je persiste en disant que le traitement sera plus rapide avec:

Code : Tout sélectionner

select * from gns_news order by news_id desc limit 1,1
Et pour quendyl, ton select retourne au max un seul enregistrement, donc pas d'affichage multiple.
Si par contre tu devrais avoir plusieurs 'news' alors c'est ton select qu'il faut revoir.

Eléphanteau du PHP | 14 Messages

11 oct. 2007, 10:08


Et pour quendyl, ton select retourne au max un seul enregistrement, donc pas d'affichage multiple.
Si par contre tu devrais avoir plusieurs 'news' alors c'est ton select qu'il faut revoir.

Oui, tout à fait, mais je perd la possibilité de le faire si jamais je veux un jour afficher 2 news au lieu d'une

Eléphant du PHP | 443 Messages

11 oct. 2007, 10:31

Si tu veux afficher plusieurs news
fais un ordre type:

Code : Tout sélectionner

select * from gns_news order by news_id desc limit 0, XX
Et parcours ton résultat pour les afficher. Ton problème à l'origine était que tu faisais un mysql_fetch_array($Recordset1) avant le while, et donc tu virais le premier enregistrement...