bonjour a tous
je suis un débutant et je n essaye pas de faire un site internet et de plus moi et el php c est pas une histoire d amour
je voudrais juste créer une page de commentaire avec validation dans la base de donnée pour filtrer le spam par exemple
pour l instant dans mon fichier il y a en haut les commentaires qui ont été valider , mais qui va disparaître pour laisser place aux commentaire paginer
et c est la ou j ai des soucis je ne parviens pas a ce que seul les messages autorises puissent s afficher
et encore pire a chaque rafraichissement du navigateur le dernier commentaire se dupplique
bref cela ne fonctionne pas avec la pagination
si vous pourriez m aider merci
Code : Tout sélectionner
<?php
session_start();
// On détermine sur quelle page on se trouve
if(isset($_GET['page']) && !empty($_GET['page'])){
$currentPage = (int) strip_tags($_GET['page']);
}else{
$currentPage = 1;
}
// On se connecte à là base de données
include('base1.php');
// On détermine le nombre total d'monsite
$sql = 'SELECT COUNT(*) AS nb_monsite FROM `commentaire`;';
// On prépare la requête
$query = $bdd->prepare($sql);
// On exécute
$query->execute();
// On récupère le nombre d'monsite
$result = $query->fetch();
$nbmonsite = (int) $result['nb_monsite'];
// On détermine le nombre d'monsite par page
$parPage = 5;
// On calcule le nombre de pages total
$pages = ceil($nbmonsite / $parPage);
// Calcul du 1er donnees de la page
$premier = ($currentPage * $parPage) - $parPage;
$sql = 'SELECT * FROM `commentaire` ORDER BY `date_enregistrement` DESC LIMIT :premier, :parpage;';
// On prépare la requête
$query = $bdd->prepare($sql);
$query->bindValue(':premier', $premier, PDO::PARAM_INT);
$query->bindValue(':parpage', $parPage, PDO::PARAM_INT);
// On exécute
$query->execute();
// On récupère les valeurs dans un tableau associatif
$monsite = $query->fetchAll(PDO::FETCH_ASSOC);
//require_once('close.php');
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
</head>
<!-- fin head -->
<!-- debut body -->
<div class="container">
<title>phil le perleur</title>
<?php
$mysqli = new Mysqli('localhost', 'root', '', 'monsite');
$contenu = '';
if($_POST)
{
$_POST['pseudo'] = addslashes($_POST['pseudo']);
$_POST['message'] = addslashes($_POST['message']);
if(!empty($_POST['pseudo']) && !empty($_POST['message']))
{
$mysqli->query("INSERT INTO commentaire (pseudo, message, date_enregistrement) VALUES ('$_POST[pseudo]', '$_POST[message]', NOW())") OR DIE ($mysqli->error);
$contenu .= '<div class="validation">Votre message/question a bien été enregistré </br>il est en attende de validation .</div>';
}
else
{
$contenu .= '<div class="erreur">Afin de déposer un commentaire, veuillez svp remplir tous les champs du formulaire.</div>';
}
}
$resultat = $mysqli->query("SELECT pseudo, message, DATE_FORMAT(date_enregistrement, '%d/%m/%Y') AS datefr, DATE_FORMAT(date_enregistrement, '%H:%i:%s') AS heurefr FROM commentaire WHERE valider = 1 ORDER BY date_enregistrement DESC");
$contenu .= '<h2>' . $resultat->num_rows . ' commentaire(s)';
while($commentaire = $resultat->fetch_assoc())
{
$contenu .= '<div class="message">';
$contenu .= "<div class=\"titre\">Par: " . $commentaire['pseudo'] . ', le ' . $commentaire['datefr'] . " à " . $commentaire['heurefr'] . "</div>";
$contenu .= '<div class="contenu">' . $commentaire['message'] . '</div>';
$contenu .= '</div>';
}
//---------------------------------------------------------------------------------------------
// Partie formulaire d'envoi de commentaire
?>
<!-- ici je demande que s affiche les commentaires valider a supprimer par la suite-->
<div class="commentaire"><?php echo $contenu; ?></div>
<!-- ici je demande que s affiche les commentaires valider -->
<!-- dans la partie qui suit je cherche a paginer aussi que les messages valider , mais ils sont tous afficher-->
<!-- il faudrait donc trouver une solution qui dirait que si dans la base de donnee il y a un o dans la colonne valider que les messages ne s affichent pas-->
<div class="container" style=" max-width: 50%;margin:auto;">
<ul class="nav nav-pills nav-justified">
<li class="nav-item">
<a class="nav-link " href="?page=<?= $currentPage - 1 ?>" class="page-link">Précédente</a>
<?php for($page = 1; $page <= $pages; $page++): ?>
</li>
<li class="nav-item">
<a class="nav-link" href="?page=<?= $page ?>" class="page-link"><?= $page ?></a>
<?php endfor ?>
<?= ($currentPage == $pages) ? "derniere" : "" ?>
</li>
<li class="nav-item">
<a class="nav-link" href="?page=<?= $currentPage + 1 ?>" class="page-link">Suivante</a>
</li>
</ul>
</div>
<div class="container" style=" max-width: 100%;margin:auto;">
<div class="row">
<div class="col">
pseudo
</div>
<div class="col">
message
</div>
<div class="col">
date
</div>
</div>
<?php
foreach($monsite as $donnees){
?>
<div class="row">
<div class="col">
<?= $donnees['pseudo'] ?>
</div>
<div class="col">
<?= $donnees['message'] ?>
</div>
<div class="col">
<?= $donnees['date_enregistrement'] ?>
</div>
</div>
<?php
}
?>
</div>
<div class="container" style=" max-width: 50%;margin:auto;margin-top:5%;">
<form method="post" action="">
<div class="row justify-content-center">
<div class="col-4">
<label >une question /un commentaire a poser</label>
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<label for="pseudo">Pseudo</label>
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<input type="text" id="pseudo" name="pseudo" maxlength="20" pattern="[a-zA-Z0-9.-_]+" title="caractère autorisés : a-zA-Z0-9.-_">
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<label for="message">Message</label>
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<textarea id="message" name="message" cols="50" rows="7"></textarea>
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<input type="submit" value="Envoyer le message">
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
</form>
</div>
</div>
</div>
</body>
</html>
bonjour a tous
je suis un débutant et je n essaye pas de faire un site internet et de plus moi et el php c est pas une histoire d amour
je voudrais juste créer une page de commentaire avec validation dans la base de donnée pour filtrer le spam par exemple
pour l instant dans mon fichier il y a en haut les commentaires qui ont été valider , mais qui va disparaître pour laisser place aux commentaire paginer
et c est la ou j ai des soucis je ne parviens pas a ce que seul les messages autorises puissent s afficher
et encore pire a chaque rafraichissement du navigateur le dernier commentaire se dupplique
bref cela ne fonctionne pas avec la pagination
si vous pourriez m aider merci
[code]<?php
session_start();
// On détermine sur quelle page on se trouve
if(isset($_GET['page']) && !empty($_GET['page'])){
$currentPage = (int) strip_tags($_GET['page']);
}else{
$currentPage = 1;
}
// On se connecte à là base de données
include('base1.php');
// On détermine le nombre total d'monsite
$sql = 'SELECT COUNT(*) AS nb_monsite FROM `commentaire`;';
// On prépare la requête
$query = $bdd->prepare($sql);
// On exécute
$query->execute();
// On récupère le nombre d'monsite
$result = $query->fetch();
$nbmonsite = (int) $result['nb_monsite'];
// On détermine le nombre d'monsite par page
$parPage = 5;
// On calcule le nombre de pages total
$pages = ceil($nbmonsite / $parPage);
// Calcul du 1er donnees de la page
$premier = ($currentPage * $parPage) - $parPage;
$sql = 'SELECT * FROM `commentaire` ORDER BY `date_enregistrement` DESC LIMIT :premier, :parpage;';
// On prépare la requête
$query = $bdd->prepare($sql);
$query->bindValue(':premier', $premier, PDO::PARAM_INT);
$query->bindValue(':parpage', $parPage, PDO::PARAM_INT);
// On exécute
$query->execute();
// On récupère les valeurs dans un tableau associatif
$monsite = $query->fetchAll(PDO::FETCH_ASSOC);
//require_once('close.php');
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/
[email protected]/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
</head>
<!-- fin head -->
<!-- debut body -->
<div class="container">
<title>phil le perleur</title>
<?php
$mysqli = new Mysqli('localhost', 'root', '', 'monsite');
$contenu = '';
if($_POST)
{
$_POST['pseudo'] = addslashes($_POST['pseudo']);
$_POST['message'] = addslashes($_POST['message']);
if(!empty($_POST['pseudo']) && !empty($_POST['message']))
{
$mysqli->query("INSERT INTO commentaire (pseudo, message, date_enregistrement) VALUES ('$_POST[pseudo]', '$_POST[message]', NOW())") OR DIE ($mysqli->error);
$contenu .= '<div class="validation">Votre message/question a bien été enregistré </br>il est en attende de validation .</div>';
}
else
{
$contenu .= '<div class="erreur">Afin de déposer un commentaire, veuillez svp remplir tous les champs du formulaire.</div>';
}
}
$resultat = $mysqli->query("SELECT pseudo, message, DATE_FORMAT(date_enregistrement, '%d/%m/%Y') AS datefr, DATE_FORMAT(date_enregistrement, '%H:%i:%s') AS heurefr FROM commentaire WHERE valider = 1 ORDER BY date_enregistrement DESC");
$contenu .= '<h2>' . $resultat->num_rows . ' commentaire(s)';
while($commentaire = $resultat->fetch_assoc())
{
$contenu .= '<div class="message">';
$contenu .= "<div class=\"titre\">Par: " . $commentaire['pseudo'] . ', le ' . $commentaire['datefr'] . " à " . $commentaire['heurefr'] . "</div>";
$contenu .= '<div class="contenu">' . $commentaire['message'] . '</div>';
$contenu .= '</div>';
}
//---------------------------------------------------------------------------------------------
// Partie formulaire d'envoi de commentaire
?>
<!-- ici je demande que s affiche les commentaires valider a supprimer par la suite-->
<div class="commentaire"><?php echo $contenu; ?></div>
<!-- ici je demande que s affiche les commentaires valider -->
<!-- dans la partie qui suit je cherche a paginer aussi que les messages valider , mais ils sont tous afficher-->
<!-- il faudrait donc trouver une solution qui dirait que si dans la base de donnee il y a un o dans la colonne valider que les messages ne s affichent pas-->
<div class="container" style=" max-width: 50%;margin:auto;">
<ul class="nav nav-pills nav-justified">
<li class="nav-item">
<a class="nav-link " href="?page=<?= $currentPage - 1 ?>" class="page-link">Précédente</a>
<?php for($page = 1; $page <= $pages; $page++): ?>
</li>
<li class="nav-item">
<a class="nav-link" href="?page=<?= $page ?>" class="page-link"><?= $page ?></a>
<?php endfor ?>
<?= ($currentPage == $pages) ? "derniere" : "" ?>
</li>
<li class="nav-item">
<a class="nav-link" href="?page=<?= $currentPage + 1 ?>" class="page-link">Suivante</a>
</li>
</ul>
</div>
<div class="container" style=" max-width: 100%;margin:auto;">
<div class="row">
<div class="col">
pseudo
</div>
<div class="col">
message
</div>
<div class="col">
date
</div>
</div>
<?php
foreach($monsite as $donnees){
?>
<div class="row">
<div class="col">
<?= $donnees['pseudo'] ?>
</div>
<div class="col">
<?= $donnees['message'] ?>
</div>
<div class="col">
<?= $donnees['date_enregistrement'] ?>
</div>
</div>
<?php
}
?>
</div>
<div class="container" style=" max-width: 50%;margin:auto;margin-top:5%;">
<form method="post" action="">
<div class="row justify-content-center">
<div class="col-4">
<label >une question /un commentaire a poser</label>
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<label for="pseudo">Pseudo</label>
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<input type="text" id="pseudo" name="pseudo" maxlength="20" pattern="[a-zA-Z0-9.-_]+" title="caractère autorisés : a-zA-Z0-9.-_">
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<label for="message">Message</label>
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<textarea id="message" name="message" cols="50" rows="7"></textarea>
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
<input type="submit" value="Envoyer le message">
</div>
</div>
<div class="row justify-content-center">
<div class="col-4">
</form>
</div>
</div>
</div>
</body>
</html>[/code]