Probleme script news

wachoo
Invité n'ayant pas de compte PHPfrance

05 févr. 2007, 12:16

Bonjour,

Voila j'essaye d'intaller sur mon nouveau site un script de news (MyNews de php debutant).

Mes connaissances en php sont plus que basique.

J'ai suivi toute les instructions mais j'arrive à un message d'avertissement du type :
Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 10 in C:\Documents and Settings\Administrateur\Mes documents\Web\hock\MyNews1.2\news.php3 on line 154
Le script doit être bon puisque ce n'est pas moi qu'il l'ai écrit^^ .
J'utilise easyphp (dernière version), le site n'est pas hebergé encore.

D'où peut venir ce type d'erreur ?

Si vous avez besoin de plus d'info, dites moi de quoi vous avez besoin pour m'aider à détecter l'erreur.

Le code :
<?
require("config.inc.php3");

$db = @mysql_connect("$dbhost", "$dblogi", "$dbpass") OR DIE("<br><br><center><font color=red face=arial size=2><b>Désolé, la Base est Down ...</b></font></center>");
@mysql_select_db("$dbbase",$db) OR DIE("<br><br><center><font color=red face=arial size=2><b>Désolé, la Base n'est pas accessible ...</b></font></center>");

$req = MYSQL_QUERY("SELECT * FROM $TBL_NEWS ORDER BY id DESC LIMIT 0, $limit_news");
$res = MYSQL_NUM_ROWS($req);

#==-=- Gestion de la ville de référence pour le fuseau horraire -=-==-=#
if($ville!=""){ $ville = "- $ville"; }else{ $ville = ""; }

?>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr><td>
<?
$i=0;
WHILE($i!=$res)
{
$id = mysql_result($req,$i,"id");
$titre = stripslashes(trim(mysql_result($req,$i,"titre")));
$date = mysql_result($req,$i,"date");
$heure = mysql_result($req,$i,"heure");
$signature = stripslashes(trim(mysql_result($req,$i,"signature")));
$email_sign = mysql_result($req,$i,"email_sign");
$news = stripslashes(trim(mysql_result($req,$i,"news")));
$heure = str_replace(":","h",$heure);
$source = mysql_result($req,$i,"source");
$nom_source = mysql_result($req,$i,"nom_source");
$url_source = trim(mysql_result($req,$i,"url_source"));
$image = mysql_result($req,$i,"image");
$path_image = trim(mysql_result($req,$i,"path_image"));
$url_image = trim(mysql_result($req,$i,"url_image"));



if($i==0){ $titre = "<a name=\"TOP\">$titre</a>"; }
?>

<script language="JavaScript">
function SendNews(data){
window.open('send_news.php3?news='+data,'Envoyer','toolbar=0,location=0,directories=0,menuBar=0,scrollbars=1,resizable=0,width=420,height=350,left=0,top=0');
}

function PrintNews(data){
window.open('print_news.php3?news='+data,'Imprimer','toolbar=0,location=0,directories=0,menuBar=0,scrollbars=1,resizable=0,width=620,height=450,left=0,top=0');
}

function AddComment(data){
window.open(data,'Sondage','toolbar=0,location=0,directories=0,menuBar=0,scrollbars=0,resizable=1,width=430,height=335,left=0,right=0');
}
</script>

<?
if($nom_source==""){ $titre_sour = ""; }else{ $titre_sour = "$SourceTitle : ";}


/*-=-=-=-=-=- ICONES =-=-=-=-=-=-*/
if($ICONE_PRINT=='oui'){
$print = "<a href=\"Javascript:PrintNews('$id')\"><img src=\"images/imprimante.gif\" border=\"0\" alt=\"Imprimer l'info\"></a>&nbsp;&nbsp;";
}else{ $print = ""; }

if($ICONE_SEND=='oui'){
$friend = "<a href=\"Javascript:SendNews('$id')\"><img src=\"images/email.gif\" border=\"0\" alt=\"Envoyer cette info à un ami\"></a>&nbsp;";
}else{ $friend = ""; }


#=-=-=-=-=-=-=-=-=- Gestion de l'image de droite -=-=-=-=-=-=-=-=-=-=-=#
if($image!='non')
{
$IMAGE = "<a href=\"$url_image\" target=\"_blank\">
<img src=\"$path_image\" border=\"0\" width=\"120\" height=\"90\" align=\"right\"></a>";
}
else{ $IMAGE = ""; }

?>

<table border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="white">
<tr><td>

<table border="0" cellpadding="1" cellspacing="0" width="100%" bgcolor="#000000">
<tr><td width="100%">

<table border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="white">
<tr><td width="100%"><div align="center">

<table border="0" cellpadding="3" cellspacing="0" width="100%">
<tr><td bgcolor="<? echo $bgcolor_haut ?>" class=m9><font style="<? echo $TitreNews ?>"><a name="id_news_<? echo $id ?>"><? echo $titre ?></font> <font style="<? echo $DateNews ?>"> - <? echo "$date @ $heure $ville"; ?></font></td>
<td bgcolor="<? echo $bgcolor_haut ?>" class=m8><p align="right"><? echo "$print $friend"; ?></td>
</tr>
<tr><td colspan="2" bgcolor="<? echo $bgcolor_corp ?>">

<!-- Tableau intérieur du corps et des comments -->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="100%"><font style="<? echo $CorpsNews; ?>"><? echo "$IMAGE <p style=\"text-align: justify\">$news</p>"; ?></font></td>
</tr>
<tr>
<td width="100%" height="15">&nbsp;</td>
</tr>
<tr>
<td width="100%" align="right">
<?
#=-=-=-=- Comptage des commentaires pour la news -=-=-=-=-=-=-=-=-=-=-=-=-=-#
$reqCOMMENT = mysql_query("SELECT id FROM $TBL_COMMENTAIRES WHERE id_news='$id'");
$resCOMMENT = mysql_num_rows($reqCOMMENT);

if($resCOMMENT>='2'){ $COMMENT = "<a href=\"read_comment.php3?id_news=$id\" class=\"plein\">$resCOMMENT $CommentsTitle</a>"; }
elseif($resCOMMENT=='1'){ $COMMENT = "<a href=\"read_comment.php3?id_news=$id\" class=\"plein\">$UnCommentTitle</a>"; }
else{ $COMMENT = "<a href=\"read_comment.php3?id_news=$id\" class=\"plein\">$NoCommentTitle</a>"; }
?>

<!-- COMMENTAIRES -->
<?
if($source!='non'){ $SOURCE = " | <b>$SourceTitle</b> : <a href=\"$url_source\">$nom_source</a> "; }
else{ $SOURCE = ""; }
?>

<font style="<? echo $Comment; ?>">
[ <b><? echo $InfoTitle; ?></b> : <a href="mailto:<? echo $email_sign; ?>" title="Ecrire à <? echo $signature; ?>"><? echo $signature; ?></a> <? echo $SOURCE; ?>
| <a href="Javascript:AddComment('ajouter.php3?id_news=<? echo $id; ?>')"><? echo $COMMENT; ?></a> | <a href="<? echo $TOP; ?>" title="Retour en haut de la page">Top</a> ]
</font>
<!-- COMMENTAIRES -->
</td>
</tr>
</table>
<!-- Tableau intérieur du corps et des comments -->

</td></tr>
</table>
</td></tr>
</table>
</td></tr>
</table>
</td></tr>
</table>

<!------- Séparation entre chaque news ------->
<img src="images/sep_25px_haut.gif" border="0">
<!------- Séparation entre chaque news ------->

<?
$i++;
}
?>
</td></tr>
</table>

<!-- ARCHIVES -->
<?
$reqARC = MYSQL_QUERY("SELECT DISTINCT date,id FROM $TBL_NEWS ORDER BY id");
$resARC = MYSQL_NUM_ROWS($reqARC);

$MoisDepart = substr(mysql_result($reqARC,0,"date"),3,7);
$ARCHIVES = "[<a href=\"archives.php3?date=$MoisDepart\">$MoisDepart</a>]\n";

$i=0;
WHILE($i!=$resARC)
{
$MoisEnCours = substr(mysql_result($reqARC,$i,"date"),3,7);

if($MoisDepart==$MoisEnCours)
{
$MoisDepart = $MoisEnCours;
$i++;
}
else
{
$MoisDepart = $MoisEnCours;
$ARCHIVES = "[<a href=\"archives.php3?date=$MoisDepart\">$MoisEnCours</a>]\n - $ARCHIVES";
$i++;
}
}

?>
<table border="0" cellspacing="0" width="100%">
<tr>
<td width="100%" bgcolor="#000000">
<table border="0" cellspacing="0" width="100%" cellpadding="3" bgcolor="<? echo $bgcolor_corp ?>">
<tr>
<td align="center" valign="top">
<font style="<? echo $TitreNews; ?>">Archives : </font>
<font style="<? echo $CorpsNews; ?>"><? echo $ARCHIVES; ?></font>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- ARCHIVES -->

<br>

<!-- MERCI DE NE PAS RETIRER LE LIEN NI LES COMMENTAIRES, CEUX-CI FONT OFFICE DE COPYRIGHT -->
<!-- Site : HTTP://WWW.PHPDEBUTANT.COM -->
<!-- By : [email protected] -->
<div align="center">
<a href="http://www.phpdebutant.com" target="_blank">
<font style="<? echo $Comment; ?>">© 2001 - MyNEWS v1.2</font>
</a>
</div>
<!-- Fin -->
La ligne incriminée est celle ci :

$MoisDepart = substr(mysql_result($reqARC,0,"date"),3,7);

Mais je ne pense pas que cela vienne du code.

J'ai fais un echo de $reqARC est j'obtiens "Resource index #10"

J'ai fais un echo de "MoisDepart" est rien.

ça me chagrine, je n'arrive pas à voir l'erreur. Est ce que ça peux venir d'ailleurs comme le champ date. Je rappelle que je teste sous easyphp. (Désolé si je dit des bétises mais j'y connais rien.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 févr. 2007, 12:55

Le script doit être bon puisque ce n'est pas moi qu'il l'ai écrit^^ .
Oui alors ça, ça veut rien dire ;)

Je pense que le soucis vient du fait que tu tentes de récupérer la valeur du premier enregistrement sans tester si celui-ci existe ou pas (en gros : est ce que la requête retourne bien un résultat.

Essayes peut être comme ceci et dis nous s'il y a du mieux :)
...
$resARC = MYSQL_NUM_ROWS($reqARC); 

if($resARC > 0) // s'il y a au moins un résultat 
  $MoisDepart = substr(mysql_result($reqARC,0,"date"),3,7); 
else // si tu veux une valeur par défaut
  $MoisDepart = '...';

$ARCHIVES = "[<a href="archives.php3?date=$MoisDepart">$MoisDepart</a>]\n"; 
...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

05 févr. 2007, 13:45

Merci pour ton petit bout de code.

En faisant if-else, c'est le "else" qu'il l'emporte (soit une valeur par défaut). Autrement dit cela viendrait du fait que $reqARC ne contient aucun résultat. Pourquoi ?

La ligne qui récupère $reqARC est :
$reqARC = MYSQL_QUERY("SELECT DISTINCT date,id FROM $TBL_NEWS ORDER BY id");

Petit nouveau ! | 3 Messages

05 févr. 2007, 13:50

Bon je me suis enregistré car sinon je peux pas éditer mes posts. Je voulais rajouter que je n'ai plus le message d'erreur et que ça a l'air de fonctionner. Mais comme pour l'instant il y a aucune news et archives, difficile de dire si ça marche vraiment.

Si il y a des lignes au dessus pour déterminer MoisDepart c'est qu'il doit y avoir une raison.

Du moins, je regarde cela plus attentivement ce soir.

Eléphanteau du PHP | 15 Messages

05 févr. 2007, 14:15

Bonjour,

J'ai "récupéré" ce code également et modifié un peu (j'aime pas reprendre tel quel même si souvent, en modifiant, on galère)...

J'ai eu le même pb que toi, jusqu'à ce que je crée des enregistrements avec phpMyAdmin. Et depuis, nickel, j'ai des news et des commentaires à mes news...

Que de ressources sur le Net... J'en profite pour remercier les administrateurs et autres intervenants sachants qui viennent en aide aux débutants comme moi.


PS: ce n'est pas ce code que j'ai utilisé comme base de départ , mais un autre sur LeSiteDuZéro :( Cela dit, j'avais le même pb... et re-merci à tous pour ces forums :D

Invité
Invité n'ayant pas de compte PHPfrance

05 févr. 2007, 14:58

Bonjour,

J'ai "récupéré" ce code également et modifié un peu (j'aime pas reprendre tel quel même si souvent, en modifiant, on galère)...

J'ai eu le même pb que toi, jusqu'à ce que je crée des enregistrements avec phpMyAdmin. Et depuis, nickel, j'ai des news et des commentaires à mes news...
J'aimerais déjà que ça marche avant de modifier des choses.

Que veut tu dire par "crée des enregistrements avec phpMyAdmin". Et comment tu as résolu ces problèmes ?

Petit nouveau ! | 3 Messages

05 févr. 2007, 14:59

Bonjour,

J'ai "récupéré" ce code également et modifié un peu (j'aime pas reprendre tel quel même si souvent, en modifiant, on galère)...

J'ai eu le même pb que toi, jusqu'à ce que je crée des enregistrements avec phpMyAdmin. Et depuis, nickel, j'ai des news et des commentaires à mes news...
J'aimerais déjà que ça marche avant de modifier des choses.

Que veut tu dire par "crée des enregistrements avec phpMyAdmin". Et comment tu as résolu ces problèmes ?
Bon c'est moi qui est posté, je suis sur l'ordi du bureau et j'ai oublié de me logger. :arrow:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 févr. 2007, 15:00

En fait, ce bout de code te permet de générer la liste des liens vers les archives des différents mois, autre que le mois en cours (puisque c'est celui que tu consultes).

L'erreur venais donc bien du fait que, comme tu n'avais pas de données, tu n'avais pas d'archives. Et du coup tu ne pouvais accéder au champ "date" de ta requête.

Le test que je t'ai fait rajouter contrôle que la requête a bien ramené des enregistrements avant d'essayer de les lire (au lieu de considérer qu'il y avait nécessairement des données et de les lire directement sans se poser de question :)). Tu ne devrais donc plus avoir de soucis, qu'il y ait des données ou non :)


Comme quoi, ce n'est pas parce que c'est un autre qui l'a écrit que le script est nécessairement bon.... ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

05 févr. 2007, 15:41

Merci pour tes explications ryle, claire et rapide.

Si j'ai d'autres problemes, je reviendrais sur ce forum car je compte bien implanté d'autres modules.

Encore merci

p.s : je ne sais pas comment mettre RESOLU sachant que j'ai posté le premier post en invité donc si un admin passe par là. :wink: