Erreur syntaxe forum PHP
Résolu
zack5163v
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
zack5163v Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
zack5163v Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'etais en train de faire un systeme de pagination en PHP.
Mais cela m'affiche deux erreurs:
( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''0','2'' à la ligne 1' in C:\wamp\www\...\...\forum.php on line 180
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''0','2'' à la ligne 1 in C:\wamp\www\...\...\forum.php on line 180
Voici le code:
En gros la pagination ne s'affiche pas et affiche une erreur qui englobe tout le code HTML. La ligne 180 est a partir du execute().
j'etais en train de faire un systeme de pagination en PHP.
Mais cela m'affiche deux erreurs:
( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''0','2'' à la ligne 1' in C:\wamp\www\...\...\forum.php on line 180
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''0','2'' à la ligne 1 in C:\wamp\www\...\...\forum.php on line 180
Voici le code:
<?php $topicsParPage = 2; $topicsTotalesReq = $bdd->query("SELECT id FROM topics WHERE forum_id = '".$_GET['id']."'"); $topicsTotales = $topicsTotalesReq->rowCount(); $pagesTotales = ceil($topicsTotales/$topicsParPage); if(isset($_GET['page']) AND !empty($_GET['page']) AND $_GET['page'] > 0 AND $_GET['page'] <= $pagesTotales) { $_GET['page'] = intval($_GET['page']); $pageCourante = $_GET['page']; } else { $pageCourante = 1; } $depart = ($pageCourante-1)*$topicsParPage; $topic_sql = $bdd->prepare("SELECT * FROM topics WHERE forum_id = '".$_GET['id']."' AND sticked = 0 ORDER BY id desc LIMIT ?,?"); $topic_sql->execute(array($depart,$topicsParPage)); if ($topic_sql->rowCount() < 1) { echo '<div class="plan-nothing">Aucun sujet pour le moment</div>'; } else { while($topic = $topic_sql->fetch(PDO::FETCH_OBJ)) { ?> <div class="plan-content"> <div class="plan-area plan-title-area"> <div class="plan-wrapper"> <div class="plan-icon"><i class="fa fa-file-o"></i> <?php if($topic->locked > 0) { ?> <div class="plan-locked"><i class="fa fa-lock"></i></div> <?php } ?> </div> <a href="viewtopic.php?id=<?= $topic->id; ?>" class="secondary-link"><?= $topic->name; ?></a> <div class="plan-meta">Par <a href="profil.php?id=<?= $topic->author_id; ?>" class="primary-link"><?php echo getUsernameByAuthorId($topic->author_id); ?></a>, le <?= $topic->added_date; ?> à <?= $topic->added_time; ?></div> </div> </div> <div class="plan-area plan-stats-area"> <div class="plan-wrapper"> <div class="plan-replies"><?php echo countReplies($topic->id); ?> réponses</div> </div> </div> <div class="plan-area plan-posts-area"> <div class="plan-wrapper"> ... </div> </div> </div> <?php } for($i=1;$i<=$pagesTotales;$i++) { if($i == $pageCourante) { echo $i.' '; } else { echo '<a href="forum.php?id='.$_GET['id'].'&page='.$i.'">'.$i.'</a> '; } } } ?>
En gros la pagination ne s'affiche pas et affiche une erreur qui englobe tout le code HTML. La ligne 180 est a partir du execute().
A voir également:
- Erreur syntaxe forum PHP
- Plinko avis forum ✓ - Forum Vos droits sur internet
- Coco chat alternative forum ✓ - Forum Réseaux sociaux
- Coco forum ✓ - Forum Réseaux sociaux
- Youppi forum - Forum Réseaux sociaux
- Iptv bug forum ✓ - Forum Box et Streaming vidéo
1 réponse
Bonjour,
Il semble donc que ce soit ta requête qui pose problème
Déjà ... (ça n'a rien à voir avec le souci..mais bon...), commence par récupérer PROPREMENT les variables AVANT de les utiliser. (surtout pour les GET ou les POST
Comme ceci :
Tu peux les utiliser dans ton code :
$topic_sql = $bdd->prepare("SELECT * FROM topics WHERE forum_id = '$id' AND sticked = 0 ORDER BY id desc LIMIT ?,?");
$topic_sql->execute(array($depart,$topicsParPage));
</code>
Ensuite, prends l'habitude de séparer les "requête" de son exécution afin de pouvoir en faire un echo en cas de problème. ( avec un bloc try/catch c'est encore mieux)
comme ceci :
Si l'erreur persiste ... tu prends la requête qui va s'afficher grâce au debug (le catch) ... tu remplaces les variables par leur valeurs (également grâce au debug...)
et tu testes cette requête DIRECTEMENT dans ta BDD.
Là .. tu devrais être en mesure de comprendre l'erreur.
Cordialement,
Jordane
Il semble donc que ce soit ta requête qui pose problème
$topic_sql = $bdd->prepare("SELECT * FROM topics WHERE forum_id = '".$_GET['id']."' AND sticked = 0 ORDER BY id desc LIMIT ?,?"); $topic_sql->execute(array($depart,$topicsParPage));
Déjà ... (ça n'a rien à voir avec le souci..mais bon...), commence par récupérer PROPREMENT les variables AVANT de les utiliser. (surtout pour les GET ou les POST
Comme ceci :
$id = !empty($_GET['id']) ? $_GET['id'] : NULL;
- j'ai mis comme valeur par défaut "null" .. mais tu peux mettre autre chose.
Tu peux les utiliser dans ton code :
$topic_sql = $bdd->prepare("SELECT * FROM topics WHERE forum_id = '$id' AND sticked = 0 ORDER BY id desc LIMIT ?,?");
$topic_sql->execute(array($depart,$topicsParPage));
</code>
Ensuite, prends l'habitude de séparer les "requête" de son exécution afin de pouvoir en faire un echo en cas de problème. ( avec un bloc try/catch c'est encore mieux)
comme ceci :
//---------------------------------------------------------------------------------------// //On prépare la requete et les variables //---------------------------------------------------------------------------------------// $sql = "SELECT * FROM topics WHERE forum_id = :id AND sticked = 0 ORDER BY id DESC LIMIT :depart,:topicsParPage "; $a_datas = array(':id'=>$id , ':depart'=>$depart ,':topicsParPage'=>$topicsParPage); //---------------------------------------------------------------------------------------// //on exécute la requête dans un bloc try/catch pour intercepter les erreurs // et faire du debug en affichant la requête en cause et les variables : //---------------------------------------------------------------------------------------// try{ $topic_sql = $bdd->prepare($sql); $topic_sql->execute($a_datas); }catch(Exception $e){ // en cas d'erreur echo "<br><b>Erreur ! </b>" . $e->getMessage();; echo "<br><b>Requete : </b><br>".$sql."<br>"; echo "<br><b>Variables : </b><br>"; print_r($a_datas); }
Si l'erreur persiste ... tu prends la requête qui va s'afficher grâce au debug (le catch) ... tu remplaces les variables par leur valeurs (également grâce au debug...)
et tu testes cette requête DIRECTEMENT dans ta BDD.
Là .. tu devrais être en mesure de comprendre l'erreur.
Cordialement,
Jordane
Quelqu'un pourrait m'expliquer car j'ai pas compris pourquoi cette erreur quand je faisais cela:
Par contre.. tu n'as tenu compte d'aucune de mes remarques.... ni -même pris la peine d'essayer le code que je t'ai donné !