par
Cyrano » 15 août 2005, 18:02
Tu as un découpage de tableau bizarre avec notament un while qui doit te générer un genre de tableau html des plus exotiques. Voici ton code ré-indenté proprement: regarde l'échelonnement et essayes d'imaginer ce que ça va générer en html à chaque tour: des lignes fermées jamais ouvertes par exemple.
Ensuite, : c'est quoi les accollades aux lignes 201 et 210 (du code que je mets ci-dessous.) Tu mets en commentaire qu'il s'agit d'une fonction, mais tu ne commences pas par function xyz(). De toutes façon, une fonction n'a pas sa place dans une boucle: à cet endroit, on fait appel éventuellement à une fonction extérieure à la boucle en lui envoyant le paramètre récupéré lors du tour de boucle en cours.
Enfin, il manque une accollade fermante que j'ai rajoutée ligne 233.
Repositionne ton html, à mon avis, ce sera déjà un notable progrès et ensuite on verra l'histoire du changement de page.
<?php
function barre_navigation ($nb_total, $nb_affichage_par_page, $debut, $nb_liens_dans_la_barre)
{
$barre = '';
// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "")
{
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else
{
$tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1)
{
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else
{
if ($tableau[0] == "")
{
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else
{
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
}
}
}
// on calcul le numéro de la page active
$page_active = floor(($debut/$nb_affichage_par_page)+1);
// on calcul le nombre de pages total que va prendre notre affichage
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
// on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
// exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
if ($nb_liens_dans_la_barre%2==0)
{
$cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
$cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
}
else
{
$cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
$cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
}
if ($cpt_deb1 <= 1)
{
$cpt_deb = 1;
$cpt_fin = $nb_liens_dans_la_barre;
}
elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total)
{
$cpt_deb = $cpt_deb1;
$cpt_fin = $cpt_fin1;
}
else
{
$cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
$cpt_fin = $nb_pages_total;
}
if ($nb_pages_total <= $nb_liens_dans_la_barre)
{
$cpt_deb=1;
$cpt_fin=$nb_pages_total;
}
// si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
if ($cpt_deb != 1)
{
$cible = $query.(0);
$lien = '<A HREF="'.$cible.'"><<</A> ';
}
else
{
$lien='';
}
$barre .= $lien;
// on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++)
{
if ($cpt == $page_active)
{
if ($cpt == $nb_pages_total)
{
$barre .= $cpt;
}
else
{
$barre .= $cpt.' - ';
}
}
else
{
if ($cpt == $cpt_fin)
{
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>";
}
else
{
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A> - ";
}
}
}
$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0)
{
$fin = $fin - $nb_affichage_par_page;
}
// si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
if ($cpt_fin != $nb_pages_total)
{
$cible = $query.$fin;
$lien = ' <A HREF="'.$cible.'">>></A>';
}
else
{
$lien='';
}
$barre .= $lien;
return $barre;
}
?>
<html>
<head>
<title></title>
</head>
</body>
<br />
<br />
<table width="580" border="0" align="center" cellpadding="0" cellspacing="0" class="defaut">
<tr>
<td colspan="5"> </td>
</tr>
<tr>
<td width="70" align="center" nowrap class="titre_petit_non_souligne"> </td>
<td width="10" class="titre_petit_non_souligne"> </td>
<td width="190" class="titre_non_souligne_centre"> Pratique</td>
<td width="20" class="titre_petit_non_souligne"> </td>
<td width="290" class="titre_non_souligne_centre"> Recette</td>
</tr>
<tr>
<td height="1" colspan="5">
<?php
// on se connecte à notre base
$base = mysql_connect ('localhost', 'root', 'admin');
mysql_select_db ('cuisine', $base);
// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(*) FROM recettes';
// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);
// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0)
{
echo 'Aucune réponse trouvée';
}
else
{
// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$nb_affichage_par_page = 3;
// Préparation de la requête avec le LIMIT
$sql = 'SELECT * FROM recettes ORDER BY ref DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on va scanner tous les tuples un par un
while ($data = mysql_fetch_array($req))
{
?><a href="_detail_recettes.php?idrecettes=<?php echo $val["ref"]; ?>" class="TOrange1"><?php echo $data["titre"]; ?></a> </td>
</tr>
<tr>
<td width="70" align="center" valign="top"><img src="img/recettesimg/<?php echo $data["img1"]; ?>" width="50"></td>
<td width="10" align="left" valign="top"> </td>
<td width="190" align="left" valign="top">
<?php echo $data["sousTitre"]; ?><br>
<span class="TOrange"><?php echo $data["difficulte"]; ?></span>
</td>
<td width="20" align="left" valign="top"> </td>
<td width="290" align="left" valign="top">
<?php
{
//Fonction résumé de texte
$nbmots = '20';
$resword = split(" ", $data["texte"], ($nbmots+1));
for($i=0 ; $i < $nbmots ; $i++)
{
print "$resword[$i] ";
}
echo"...";
}
?> </td>
</tr>
<tr>
<td height="1" colspan="5"><hr align="center" width="90%" size="1" class="barre_Orange"></td>
</tr>
<tr>
<td colspan="5" class="menu_pixel">
<?php
/* on affiche les résultats dans la <table>
echo '<tr><td><td>' , stripslashes(htmlentities(trim($data['sousTitre']))) , '</td></tr>';
} */
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
// on affiche enfin notre barre
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
mysql_close ();
}
?>
</td>
</tr>
</table>
</body>
</html>
Tu as un découpage de tableau bizarre avec notament un while qui doit te générer un genre de tableau html des plus exotiques. Voici ton code ré-indenté proprement: regarde l'échelonnement et essayes d'imaginer ce que ça va générer en html à chaque tour: des lignes fermées jamais ouvertes par exemple.
Ensuite, : c'est quoi les accollades aux lignes 201 et 210 (du code que je mets ci-dessous.) Tu mets en commentaire qu'il s'agit d'une fonction, mais tu ne commences pas par function xyz(). De toutes façon, une fonction n'a pas sa place dans une boucle: à cet endroit, on fait appel éventuellement à une fonction extérieure à la boucle en lui envoyant le paramètre récupéré lors du tour de boucle en cours.
Enfin, il manque une accollade fermante que j'ai rajoutée ligne 233.
Repositionne ton html, à mon avis, ce sera déjà un notable progrès et ensuite on verra l'histoire du changement de page.
[php]<?php
function barre_navigation ($nb_total, $nb_affichage_par_page, $debut, $nb_liens_dans_la_barre)
{
$barre = '';
// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "")
{
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else
{
$tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1)
{
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else
{
if ($tableau[0] == "")
{
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else
{
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
}
}
}
// on calcul le numéro de la page active
$page_active = floor(($debut/$nb_affichage_par_page)+1);
// on calcul le nombre de pages total que va prendre notre affichage
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
// on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
// exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
if ($nb_liens_dans_la_barre%2==0)
{
$cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
$cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
}
else
{
$cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
$cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
}
if ($cpt_deb1 <= 1)
{
$cpt_deb = 1;
$cpt_fin = $nb_liens_dans_la_barre;
}
elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total)
{
$cpt_deb = $cpt_deb1;
$cpt_fin = $cpt_fin1;
}
else
{
$cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
$cpt_fin = $nb_pages_total;
}
if ($nb_pages_total <= $nb_liens_dans_la_barre)
{
$cpt_deb=1;
$cpt_fin=$nb_pages_total;
}
// si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
if ($cpt_deb != 1)
{
$cible = $query.(0);
$lien = '<A HREF="'.$cible.'"><<</A> ';
}
else
{
$lien='';
}
$barre .= $lien;
// on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++)
{
if ($cpt == $page_active)
{
if ($cpt == $nb_pages_total)
{
$barre .= $cpt;
}
else
{
$barre .= $cpt.' - ';
}
}
else
{
if ($cpt == $cpt_fin)
{
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>";
}
else
{
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A> - ";
}
}
}
$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0)
{
$fin = $fin - $nb_affichage_par_page;
}
// si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
if ($cpt_fin != $nb_pages_total)
{
$cible = $query.$fin;
$lien = ' <A HREF="'.$cible.'">>></A>';
}
else
{
$lien='';
}
$barre .= $lien;
return $barre;
}
?>
<html>
<head>
<title></title>
</head>
</body>
<br />
<br />
<table width="580" border="0" align="center" cellpadding="0" cellspacing="0" class="defaut">
<tr>
<td colspan="5"> </td>
</tr>
<tr>
<td width="70" align="center" nowrap class="titre_petit_non_souligne"> </td>
<td width="10" class="titre_petit_non_souligne"> </td>
<td width="190" class="titre_non_souligne_centre"> Pratique</td>
<td width="20" class="titre_petit_non_souligne"> </td>
<td width="290" class="titre_non_souligne_centre"> Recette</td>
</tr>
<tr>
<td height="1" colspan="5">
<?php
// on se connecte à notre base
$base = mysql_connect ('localhost', 'root', 'admin');
mysql_select_db ('cuisine', $base);
// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(*) FROM recettes';
// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);
// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0)
{
echo 'Aucune réponse trouvée';
}
else
{
// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$nb_affichage_par_page = 3;
// Préparation de la requête avec le LIMIT
$sql = 'SELECT * FROM recettes ORDER BY ref DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on va scanner tous les tuples un par un
while ($data = mysql_fetch_array($req))
{
?><a href="_detail_recettes.php?idrecettes=<?php echo $val["ref"]; ?>" class="TOrange1"><?php echo $data["titre"]; ?></a> </td>
</tr>
<tr>
<td width="70" align="center" valign="top"><img src="img/recettesimg/<?php echo $data["img1"]; ?>" width="50"></td>
<td width="10" align="left" valign="top"> </td>
<td width="190" align="left" valign="top">
<?php echo $data["sousTitre"]; ?><br>
<span class="TOrange"><?php echo $data["difficulte"]; ?></span>
</td>
<td width="20" align="left" valign="top"> </td>
<td width="290" align="left" valign="top">
<?php
{
//Fonction résumé de texte
$nbmots = '20';
$resword = split(" ", $data["texte"], ($nbmots+1));
for($i=0 ; $i < $nbmots ; $i++)
{
print "$resword[$i] ";
}
echo"...";
}
?> </td>
</tr>
<tr>
<td height="1" colspan="5"><hr align="center" width="90%" size="1" class="barre_Orange"></td>
</tr>
<tr>
<td colspan="5" class="menu_pixel">
<?php
/* on affiche les résultats dans la <table>
echo '<tr><td><td>' , stripslashes(htmlentities(trim($data['sousTitre']))) , '</td></tr>';
} */
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
// on affiche enfin notre barre
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
mysql_close ();
}
?>
</td>
</tr>
</table>
</body>
</html>
[/php]