Pb de données fantomes

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pb de données fantomes

par Tracker » 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...

par quendyl » 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

par Tracker » 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.

par d0m » 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?

par ouckileou » 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

par quendyl » 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'];

par d0m » 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();

par quendyl » 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

par Tracker » 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 (...)

par quendyl » 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

par Tracker » 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() ?

par Tracker » 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

Pb de données fantomes

par quendyl » 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.