bonjour a tous
je viens de trouver un super tuto pour relaiser une page ou les utlisateurs peuvent ecrire des commentaires
il fonctionne a merveille
mais je souhaiterais avoir une moderation sur les commentaires
donc que je puisse les lire avant leurs publications
qui a une idee comment je pourrais m y prendre
merci de l aide
<?php
// Partie connexion à la BDD et initialisation
$mysqli = new Mysqli('localhost', 'root', '', 'dialogue');
$contenu = '';
//---------------------------------------------------------------------------------------------
// Partie enregistrement
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 a bien été enregistré.</div>';
}
else
{
$contenu .= '<div class="erreur">Afin de déposer un commentaire, veuillez svp remplir tous les champs du formulaire.</div>';
}
}
//---------------------------------------------------------------------------------------------
// Partie affichage des commentaires
$résultat = $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 ORDER BY date_enregistrement DESC");
$contenu .= '<h2>' . $résultat->num_rows . ' commentaire(s)';
while($commentaire = $résultat->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
?>
<!Doctype html>
<html>
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="commentaire"><?php echo $contenu; ?></div>
<form method="post" action="">
<label for="pseudo">Pseudo</label><br>
<input type="text" id="pseudo" name="pseudo" maxlength="20" pattern="[a-zA-Z0-9.-_]+" title="caractère autorisés : a-zA-Z0-9.-_"><br>
<label for="message">Message</label><br>
<textarea id="message" name="message" cols="50" rows="7"></textarea><br>
<input type="submit" value="Envoyer le message">
</form>
</body>
</html>
avoir le cotrole sur les commentaire avant la publication
il faut que tu fasses
<?php
$mysqli = new Mysqli('localhost', 'root', '', 'dialogue');
$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 a bien été enregistré.</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)';
if($commentaire !== null)
{
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>';
}
}
Bonjour flexi 2202,
Je pense que tu pourrais peut-être rajouter une colonne dans ta table ou il y a tes commentaires.
Une colonne qui retient si le commentaire a été validé ou non.
Bonjour,
tu rajoutes un champ "valider" par défault sur false dans la table des commentaires ensuite dans la partie affichage tu fais un where valider = true
bonjour
merci pour l aide c est gentil
donc je vais dans ma base de donnee ajoute ce champ "valider" mais dans la colonne "valeur par defaut "je ne vois pas false ?je laisse en "aucun"
dans la partie affichage je mets un where valider = true
comme ceci
// Partie affichage des commentaires
$résultat = $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 ORDER BY date_enregistrement DESC");
$contenu .= '<h2>' . $résultat->num_rows . ' commentaire(s)';
while($commentaire = $résultat->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>';
where valider = true
}
Tu rajoutes le champ valider dans ta table commentaire, les booléens c'est soit 1 ou 0 dans la table donc par défault c'est 0 ensuite lors de ta requête sql pour récupérer tes commentaires tu rajoutes le where `$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");
merci de votre aide a tous c est genial
mais j ai une erreur
apres avoir modifie lecode de cette maniere
// Partie affichage des commentaires
$résultat = `$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>' . $résultat->num_rows . ' commentaire(s)';
while($commentaire = $résultat->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>';
}
j ai cette belle erreur
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\wamp64\www\dialogue\dialogue.php on line 32
$contenu .= '<div class="titre">Par: ' . $commentaire['pseudo'] . ', le ' . $commentaire['datefr'] . ' à ' . $commentaire['heurefr'] . '</div>';
Il faudrait aussi fermer ta balise h2 $contenu .= '<h2>' . $résultat->num_rows . ' commentaire(s)</h2>';
merci pour l aide
dans la table des donnees ?
j ai laisse sur "aucun " pour le champ "valider"
donc pour le champ valider j ai fait ceci
4 valider int(11) Non Aucun(e)
Met la valeur par défaut à 0.
Comme ça aucun ne sera null et tu pourras les récupérer plus facilement pour les valider.
le code que j ai trouve est ecrit en mysqli
je l ai poste en debut de ce post
mais bon que cela soit fait en PDO ou en mysqli
ce que je recherche c est juste une methode pour qu un visiteur puisse poster des commentaires , mais que je puisse controler avant leurs mise en ligne
Ce que tu as mis en place te permettra de faire la modération des commentaires maintenant il y a une petite erreur de syntaxe.
fait des var_dumps sur toutes tes variables a différents endroit de ton script, tu verras peut etre pourquoi ça plante
merci pour l aide
j en ai mis deux de cette facon
<?php
// Partie connexion à la BDD et initialisation
$mysqli = new Mysqli('localhost', 'root', '', 'dialogue');
$contenu = '';
//---------------------------------------------------------------------------------------------
// Partie enregistrement
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 a bien été enregistré.</div>';
}
else
{
$contenu .= '<div class="erreur">Afin de déposer un commentaire, veuillez svp remplir tous les champs du formulaire.</div>';
}
}
echo var_dump($contenu) . "<br>";
echo var_dump($commentaire) . "<br>";
//---------------------------------------------------------------------------------------------
// Partie affichage des commentaires
$résultat = `$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>' . $résultat->num_rows . ' commentaire(s)';
echo var_dump($contenu) . "<br>";
echo var_dump($commentaire) . "<br>";
while($commentaire = $résultat->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
?>
mais toujours l erreur
j ai donc modifie comme ceci
echo var_dump($contenu) . "<br>"OR DIE ($mysqli->error);
echo var_dump($commentaire) . "<br>"OR DIE ($mysqli->error);
mais toujours pareil
Et un die juste après cette ligne : $contenu .= '<h2>' . $résultat->num_rows . ' commentaire(s)';
a cette ligne
$contenu .= '<div class="titre">Par: ' . $commentaire['pseudo'] . ', le ' . $commentaire['datefr'] . ' à ' . $commentaire['heurefr'] . '</div>';
Après ta requête tu fais $commentaire = $résultat->fetch_assoc();
et ensuite tu fais le var_dump($commentaire); die();
pour voir ce que tu récupères de la base de donnée.
la variable $commentaire
contient les messages que les utilisateurs laisse et que j aimerais valider avant leurs publications
Si l'erreur est présente à la ligne $contenu .= '<div class="titre">Par: ' . $commentaire['pseudo'] . ', le ' . $commentaire['datefr'] . ' à ' . $commentaire['heurefr'] . '</div>';
et si tu fais le var_dump et die avant celle-ci tu ne dois pas avoir une erreur ou alors l'erreur ne vient pas de cette ligne.
merci pour l aide
mais j ai toujours l erreur a cette ligne
voic le nouveau code avec les var_dump
<?php
// Partie connexion à la BDD et initialisation
$mysqli = new Mysqli('localhost', 'root', '', 'dialogue');
$contenu = '';
//---------------------------------------------------------------------------------------------
// Partie enregistrement
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 a bien été enregistré.</div>';
}
else
{
$contenu .= '<div class="erreur">Afin de déposer un commentaire, veuillez svp remplir tous les champs du formulaire.</div>';
}
}
echo var_dump($contenu) . "<br>"OR DIE ($mysqli->error);
echo var_dump($commentaire) . "<br>"OR DIE ($mysqli->error);
//---------------------------------------------------------------------------------------------
// Partie affichage des commentaires
$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)</h2>'OR DIE ($mysqli->error);
echo var_dump($contenu) . "<br>"OR DIE ($mysqli->error);
echo var_dump($commentaire) . "<br>"OR DIE ($mysqli->error);
while($commentaire = $resultat->fetch_assoc());
var_dump($commentaire); die();
{
$contenu .= '<div class="message">';
var_dump($commentaire); die();
$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
?>
et la base de donnee
--
-- Structure de la table `commentaire`
--
DROP TABLE IF EXISTS `commentaire`;
CREATE TABLE IF NOT EXISTS `commentaire` (
`id_commentaire` int(3) NOT NULL AUTO_INCREMENT,
`pseudo` varchar(20) NOT NULL,
`message` text NOT NULL,
`valider` int(11) NOT NULL DEFAULT '0',
`date_enregistrement` datetime NOT NULL,
PRIMARY KEY (`id_commentaire`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
Il y a un simple quote de trop devant : $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");
Le bon code est :
<?php
$mysqli = new Mysqli('localhost', 'root', '', 'dialogue');
$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 a bien été enregistré.</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>';
}
Merci pour la solution
cela a regle l erreur
par contre j en ai deux nouvelles a la fin du code
$contenu .= '<div class="titre">Par: ' . $commentaire['pseudo'] . ', le ' . $commentaire['datefr'] . ' à ' . $commentaire['heurefr'] . '</div>';
$contenu .= '<div class="contenu">' . $commentaire['message'] . '</div>';
qui sont les suivantes
Notice: Trying to access array offset on value of type null in C:\wamp64\www\dialogue\dialogue.php on line 38
Notice: Trying to access array offset on value of type null in C:\wamp64\www\dialogue\dialogue.php on line 38
Notice: Trying to access array offset on value of type null in C:\wamp64\www\dialogue\dialogue.php on line 38
Notice: Trying to access array offset on value of type null in C:\wamp64\www\dialogue\dialogue.php on line 39
ouppss
desole
je viens jsute de voir le nouveau code
plus d erreur
en effet
je teste et je reviens
un tout tres grand merci
non non c est bon
tout y est
juste que j avais ouvert la reponse trop vite et donc que le code n etais pas encore dans al reponse
mais tout fonctionne a merveille
un tout tres grand merci
vous etes geniaux
bonne fin d apres midi
Tu parles de quoi sydneyikia ? Le code fonctionne parfaitement mais il voulait rajouter la modération des commentaires...