Affichage dernière entrée du table et le reste en archive

Ziwa
Invité n'ayant pas de compte PHPfrance

27 mars 2006, 11:23

J'ai un problème ( et oui encore un!)

J'ai une partie new sur mon site, et donc lorsque je complète mon formulaire coté admin, c'est censé mettre en ligne page actu cette nouvelle new enregistré, et mettre l'ancienne avec les autres dans archives

sauf que


ça ne fonctionne pas =), la dernière news entrée se met en archive directe, et celle en page de new ne bouge pas


En fait dans ma bdd, les id s'incrémente automatiquement, donc en fait il est censé prendre l'id le plus important (donc le dernier entré pour le mettre en news) mais en fait quand on regarde ma bdd,l'id s'incrémente correctement mais cette dernière ligne entrée ne se met pas en bas de ma bdd mais en avant dernière place (je sais pas si cela a son importance donc je le dis quand même, même si mes id sont correctent) et la derniere ligne de ma table c'est la new qui est donc statique (sur ma page de news)


je vous montre mon code

Page de news
 <?
	  $req="select * from actu";
	  $requet=mysql_query($req);
	  
	  $i=0;
		while($i<mysql_num_rows($requet))
		{
				$i++;
		}
		$titre = mysql_result($requet,$i-1,"titre");
		$texte = mysql_result($requet,$i-1,"texte");
		$photo = mysql_result($requet,$i-1,"photo");
		
		
		echo"<font color='#B9D041' ><b>".$titre."</b></font>";
		echo"<br><br>";
		
		echo "<table background-position: center widht='100%'><tr>";
		echo "<td widht='70%' align='justify' valign='top'>".$texte."<br></td>";
		echo "<td valign='middle'><img src='Images/".$photo."' width='220' height='220'></td>";
		echo "</tr></table>";
	  
	  ?>

Page d'archive
<?
		$req="select * from actu";
		$requet=mysql_query($req);
		$nb = mysql_num_rows($requet);
		
		
		$longeur_max=330;
		
		//fonction pour tronquer du texte
					function Tronquer_Texte($txt, $longeur_max)
				{
					if (strlen($txt) > $longeur_max)
					{
					$txt = substr($txt, 0, $longeur_max);
					//strrpos($ch1,$ch2) recherche le caractère $ch2 dans la chaine $ch1 en partant de la fin de la chaîne.
					$dernier_espace = strrpos($txt, " ");
					$txt = substr($txt, 0, $dernier_espace)."...";
					}
				
					return $txt;
				}
				
		$i=0;
		
		while ($i<$nb-1)
		{
				$id=mysql_result($requet,$i,'id');
				$titre=mysql_result($requet,$i,'titre');
				$photo=mysql_result($requet,$i,'photo');
				$texte=mysql_result($requet,$i,'texte');
				
				
				// style='border-collapse: collapse;  = permet de fusionner les bordures
				echo "<table  border='1' bordercolor='#CCCCCC' style='border-collapse: collapse;' widht='100%'><tr>";
				echo "<td><img src='Images/".$photo."' height='100' width='100'></td>";
				
				echo "<td widht='100%'><font color='#B9D041'><b>".$titre."</b></font><br><br>";
				echo Tronquer_Texte($texte, $longeur_max);
				echo "<br><br><div align='right'><a href='sujet_archive.php?id=".$id."'> En savoir plus?</a></div></td>";
				
				echo "</tr></table><br>";
				$i++;
		}

?>
C'est mon mysql_num_rows ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

27 mars 2006, 12:35

Salut,

Tu peux simplifier le code en ne séléctionnant que ce qui est important dans la page.
Page de news:
$req="select * from actu ORDER BY id DESC LIMIT 1";
$requet=mysql_query($req);      

$titre = mysql_result($requet,0,"titre");
$texte = mysql_result($requet,0,"texte");
$photo = mysql_result($requet,0,"photo");  
Page d'archive:
$req="select * from actu ORDER BY id DESC ";
$requet=mysql_query($req);

$donnee = mysql_fetch_array($requet); // pour ne pas prendre la dernière news, lecture de l'enregistrement

while ($donnee = mysql_fetch_assoc($requet))
{
   $id=$donnee['id'];
   $titre=$donnee['titre'];
   $photo=$donnee['photo'];
   $texte=$donnee['texte'];

   //reste du code
   // ....
}

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

Ziwa
Invité n'ayant pas de compte PHPfrance

27 mars 2006, 14:35

Impeccable, merci pour ton aide.

J'suis bête, je passe a coté de pleins de choses à force d'utiliser toujours les même choses, j'suis désolé si mes question sont bête parfois

J'aimerais une petite précision avant de pouvoir mettre ce sujet en resolu


Pour ceci
while ($donnee = mysql_fetch_assoc($requet))
J'avais pour habitude d'utiliser un mysql_fetch_array et un $row['texte'] pour récupéré les valeurs, qu'es qu'apporte en plus le mysql_fetch_assoc?

mysql_fetch_assoc() retourne un tableau associatif qui contient la ligne lue dans le résultat result et déplace le pointeur interne de données. mysql_fetch_assoc() revient à appeler la fonction mysql_fetch_array() avec MYSQL_ASSOC en tant que second paramètre. Cette fonction retourne uniquement un tableau associatif.
Pour moi c'est du chinois

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

27 mars 2006, 14:43

avec mysql_fetch_array tu peut utiliser le retour de deux manières, par exemple:
$donnee = mysql_fetch_array($requet);
echo $donnee[0]; //tableau indexé
echo $donnee['id']; //tableau associatif 
revient donc au meme affichage, alors que mysql_fetch_assoc ne retourne qu'un tableau associatif donc:
$donnee = mysql_fetch_assoc($requet);
echo $donnee['id'];

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