j'ai une page qui liste les enregistrements d'une table sql, avec des mises en forme différentes selon la valeur de certains champs et un span avec une id correspondant à celle de l'enregistrement afin de pouvoir faire un lien vers cette ancre.
la table contient 297 enregistrements
tout s'affiche comme il faut...sauf qu'à partir de l'enregistrement 237, plus rien ne va: plus de span, plus de retour à la ligne, plus de css, bref plus de mise en forme
Etonnant...
c'est la première fois que ce genre de truc m'arrive !
Mon code
<?php require_once("connexion.php"); $sql = 'SELECT * FROM t_p2018 ORDER BY num_rep ASC';$retour =mysql_query($sql)or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); while ($donnees = mysql_fetch_array($retour))
{
if ($donnees['typ'] == 'titre1') { ?>
<h2 id="<?echo stripslashes($donnees['num_rep']);?>"><span style='font-size: 16px;font-weight: 700;%;color: red;' class='bg-warning'> <?php echo stripslashes($donnees['num_rep'])?></span> <?php echo stripslashes($donnees['biarnes']);?></h2>
<p><span class='text-success bg-warning '><strong>(Traduction: <?php echo stripslashes($donnees['francais']);?>)</strong></span></p>
<p class='bg-info' style='color: red;'>
<?php $sqlnbp = 'SELECT COUNT(DISTINCT personnage) AS nbpers FROM t_p2018 WHERE scene = '.$donnees['scene'].' AND typ = "replik"'; $retournbp = mysql_query($sqlnbp) or die('Erreur SQL !<br>'.$sqlnbp.'<br>'.mysql_error()); $nbpdonnees = mysql_fetch_array($retournbp); $nbp = $nbpdonnees['nbpers'];?> <small><u>Il y a <?php echo $nbp;?> personnages dans cette scène</u>:<br/>
<?php $sqlp= 'SELECT DISTINCT personnage FROM t_p2018 WHERE scene = '.$donnees['scene'].' AND typ = "replik" '; $retourp =mysql_query($sqlp)or die('Erreur SQL !<br>'.$sqlp.'<br>'.mysql_error()); while ($donneesp = mysql_fetch_array($retourp)) { echo $donneesp['personnage']." ";} ?> </small>
</p> <?php }
elseif ($donnees['typ'] == 'titre2') { ?>
<h3 id="<?php echo stripslashes($donnees['num_rep']);?>"><span style='font-size: 16px;font-weight: 700;%;color: red;' class='bg-warning'><?php echo stripslashes($donnees['num_rep']);?></span> <?php echo stripslashes($donnees['biarnes']);?></h3>
<span class='text-success bg-warning'><small><small>(Traduction: <?php echo stripslashes($donnees['francais']);?>)</small></small></span><br/><br/>
<? }
elseif ($donnees['typ'] == 'didas') { ?>
<em id="<?php echo stripslashes($donnees['num_rep']);?>"><span style='font-size: 16px;font-weight: 700;%;color: red;' class='bg-warning'><?php echo stripslashes($donnees['num_rep']);?></span> <?php echo stripslashes($donnees['biarnes']);?></em><br/>
<em><small><span class='text-success bg-warning'>(<u>Traduction</u>: <?php echo stripslashes($donnees['francais']);?></small></em></span><br/><br/><? }
else { ?> <span id="<?php echo stripslashes($donnees['num_rep'])?>"><span style='font-size: 16px;font-weight: 700;%;color: red;' class='bg-warning'><?php echo stripslashes($donnees['num_rep'])?> </span> <strong><?php echo stripslashes($donnees['personnage']);?>: </strong>
<?php if ($donnees['corrbiarnes']!=="") { echo stripslashes($donnees['corrbiarnes']);?></span><br/><s><? echo stripslashes($donnees['biarnes']);?></s><?php } else {echo stripslashes($donnees['biarnes']);}?><br/>
<span class='text-success bg-warning'><small>(<u>Traduction</u>: <?php if ($donnees['corrfrancais']!=="") { echo stripslashes($donnees['corrfrancais']);?><br/>
<s><? echo stripslashes($donnees['francais']);?></s><?php } else {echo stripslashes($donnees['francais']);}?>)</small></span><br/><br/>
<? }
} ?>
Votre avis ?
PS: Je ne sais pas si ça a de l'importance: le site est sur Free
mmh ! tu as identifié où c'était ? parce que vu la nature du problème je ne suis pas sûr que ce soit ça: si la balise n'était pas bien fermée, tous les enregistrements auraient le même problème, non ?
ça me chagrine d'autant plus que dans la même page, j'ai le code ci-dessous, qui, lui, affiche tout ce qu'il faut jusqu'au bout !
<?php require_once("connexion.php"); $sql = 'SELECT * FROM t_p2018 ORDER BY num_rep ASC';$retour =mysql_query($sql)or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); while ($donnees = mysql_fetch_array($retour)){
if ($donnees['typ'] == 'titre1') { ?>
<h2 id="<?echo stripslashes($donnees['num_rep']);?>"><span style='font-size: 16px;font-weight: 700;%;color: red;' class='bg-warning'> <?php echo stripslashes($donnees['num_rep'])?></span> <?php echo stripslashes($donnees['biarnes']);?></h2> <p class='bg-info' style='color: red;'> <?php $sqlnbp = 'SELECT COUNT(DISTINCT personnage) AS nbpers FROM t_p2018 WHERE scene = '.$donnees['scene'].' AND typ = "replik"'; $retournbp = mysql_query($sqlnbp) or die('Erreur SQL !<br>'.$sqlnbp.'<br>'.mysql_error()); $nbpdonnees = mysql_fetch_array($retournbp); $nbp = $nbpdonnees['nbpers'];?> <small><u>Il y a <?php echo $nbp;?> personnages dans cette scène</u>:<br/> <?php $sqlp= 'SELECT DISTINCT personnage FROM t_p2018 WHERE scene = '.$donnees['scene'].' AND typ = "replik" '; $retourp =mysql_query($sqlp)or die('Erreur SQL !<br>'.$sqlp.'<br>'.mysql_error()); while ($donneesp = mysql_fetch_array($retourp)) { echo $donneesp['personnage']." ";} ?> </small></p>
<?php }
elseif ($donnees['typ'] == 'titre2') { ?>
<h3 id="<?php echo stripslashes($donnees['num_rep']);?>"><span style='font-size: 16px;font-weight: 700;%;color: red;' class='bg-warning'><?php echo stripslashes($donnees['num_rep']);?></span>
<?php echo stripslashes($donnees['biarnes']);?></h3>
<?php }
elseif ($donnees['typ'] == 'didas') { ?>
<em id="<?php echo stripslashes($donnees['num_rep']);?>"><span style='font-size: 16px;font-weight: 700;%;color: red;' class='bg-warning'><?php echo stripslashes($donnees['num_rep']);?></span>
<?php echo stripslashes($donnees['biarnes']);?></em><br/> <?php }
else { ?> <span id="<?php echo stripslashes($donnees['num_rep'])?>"><span style='font-size: 16px;font-weight: 700;%;color: red;' class='bg-warning'><?php echo stripslashes($donnees['num_rep'])?> </span> <strong>
<?php echo stripslashes($donnees['personnage']);?>: </strong> <?php if ($donnees['corrbiarnes']!=="") { echo stripslashes($donnees['corrbiarnes']);?></span><br/>
<s><? echo stripslashes($donnees['biarnes']);?></s><?php } else {echo stripslashes($donnees['biarnes']);}?><br/>
<?php }
}
?>
(suivant la variable d'URL la page affiche soit l'un, soit l'autre)
alors j'ai testé en remplaçant les données dans ce dernier code, et en l'isolant dan sune page à part et paf rebelote.
Maintenant tu pourrais utiliser mon deuxième conseil.
A savoir numéroter tes if/else pour savoir quel partie du code bug.
J'ai remarqué une autre erreur dans la partie de ton else ligne 53
Dans ce bloc tu ouvre un span ligne 55 que tu ferme uniquement si ta condition if ligne 59 est vrai.
Quand c'est faux, tu passes au else de la ligne 61 qui lui ne ferme pas le span.
Il y a peu être d'autre erreur mais si tu numérotes tes conditions tu devrais pouvoir localiser les lignes qui te posent problème plus facilement.
Ton code est très dense et très compliqué à lire. Ca rend le débogage très dur.
Tu devrais dans un premier temps supprimer tout les attributs style de tes balises html et les placer toute le mise en page dans ton css, cela va un peu éclaircir ton code.
Ensuite ton code fais trois quasiment la même chose, tu devrais pouvoir le factoriser, cela rendrait la lecture plus facile.
Enfin placer tes requêtes SQL au milieu de ta sortie html est pour moi un mauvaise idée, ça complexifie le code.
Tu devrais faire tes requêtes en amont puis quand c'est fait t'occuper de l'affichage.
Pourquoi fermer des balises en dehors de ton include ?
ben heu je sais que j'ai eu à un moment une bonne raison de le faire (ou je l'ai cru) mais je me rappelle plus pourquoi, mais bon je modifierais ça car tu as raison, et je m'étais fait aussi la réflexion
Edit: ça y est je me rappelle tout d'un coup: c'était pour pouvoir rajouter des éléments au menu pour certaines pages, mais j'ai finalement contourné le problème
Tu devrais dans un premier temps supprimer tout les attributs style de tes balises html et les placer toute le mise en page dans ton css, cela va un peu éclaircir ton code.
ouaip, ça j'avais prévu de la faire...après
Edit: ayé c'est fait
Ensuite ton code fais trois fois quasiment la même chose, tu devrais pouvoir le factoriser, cela rendrait la lecture plus facile.
Le principe DRY ? comme il est expliqué ici ? j'y ai pensé, mais ça me paraissait un peu compliqué à mettre en oeuvre: j'avoue avoir quelques lacunes en la matière... Edit: Si je sais faire un include pour éviter de répéter 36 fois (et pouvoir éventuellement modifier le code facilement en 1 fois), je ne sais pas comment factoriser trois requêtes identiques mais avec des données différentes, surtout si ces dernières sont DÉJÀ des variables...
il faut que je trouve une meilleure définition des variables ? Là je vois pas comment...je vais y réfléchir
Enfin placer tes requêtes SQL au milieu de ta sortie html est pour moi un mauvaise idée, ça complexifie le code. Tu devrais faire tes requêtes en amont puis quand c'est fait t'occuper de l'affichage.
ah ? parce que à une époque c'est ce que je faisais et puis j'ai changé parce que je trouvais ça plus pratique.
Edit: J'ai essayé de regrouper le plus possible, mais étant donné qu'il y a des éléments espacés dans la page qui dépendent des if, je suis obligé de rajouter des if, elseif à chaque élément en question. Y a un autre moyen ?
réduit au maximum mon code est identique grosso modo à ceci (j'en ai profité pour passer en pdo)
<?php include('connexionPDO.php');
$sql = 'SELECT * FROM t_p2018 ORDER BY num_rep ASC';
$retour= $bdd->query($sql); while ($donnees= $retour->fetch())
{
if ($_GET['version'] == 3)
{
// je n'ai pas indiqué la mise en forme mais elle change selon le typ
if ($donnees['typ']=="t1")
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
echo $donnees['traduction'] ."<br />";
}
if ($donnees['typ']=="t2")
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
echo $donnees['traduction'] ."<br />";
}
if ($donnees['typ']=="didas")
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
echo $donnees['traduction'] ."<br />";
}
if ($donnees['typ']=="replik")
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
echo $donnees['traduction'] ."<br />";
}
}
if ($_GET['version'] == 2)
{
if ($donnees['typ']=="t1")
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
}
if ($donnees['typ']=="t2")
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
}
if ($donnees['typ']=="didas")
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
}
if ($donnees['typ']=="replik")
{
echo $donnees['numero'] ." - ";
echo $donnees['original'] ."<br />";
echo $donnees['traduction'] ."<br />";
}
}
if ($_GET['version'] == 1)
{
if ($donnees['typ']=="t1")
{
echo $donnees['numero'] ." - ";
echo $donnees['traduction'] ."<br />";
}
if ($donnees['typ']=="t2")
{
echo $donnees['numero'] ." - ";
echo $donnees['traduction'] ."<br />";
}
if ($donnees['typ']=="didas")
{
echo $donnees['numero'] ." - ";
echo $donnees['traduction'] ."<br />";
}
if ($donnees['typ']=="replik")
{
echo $donnees['numero'];
echo $donnees['traduction'] ."<br />";
}
}
} ?>
(et ça, ça fonctionne !)
c'est ça qu'il faut que je factorise...mais comment ?
A dire vrai, je commence seulement maintenant à comprendre l'avantage du MVC, à propos duquel j'ai lu un article récemment...
Cependant j'ai encore du mal à saisir ces notions de classes, d'objet, d'instances et de méthodes: ça me fait pas tilt ! donc je continue à l'ancienne
waouh, je n'en espérais pas tant, merci beaucoup !
les arrays me posent toujours un problème de compréhension, ce qui fait que je ne les utilise pas, sauf bien sûr pour récupérer des données, puisque là, je ne peux faire autrement, mais à dire la vérité, je recopie sans vraiment comprendre.
je vais potasser tout ça, pour comprendre et l'adapter ensuite à l'ensemble de mon code...je sens que ça va m'ouvrir des horizons nouveaux
pour le pdo, je sais oui: j'ai tout une autre partie du site avec des formulaires où je prépare effectivement les requêtes, mais ici y a pas de variables, ce n'est que de la consultation de données, donc je pense pas que ce soit utile ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Ce qui se conçoit bien s'énonce clairement.
Ce qui se conçoit bien s'énonce clairement.
Ce qui se conçoit bien s'énonce clairement.
Ce qui se conçoit bien s'énonce clairement.
Ce qui se conçoit bien s'énonce clairement.
Ce qui se conçoit bien s'énonce clairement.