J'ai un message d'erreur dans un tableau

Eléphant du PHP | 271 Messages

12 mai 2007, 10:29

Bonjour à tous,

J'ai réalisé un livre d'or qui affiche par page les 5 derniers messages et le visiteur passe de page en page avec ce type de navigation :
1 | 2 | 3 et les messages s'affichent de 5 en 5.
http://www.qcmresto.fr/simone/index2.ph ... 1&debut=10

Malheureusement lorsque que le total des messages n'est pas un multiple de 5, à la dernière page j'ai un message d'erreur: Il ne peut pas passer à la ligne suivante.Dans l'exemple à la ligne 14.

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 13 on MySQL result index 9 in /home4/s/sitweb-chr/www/simone/livreor/livre_or.php on line 95

Est - ce que quelqu'un aurait une idée car là je "séche" ?
Merci d'avance de l'aide
<?
	$req3=mysql_query("SELECT * FROM message ORDER BY dater DESC");
	$nbr3=mysql_num_rows($req3);
	if ($nbr3=="0") 
			{ 
		echo "<FONT FACE=\"Arial\" SIZE=2 COLOR=#000000><b><center>Aucun message dans le forum</center></b>";
			}
	else
			{
		if ($debut+5<=$nbr3) { $fin=$debut+4; } else { $fin=$nbr3; }
		for ($i=$debut;$i<=$fin;$i++)
			{
			$nom = mysql_result($req3,$i+0,"nom");
			$message = mysql_result($req3,$i+0,"message");
			$dater = mysql_result($req3,$i+0,"dater");
			$dater2= substr($dater,8,2)."/".substr($dater,5,2)."/".substr($dater,0,4)." à ".substr($dater,11,8);	
			
			echo "<font size=2>$message</font><br>";
			echo "<div align=right><i>$nom, le $dater2</i>";
			echo "</div>";
			echo "<br>";
			echo "<font color=#808080>";
			for ($j=1;$j<=160;$j++) { echo "·"; }
			echo "</font><br>";
			
			}
			}
				
?>

<? 
			
		$nbrpage=ceil($nbr3/5);
		echo "<FONT FACE=\"Arial\" SIZE=2 COLOR=#000000><center>";
		for ($i=1;$i<=$nbrpage;$i++)
			{
			$debut2=5*($i-1)+0;
			if ($debut2!=$debut)
			{
					echo '<a href="index2.php?page=livreor/livre_or.php&Numero=1&debut='.$debut2.'">'.$i.'</a>';
			}
			else
			{
				echo "<b>$i</b>";
			}
			if ($i!=$nbrpage) { echo " | "; }
			}
		
?>		
Patience et obstination sont des qualités !

Mammouth du PHP | 991 Messages

12 mai 2007, 10:33

regarde le tuto tres bien explique du site du zero
Tuto
DevOps, Symfony4, Hoa

Eléphant du PHP | 271 Messages

12 mai 2007, 10:57

Merci pour l'aide mais ce qu'il est expliqué sur le site du zéro est déjà ce que je fais ici.

J'utilise déjà la fonction CEIL
Je demande : total de page ($nbrpage) doit être égal au nombre de message ($nbr3) divisé par 5. CEIL arrondi au chiffre supérieur si celui ci n'est donc pas un multiple de 5.
C'est pour cela que je ne comprends pas qu'il m'affiche un message d'erreur.
 $nbrpage=ceil($nbr3/5); 
Patience et obstination sont des qualités !

Mammouth du PHP | 991 Messages

12 mai 2007, 11:11

Regarde precisement :
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor');
$donnees = mysql_fetch_array($retour);
Puis tu regarde si la demande $_GET[debut] est superieur au total des message et si oui tu met a la place de 15 tu met ton total
DevOps, Symfony4, Hoa

Eléphant du PHP | 271 Messages

12 mai 2007, 12:34

Si j'ai bien compris:

$_get[debut] est inférieur au total des message car la $debut est égal à 0 Elle fait référence au dernier message posté. Elle est donc égal à 0.
Pour passer de 5 en 5 j'effectue ça:
for ($i=1;$i<=$nbrpage;$i++)
			{
			$debut2=5*($i-1)+0;
			if ($debut2!=$debut)
			{
					echo '<a href="index2.php?page=livreor/livre_or.php&Numero=1&debut='.$debut2.'">'.$i.'</a>';
Patience et obstination sont des qualités !

jed
Eléphant du PHP | 218 Messages

12 mai 2007, 13:16

Bonjour, je souhaiterais faire la même chose mais je n'utilise pas de bdd, mon concept est le parcours des dossiers sur le serveur, pouvez vous m'aider svp?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 mai 2007, 13:20

jed, tu ferais mieux d'ouvir ton propre sujet sinon ça va vite devenir fouilli :?

Des sujets traitant de parcours de dossiers exitent déjà.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 271 Messages

13 mai 2007, 10:57

J'ai fait un test sur la variable $ndr3. Elle compte bien le nombre d'entrée dans la base de données.
Je ne comprends pas d'où peut venir le pbl.
Patience et obstination sont des qualités !

Eléphant du PHP | 271 Messages

13 mai 2007, 11:17

Le message d'erreur venait de ces 3 lignes.
                                        $nom = mysql_result($req3,$i+0,"nom");
			$message = mysql_result($req3,$i+0,"message");
			$dater = mysql_result($req3,$i+0,"dater");
			$dater2= substr($dater,8,2)."/".substr($dater,5,2)."/".substr($dater,0,4)." à ".substr($dater,11,8);	
Grâce à Albat qui dans un autre forum m'a donné cette bidouille : mettre une @ devant une fonction pour cacher les messages d'erreurs.
J'ai donc ré - écrit :
                                        $nom = @mysql_result($req3,$i+0,"nom");
			$message = @mysql_result($req3,$i+0,"message");
			$dater = @mysql_result($req3,$i+0,"dater");
			$dater2= substr($dater,8,2)."/".substr($dater,5,2)."/".substr($dater,0,4)." à ".substr($dater,11,8);	
Je précise que mon code fonctionnait très bien et que le message d'erreur n'influençait pas le résultat. Il "polluait" la page.
Patience et obstination sont des qualités !

ViPHP
ViPHP | 3607 Messages

13 mai 2007, 11:33

bouh... pas beau ça :(
Il ne faut jamais cacher la misère, en dev comme ailleur...

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

13 mai 2007, 11:39

Le "@" va en effet cacher les messages d'erreur ou d'alerte... il n'y a parfois pas d'autres solution (mais c'est assez rare) mais cela revient à dire que ton code contient des erreurs, que ton traitement a un problème, mais que comme le résultat aujourd'hui es bon, au lieu d'essayer de le comprendre et de le résoudre, tu vas juste le cacher en croisant les doigts pour espérer que le jour ou ca explosera, tu seras assez loin pour que ça ne soit pas pour ta pomme ;)

Faudrait voir combien de ligne sont retournées, que contient la ligne "13", qu'est ce qui peut bloquer php... (et accessoirement $i+0 ou $i tout court, ca revient au même :))

Et c'est albat qui t'a suggéré de faire ça ? il va m'entendre le bougre !!
il fait bien d'aller donner ce genre de conseils sur d'autres forum ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 3607 Messages

13 mai 2007, 11:45

Et c'est albat qui t'a suggéré de faire ça ? il va m'entendre le bougre !!
il fait bien d'aller donner ce genre de conseils sur d'autres forum ;)
Non non va pas le gronder, il a simplement parler de cacher la misère en comparant les développeurs de vista et les mauvais développeurs php
(cf http://www.phpfrance.com/forums/voir_re ... php#192131)
Il n'a jamais conseillé de le faire ;)

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

13 mai 2007, 11:52

Arf, oki, je comprend mieux, c'est peut être l'ironie ou la phrase suivante qui a du échapper à alaingpl :
Peut-être le même philosophie qui prévaut chez les mauvais développeurs PHP
M'enfin je le gronderais quand même, je sais qu'il aime bien ça ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 271 Messages

13 mai 2007, 12:58

Bon, bon , ça va. Moi non plus j'aime pas cacher les messages d'erreurs (c'est la premiere fois)mais comme mon code fonctionne c'était la meilleure solution car je suis dessus depuis vendredi soir et j'ai sauté dessus (l'@) bien sûr. Juré, craché, je ne recommencerai plus..

Merci à Ryle qui m'a mis sur une piste que j'avais complétement omise :
et accessoirement $i+0 ou $i tout court, ca revient au même
je l'ai ré-écrite da façon suivante :
for ($i=$debut;$i+1<=$fin;$i++)
Bien sûr j'ai enlevé les @.
Pour d'autres voici le code complet avec le formulaire et vous pouvez voir le résultat à l'adrese suivante : http://www.qcmresto.fr/simone/index2.ph ... =1&debut=0

Dans quelques semaines :
www.lameresimone.com " livre d'or"
Merci à tous de l'aide.
<HTML>
<HEAD>
	<TITLE>Restaurant La Mère Simone</TITLE>
<LINK rel=stylesheet type="text/css" href="../style.css">
<style type="text/css">
<!--
#menu a {
display:inline;
color:#0033FF;
text-decoration:none;
}
-->
</style>

</HEAD>

<BODY BGCOLOR="#FFFFFF">
<div id="menu">
<?
	require("admin/config.php");
	$mysql_link =  MYSQL_CONNECT("$localhost","$login","$mot") OR DIE("Unable to connect to database !!");
	@mysql_select_db($dbName ,$mysql_link ) or die( "Unable to select database ??");
	
	    if (isset($_POST['nom']) AND isset($_POST['message2']))
{
    
    $nom = htmlentities($_POST['nom'], ENT_QUOTES); 
        
    $message = htmlentities($_POST['message2'], ENT_QUOTES); 
    $message = nl2br($message2); 
    
		$dater=date("Y-m-d H:i:s");
		$req=mysql_query("INSERT INTO message (nom, message, dater) VALUES ('$nom','$message','$dater')");
		echo"<br><div align=\"center\">Nous vous remercions de l'intérêt que vous portez à notre établissement</div>";
		
?>
		
<?
	}
?>

		<TABLE CELLPADDING=0 CELLSPACING=0 WIDTH="500" BORDER=0>
		<TR>
			<TD width="500"><br>
			<p><center><b><em><h3>Notre livre d'or</h3></em></b></center></p><br>
			</TD>
		</TR>
		<TR>
			<TD COLSPAN=3>
				<TABLE CELLPADDING=10 CELLSPACING=0 WIDTH="500" BORDER=1 BORDERCOLOR=#808080 style="border-collapse: collapse" ALIGN=MIDDLE>
				<TR>
				  <TD ALIGN=LEFT VALIGN=MIDDLE WIDTH=400>
						<div align=justify>
						<font face="Arial" size=1 color=#000000>
<?
	$req3=mysql_query("SELECT * FROM message ORDER BY dater DESC");
	$nbr3=mysql_num_rows($req3);
	if ($nbr3=="0") 
			{ 
		echo "<FONT FACE=\"Arial\" SIZE=2 COLOR=#000000><b><center>Aucun message dans le forum</center></b>";
			}
	else
			{
		if ($debut+5<=$nbr3) { $fin=$debut+4; } else { $fin=$nbr3; }
		for ($i=$debut;$i+1<=$fin;$i++)
			{
			$nom = mysql_result($req3,$i+0,"nom");
			$message = mysql_result($req3,$i+0,"message");
			$dater = mysql_result($req3,$i+0,"dater");
			$dater2= substr($dater,8,2)."/".substr($dater,5,2)."/".substr($dater,0,4)." à ".substr($dater,11,8);	
			
			echo "<font size=2>$message</font><br>";
			echo "<div align=right><i>$nom, le $dater2</i>";
			echo "</div>";
			echo "<br>";
			echo "<font color=#808080>";
			for ($j=1;$j<=160;$j++) { echo "·"; }
			echo "</font><br>";
			
			}
			}
				
?>

<? 
			
		$nbrpage = ceil($nbr3 / 5);
		echo "<FONT FACE=\"Arial\" SIZE=2 COLOR=#000000><center>";  
		for ($i=1;$i<=$nbrpage;$i++)
			{
			$debut2=5*($i-1)+0;
			if ($debut2!=$debut)
			{
					echo '<a href="index2.php?page=livreor/livre_or.php&Numero=1&debut='.$debut2.'">'.$i.'</a>';
			}
			else
			{
				echo "<b>$i</b>";
			}
			if ($i!=$nbrpage) { echo " | ";}
			}

mysql_close();
?>					</TD>
				</TR>
				</TABLE><br>

				<TABLE CELLPADDING=10 CELLSPACING=0 WIDTH="500" BORDER=0 BORDERCOLOR=#808080 style="border-collapse: collapse" ALIGN=MIDDLE>
				<TR>
					<TD ALIGN=CENTER VALIGN=MIDDLE>

						<FORM id="formulaire_de_contact" METHOD="POST" ACTION="index2.php?page=livreor/livre_or.php" NAME="livre">
		</font><br>
						
						<div>
						<label for="nom">Nom ou Pseudo</label>
						<INPUT TYPE="TEXT" id="nom" NAME="nom" VALUE="">
						</div>
						 <div>
						 <label for="sujet">Message</label>
						<TEXTAREA NAME="message2" ROWS=5 COLS=50> </TEXTAREA>
						</div>
						<INPUT TYPE="HIDDEN" NAME="debut" VALUE="<? echo "$debut"; ?>">
						<div>
						<input type="reset" id="reset" name="Submit" value="Tout effacer">  
						<input type="submit" id="submit" name="Submit" value="Signer le livre d'or">
						</div>
											
	
		</TABLE>

	</TD>
</TR>
</TABLE>
</FORM>
</div>
</BODY>
</HTML>
Patience et obstination sont des qualités !

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

13 mai 2007, 13:30

Cool ! Ben ça, ça fait plaisir :)

Tiens, pis histoire d'alléger encore un peu :
for ($i=$debut;$i+1<=$fin;$i++) 
// revient au même que
for ($i=$debut;$i<$fin;$i++) 
Ca permet de moins se poser de question pour savoir quand il doit s'arrêter :)


Et par ailleurs ici :
<INPUT TYPE="HIDDEN" NAME="debut" VALUE="<? echo "$debut"; ?>">
il n'est pas nécessaire de mettre des guillemets autour d'une variable pour l'utiliser, tu peux l'afficher directement
<INPUT TYPE="HIDDEN" NAME="debut" VALUE="<? echo $debut; ?>" />
"Sortez vos mor.. euh.. vos variables..." ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...