Souci avec un livre d'or en html
Résolu/Fermé
A voir également:
- Souci avec un livre d'or en html
- Or - Guide
- Livre coran en français pdf - Télécharger - Histoire & Religion
- Editeur html - Télécharger - HTML
- Request header or cookie too large - Forum Webmastering
- Br html ✓ - Forum Webmastering
19 réponses
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
1 mars 2012 à 19:37
1 mars 2012 à 19:37
bonsoir,
sans code ça risque d'être difficile
sans code ça risque d'être difficile
Voila le code html du formulaire:
Il faudrait que les commentaire de ce formulaire apparaissent dans la meme page au dessus par exemple.
<html> <head> <link type="text/css" rel="stylesheet" href="style.css" /> <title>Insertion d'une nouvelle signature</title> </head> <center> <form action="livredor.php" method="post"> <table border=1px bordercolor="#002DFF"/> <tr><td> <span>Pseudo :</span> </td><td> <input type="text" name="pseudo" maxlength="30" size="50" value=""> </td></tr> <tr><td> <span>Votre message :</span> </td><td> <textarea name="message" cols="50" rows="10"></textarea> <input type="submit" name="go" value="Signer"> </td></tr></table> </form> </center> </body> </html>
Il faudrait que les commentaire de ce formulaire apparaissent dans la meme page au dessus par exemple.
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
1 mars 2012 à 19:52
1 mars 2012 à 19:52
et le php ?
Justement c'est ce qu'il me manque je suis aller voir sur le site du zéro mais ils expliquent qu'avec une base de donnée moi je veux juste que ce soit comme sur un blog, le commentaire s'affiche et basta.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je suppose que faire un script.php validant le commentaire est facile pour vous mais pas pour moi qui débute.
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
1 mars 2012 à 20:03
1 mars 2012 à 20:03
ca passe par une base de donnée sur un blog
tu peux aussi le faire par fichier mais il faut coder des fonctions qui remplace la base de donnée
tu peux aussi le faire par fichier mais il faut coder des fonctions qui remplace la base de donnée
Tout ça pour un malheureux commentaire?? il y a pas moyen de faire plus simple, car pour afficher un commentaire sur une page ça ma l'air bien hardu quand meme.
Si vraiment il y a pas d'autres solution merci de m'orienter vers les "fonctions" qui remplacent la bdd.
Si vraiment il y a pas d'autres solution merci de m'orienter vers les "fonctions" qui remplacent la bdd.
graffx
Messages postés
6506
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
24 mars 2019
1 975
2 mars 2012 à 00:07
2 mars 2012 à 00:07
Coucou et merci,
J'utilise ce code pour poster un message et ça marche mais un soucis persiste, le commentaire n'est pas sauvegardé sur la page quand un autre commentaire est envoyé, le code:
Il faudrait que chaque commentaire reste sur la page en question une fois envoyé, comment faire ça?
J'utilise ce code pour poster un message et ça marche mais un soucis persiste, le commentaire n'est pas sauvegardé sur la page quand un autre commentaire est envoyé, le code:
if (isset($_POST['pseudo']) && isset($_POST['com])) { echo 'De'.$_POST['pseudo'].' pseudo: '.$_POST['com']; }
Il faudrait que chaque commentaire reste sur la page en question une fois envoyé, comment faire ça?
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
4 mars 2012 à 23:14
4 mars 2012 à 23:14
en l'écrivant dans un fichier ou dans une base de donnée.
echo ne fait qu'afficher pour le script en court c'est normal que ca ne sauvegarde pas ce n'est pas sont but.
soit tu écris dans un fichier et tu vas récupérer ton fichier pour le lire et l'afficher ou alors tu insert dans une base de donnée et tu sélectionnes les messages ce qui est a mon avis plus simple à mettre en place pour pouvoir administrer les message.
une dernière chose protège tes variables
htmlentities() et si tu utilise une base de donnée utilise pdo et des requêtes préparées
echo ne fait qu'afficher pour le script en court c'est normal que ca ne sauvegarde pas ce n'est pas sont but.
soit tu écris dans un fichier et tu vas récupérer ton fichier pour le lire et l'afficher ou alors tu insert dans une base de donnée et tu sélectionnes les messages ce qui est a mon avis plus simple à mettre en place pour pouvoir administrer les message.
une dernière chose protège tes variables
htmlentities() et si tu utilise une base de donnée utilise pdo et des requêtes préparées
Ok c'est bien noté pour les htmlentities() ^^
Donc avant de me lancer dans le langage SQL je tente quand meme de faire sans vue que c'est juste une page de com's que je veux.Dans mon apprentissage j'ai un code qui m'affiche bien le livre d'or en m'affichant (cette fois-ci) une fois sur 2 le commentaire en question.
Voici le code php de la page livre d'or:
Le fichier livredor.dat dont la page livredor.php se sert pour afficher les messages ne semble pas fonctionner :/ je précise qu'il est bien dans le meme répertoire que livredor.php, une erreur de code?
Merci.
Donc avant de me lancer dans le langage SQL je tente quand meme de faire sans vue que c'est juste une page de com's que je veux.Dans mon apprentissage j'ai un code qui m'affiche bien le livre d'or en m'affichant (cette fois-ci) une fois sur 2 le commentaire en question.
Voici le code php de la page livre d'or:
/* PARAMETRES A DEFINIR */ // Nombre maximum de commentaires à afficher par page define('NB_COM_PAR_PAGES', 8); // Nombre maximum de pages de commentaires affichées define('NB_MAX_PAGES', 999); // Nombre maximum de caractères possible dans un commentaire define('LONGUEUR_MAX_COM', 1500); // Nombre maximum de caractères par mot // pour éviter une augmentation de la largeur des tableaux define('LONGUEUR_MAX_MOT', 70); // Chemin du fichier qui stocke les messages du livre d'or define('FICHIER_MESSAGES', 'livredor.dat'); $message = (isset($_POST['message'])) ? $_POST['message'] : ""; $nom = (isset($_POST['pseudo'])) ? $_POST['pseudo'] : ""; $email = (isset($_POST['email'])) ? $_POST['email'] : ""; $page = (isset($_GET['page'])) ? $_GET['page'] : 1; if(!file_exists(FICHIER_MESSAGES)) { // attention le repertoire doit avoir les droits // en ecriture pour la creation du fichier $FichierLivre=fopen(FICHIER_MESSAGES,'w+'); $ligne1 = "Fichier livre d'or, ne pas éditer !\n"; fputs($FichierLivre, $ligne1); fclose($FichierLivre); }
Le fichier livredor.dat dont la page livredor.php se sert pour afficher les messages ne semble pas fonctionner :/ je précise qu'il est bien dans le meme répertoire que livredor.php, une erreur de code?
Merci.
Utilisateur anonyme
5 mars 2012 à 23:41
5 mars 2012 à 23:41
Bonsoir,
Ton code crée bien le fichier livredor.dat avec la phrase que tu indiques à l'intérieur.
Il faut savoir que "w+" : Ouvre en lecture et écriture ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.
Personnellement, j'utiliserai "a+" pour l'écriture et un "r" tout simple pour la lecture.
De plus, ton "if(!file_exists(FICHIER_MESSAGES))" ne sert à rien.
Je te propose ceci :
J'espère que c'est ça que tu veux.
Ton code crée bien le fichier livredor.dat avec la phrase que tu indiques à l'intérieur.
Il faut savoir que "w+" : Ouvre en lecture et écriture ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.
Personnellement, j'utiliserai "a+" pour l'écriture et un "r" tout simple pour la lecture.
De plus, ton "if(!file_exists(FICHIER_MESSAGES))" ne sert à rien.
Je te propose ceci :
<?php /* PARAMETRES A DEFINIR */ // Nombre maximum de commentaires à afficher par page define('NB_COM_PAR_PAGES', 8); // Nombre maximum de pages de commentaires affichées define('NB_MAX_PAGES', 999); // Nombre maximum de caractères possible dans un commentaire define('LONGUEUR_MAX_COM', 1500); // Nombre maximum de caractères par mot // pour éviter une augmentation de la largeur des tableaux define('LONGUEUR_MAX_MOT', 70); // Chemin du fichier qui stocke les messages du livre d'or define('FICHIER_MESSAGES', 'livredor.dat'); $message = (isset($_POST['message'])) ? $_POST['message'] : ""; $nom = (isset($_POST['pseudo'])) ? $_POST['pseudo'] : ""; $email = (isset($_POST['email'])) ? $_POST['email'] : ""; $page = (isset($_GET['page'])) ? $_GET['page'] : 1; // Ecriture du fichier $FichierLivre=fopen(FICHIER_MESSAGES,'a+'); fputs($FichierLivre, $nom); fputs($FichierLivre, " : "); fputs($FichierLivre, $message); fputs($FichierLivre, "\n"); // Pour passer une ligne fclose($FichierLivre); // Lecture du fichier $FichierLivre=fopen(FICHIER_MESSAGES,'r'); while (!feof($FichierLivre)) { //on parcourt toutes les lignes echo fgets($FichierLivre, 2000)."<br>"; // lecture du contenu de la ligne } fclose($FichierLivre); ?>
J'espère que c'est ça que tu veux.
Coucou et merci beaucoup, ton code marche mais j'ai pu faire plus simple encore, les commentaires s'affichent bien mais cette fois j'ai le soucis en sens inverse, a chaque actualisation ou visite avec un autre navigateur j'ai ça qui s'affiche dans mon fichier.doc:
C'est pas génial car en actualisant la page le commentaire précédant reviens et en la visitation d'un autre navigateur voila ce qui apparrait a la place d'un commentaire: ()
Voila le code que j'utilise pour ma page livredor:
Le code me semble bon pourtant, erreur de balise peut-etre?
Merci.
<b>ggggg</b> (<a href="mailto:"></a>) - 05/03/2012 23:59:30<br>gggggggg<br><hr> <b>ggggg</b> (<a href="mailto:"></a>) - 06/03/2012 00:00:51<br>gggggggg<br><hr> <b></b> (<a href="mailto:"></a>) - 06/03/2012 00:01:21<br><br><hr> <b></b> (<a href="mailto:"></a>) - 06/03/2012 00:01:35<br><br><hr>
C'est pas génial car en actualisant la page le commentaire précédant reviens et en la visitation d'un autre navigateur voila ce qui apparrait a la place d'un commentaire: ()
Voila le code que j'utilise pour ma page livredor:
<html> <head> <link type="text/css" rel="stylesheet" href="style.css" /> <title>Insertion d'une nouvelle signature</title> </head> <?php //Ouverture du fichier en écriture $fp = fopen("/var/www/commentaires.doc",a); //On convertit les caracteres html $nom = htmlspecialchars($_POST['nom']); $mail = htmlspecialchars($_POST['mail']); $message = stripslashes(nl2br(htmlentities($_POST['message']))); $d = date ( "d/m/Y H:i:s" ); $page = ""; $lemail = "<a href=\"mailto:$mail\">$mail</a>"; $page .= "<b>$nom</b> (".$lemail.") - $d<br>$message<br><hr>\n"; //On rajoute le message fwrite($fp,"$page" ,strlen("$page")); //fermeture du fichier fclose($fp); ?> <center> <form action="livredor.php" method="post"> <table border=1px bordercolor="#000000"/> <tr><td> <span class="gras">Pseudo :</span> </td><td> <input type="text" name="nom" maxlength="30" size="50" value=""> </td></tr> <tr><td> <span class="gras">Votre message :</span> </td><td> <textarea name="message" cols="50" rows="10"></textarea> </td></tr><tr><td><td align="center"> <script type="text/javascript" src="http://www.google.com/recaptcha/api/challenge?k=6Lf9A8sSAAAAAFOFiTr5U5vt-G_WjOmcQ1jJ7b1P"></script> <noscript> <iframe src="http://www.google.com/recaptcha/api/noscript?k=6Lf9A8sSAAAAAFOFiTr5U5vt-G_WjOmcQ1jJ7b1P" height="300" width="500" frameborder="0"></iframe><br/> <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/> </noscript> <input type="submit" name="go" value="Signer"> </td></tr></table> </form> </center> <?php include("commentaires.doc"); ?> </body> </html>
Le code me semble bon pourtant, erreur de balise peut-etre?
Merci.
Utilisateur anonyme
6 mars 2012 à 00:42
6 mars 2012 à 00:42
Je te conseille de créer une autre page contenant ton code php qui ajoutera le commentaire (fichier qui porte le nom de "livredoradd.php" par exemple) et à la fin de cette page, tu rajoutes :
Ce qui aura pour effet de revenir sur le formulaire et d'afficher les commentaires.
Et n'oublie pas de vérifier si "nom" et "message" ont bien été envoyés par le formulaire.
header('Location: livredor.php');
Ce qui aura pour effet de revenir sur le formulaire et d'afficher les commentaires.
Et n'oublie pas de vérifier si "nom" et "message" ont bien été envoyés par le formulaire.
Merci de ta réponse, j'ai pu régler le problème du () qui revenait a chaque visite de page en rajoutant cette ligne:
Par contre en actualisant la page l'ancien commentaire reviens toujours :/
Pour ton conseil je prends note, c'est pour des raisons de sécurité c'est ça?
if (!empty($_POST['nom']) && !empty($_POST['message']) )
Par contre en actualisant la page l'ancien commentaire reviens toujours :/
Pour ton conseil je prends note, c'est pour des raisons de sécurité c'est ça?
Problème régler merci !
Une dernière question, niveau sécurité quel droit donner au fichier? ne faut-il pas non plus mettre des token? j'ai vu ça sur un forum qui parlé de sécurité web.
Une dernière question, niveau sécurité quel droit donner au fichier? ne faut-il pas non plus mettre des token? j'ai vu ça sur un forum qui parlé de sécurité web.
Utilisateur anonyme
Modifié par Adenora le 6/03/2012 à 01:00
Modifié par Adenora le 6/03/2012 à 01:00
C'est juste pour éviter d'avoir ton ancien commentaire qui revient quand tu actualises ta page.
Edit : Niveau sécurité, je ne m'y connais pas trop.
Edit : Niveau sécurité, je ne m'y connais pas trop.
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
7 mars 2012 à 00:15
7 mars 2012 à 00:15
pour la sécurité l'accès a un fichier ne joue pas vraiment.
mais ça ne fait pas très pro si en entrant l'url du fichier il s'affiche. il faut le mettre dans un autre répertoire avec un fichier .htaccess qui n'autorise pas l'accès par http
mais pour si tu apprends ce n'est pas grave qu'on puisse avoir accès a ce fichier.
le mieux reste de tout faire passer par le fichier index.php et de développer le reste en objet ça à beau d'avantage comment centralisé la sécurité. réduire le code en évitent les répétitions, le rendre plus clair et mieux organiser et finalement te faciliter la vie.
plutot que fileopen etc.
utilise plutot file_put_contents et file_get_contents
https://www.php.net/manual/fr/function.file-put-contents.php
https://www.php.net/manual/fr/function.file-get-contents.php
pour file_put_contents utilise systématiquement le flag LOCK_EX ça permet d'éviter bien des soucis
mais ça ne fait pas très pro si en entrant l'url du fichier il s'affiche. il faut le mettre dans un autre répertoire avec un fichier .htaccess qui n'autorise pas l'accès par http
mais pour si tu apprends ce n'est pas grave qu'on puisse avoir accès a ce fichier.
le mieux reste de tout faire passer par le fichier index.php et de développer le reste en objet ça à beau d'avantage comment centralisé la sécurité. réduire le code en évitent les répétitions, le rendre plus clair et mieux organiser et finalement te faciliter la vie.
plutot que fileopen etc.
utilise plutot file_put_contents et file_get_contents
https://www.php.net/manual/fr/function.file-put-contents.php
https://www.php.net/manual/fr/function.file-get-contents.php
pour file_put_contents utilise systématiquement le flag LOCK_EX ça permet d'éviter bien des soucis
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
Modifié par Atropa le 7/03/2012 à 00:24
Modifié par Atropa le 7/03/2012 à 00:24
une dernière chose en espérant qu'il n'y ait pas d'erreur de code. (je suis fatigué et je le sors d'une class développé dans un autre contexte)
insère ce code au début de chaque page te permet de sécurisé toutes les données autres que les fichiers entré par l'utilisateur
ça permet de ne pas avoir a appeler les htmlentities a chaque entrée get post ou cookie au risque d'en oublié et ça reste totalement réversible avec html_entity_decode
insère ce code au début de chaque page te permet de sécurisé toutes les données autres que les fichiers entré par l'utilisateur
function secure($item) { $object = false; if(is_array($item) || (is_object($item) && get_class($item) === 'stdClass')) { if(!is_array($item)) { $item = (array)$item; $object = true; } foreach($item as $key => $value) { if(is_array($value) || (is_object($item) && get_class($item) === 'stdClass')) $item[$key] = secure($value); else if(is_string($value)) $item[$key] = htmlentities($value); else $item[$key] = $value; } return ($object)? (object)$item : $item; } elseif(is_string($item)) return htmlentities($item); else return $item; } if(isset($_GET)) $_GET = secure($_GET); if(isset($_POST)) $_GET = secure($_POST); if(isset($_COOKIE)) $_GET = secure($_COOKIE);
ça permet de ne pas avoir a appeler les htmlentities a chaque entrée get post ou cookie au risque d'en oublié et ça reste totalement réversible avec html_entity_decode