FAIRE UN LIVRE D'OR AVEC PHP LE PLUS FACILEMENT POSSIBLE

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 10 avril 2007 à 12:05
kiki9741 Messages postés 9 Date d'inscription lundi 10 juillet 2006 Statut Membre Dernière intervention 4 juillet 2007 - 18 avril 2007 à 11:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42157-faire-un-livre-d-or-avec-php-le-plus-facilement-possible

kiki9741 Messages postés 9 Date d'inscription lundi 10 juillet 2006 Statut Membre Dernière intervention 4 juillet 2007
18 avril 2007 à 11:34
Un autre point que je soummet à vos critiques ^_^ :

Le livre d'or risque de recevoir un certain nombre de message à vocation publicitaire ...

Avant de valider l'insertion dans la bdd, pourquoi ne pas faire une petite série de contrôle :

$message_ok = TRUE ;
$mots_bannis = array("www, "http"", ".com", ".fr"); // etc ...

foreach($mots_bannis as $mot)
{
/* si on trouve un des mots bannis dans le message,
* on passe la variable $message_ok à FALSE
*/
if( strpos($_POST['message'], $mot) != FALSE )$message_ok = FALSE ;
}
// etc ...

Quand pensez-vous ?
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
10 avril 2007 à 12:05
Comme d'hab pour ce genre de source plusieurs erreurs basiques...

Le second couple mysql_connect()/mysql_select() est inutile

-------------------------------------------------
if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
if ($_POST['pseudo'] != NULL AND $_POST['message'] != NULL)
{

===>

if(isset($_POST['pseudo']) && !empty($_POST['pseudo']) && isset($_POST['message']) && !empty($_POST['message']))
{

---------------------------------------

Le htmlentities doit se faire à l'affichage et non à l'insertion... les données ne sont pas échappées avant l'insertion permettant des sql injection...

mysql_query('INSERT INTO livreor VALUES(\'\', \''.mysql_real_escape_string($_POST['pseudo']).'\', \''.mysql_real_escape_string($_POST['message']).'\')');

le premier mysql_close() est à virer... .. .

----------------------------------------

le second couple connect/select est à virer... ta requête SELECT n'est pas optimisée... le * est inutile vu que tu sais de quels champs tu as besoin...

$result = mysql_query('SELECT pseudo,message FROM livreor ORDER BY ID DESC LIMIT 0,10');
mysql_close();

while(false !($msg mysql_fetch_array($result)))
echo '
'.htmlentities($msg['pseudo']).' : '.nl2br(htmlentities($msg['message'])).'


';

--------------------------------------------------

A regretter :

- aucune gestion des erreurs
- pas de possibilité d'éditer ou de supprimer un message (ça implique une authentification)
- manque éventuellement un champs mail pour les posteurs
- pas de possibilité de voir les messages précédant ceux affichés (ou alors faut intégrer un garbage collector)

4/10

@ tchaOo°
Rejoignez-nous