IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Script de commentaires


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut Script de commentaires
    Bonjour

    J'ai fait un site pour un client où j'ai des pages comprenant des articles. J'ai créé un script PHP permettant aux visiteurs de laisser des commentaires sur chacune des pages comprenant un article
    Pour éviter les spammeurs, j'ai mis un système de captcha (le code change à chaque fois)

    Tout allait bien depuis un mois, mais depuis hier des spammeurs réussissent à mettre 150 messages par jour et par page...

    J'ai du commettre une/des erreur(s)
    Le mieux est que je vous donne tous les codes



    Voilà une page HTML où je met le script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
     
     
    <?php
    header ("Content-type: image/jpeg"); 
    // Gestion du numéro d'article sur la page
    	$num_article = 5;
    // ---------------------------------------
     
    // Création d'un code aléatoire ----------------------------------------
        $password = "";
        $basket = "abcdefghijklmnopqrstuvwxyz";
        $basket .= "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     
    	$i = 0;
    	while ($i < 6) {
    		$nb = rand(0, 61);
    		$car = substr($basket, $nb, 1);
    		$password .= $car;
    		$i++;
    	} 
    // ---------------------------------------------------------------------
     
    // Création de l'image de code -----------------------------------------
    if (isset($_SERVER["REDIRECT_SCRIPT_URI"])) {
    $adr = $_SERVER["REDIRECT_SCRIPT_URI"];
    } else {
    $adr = $_SERVER["PHP_SELF"];
    }
     
    $pos = strpos($adr, "://");
    $rep = substr_count($adr,"/");
    if ($pos == 4) {
    	$piece = explode("/", $adr, 4);
    	if ($rep == 3) {
    		$url_jpg = "admin/images/code.jpg";
    		$url_code1 = "admin/images/code1.jpg";
    		$url = "../".$piece[3];
    		$url_erg = "admin/enregistrer.php";
    		$url_img = "admin/images/code.jpg?".rand(0, 61);
    		$url_base = "admin/doc.php";
    		$lien_image = "admin/images/";
    	}
    	 else {
    	 	$ret = "";
    		for ($i=0; $i < $rep-3; $i++) { $ret .= "../"; }
    		$url_jpg = $ret."admin/images/code.jpg";
    		$url_code1 = $ret."admin/images/code1.jpg";
    		$url = $ret.$piece[3];
    		$url_erg = $ret."admin/enregistrer.php";
    		$url_img = $ret."admin/images/code.jpg?".rand(0, 61);
    		$url_base = $ret."admin/doc.php";
    		$lien_image = $ret."admin/images/";				 
    	 }
     } else {
    	 $piece = explode("/", $adr, 3);
    	if ($rep == 2) {
    		$url_jpg = "admin/images/code.jpg";
    		$url_code1 = "admin/images/code1.jpg";
    		$url = "../".$piece[2];
    		$url_erg = "admin/enregistrer.php";
    		$url_img = "admin/images/code.jpg?".rand(0, 61);
    		$url_base = "admin/doc.php";
    		$lien_image = "admin/images/";
    	}
    	 else { 
    	 	$ret = "";
    		for ($i=0; $i < $rep-2; $i++) { $ret .= "../"; }
    		$url_jpg = $ret."admin/images/code.jpg";
    		$url_code1 = $ret."admin/images/code1.jpg";
    		$url = $ret.$piece[2];
    		$url_erg = $ret."admin/enregistrer.php";
    		$url_img = $ret."admin/images/code.jpg?".rand(0, 61);	
    		$url_base = $ret."admin/doc.php";
    		$lien_image = $ret."admin/images/";	
    	}
     }
     
    $nom_image = $url_code1;
    $texte = $password;
    $image = imagecreatefromjpeg($nom_image);
    $bg = imagecolorallocate($image, 255, 255, 255);
    $textcolor = imagecolorallocate($image, 255, 0, 0);
    imagestring($image, 5, 23, 4, $texte, $textcolor);
    imagejpeg($image, $url_jpg);
    // ---------------------------------------------------------------------
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
     
    <script language="javascript1.2">
    function verif() {
    	// Initialisation des données
    	valide = true;
    	id = document.commentaires.id_article.value;
    	nom = document.commentaires.nom.value;
    	titre = document.commentaires.titre.value;
    	com = document.commentaires.commentaire.value;
    	code = document.commentaires.code.value;
     
    	// Vérification des données
    	if (id == "") { valide = false; }
    	if (nom == "") { valide = false; }
    	if (titre == "") { valide = false; }
    	if (com == "") { valide = false; }
    	if (code == "") { valide = false; }
    	if (code != "<?php echo $password; ?>") { valide = false; }
     
    	// Messages d'erreur
    	erreur = "Attention !"; total_err = 0;
    	if (nom == "") { erreur = erreur + " Le NOM"; total_err++; }
     
    	if (titre == "") {
    		total_err++;
    		if (erreur == "Attention !") { erreur = erreur + " Le TITRE"; } else { erreur = erreur + ", le TITRE"; }
    	}
     
    	if (com == "") {
    		total_err++;
    		if (erreur == "Attention !") { erreur = erreur + " Le COMMENTAIRE"; } else { erreur = erreur + ", le COMMENTAIRE"; }
    	}
     
    	if (code == "") {
    		total_err++;
    		if (erreur == "Attention !") { erreur = erreur + " Le CODE est vide."; } else { erreur = erreur + " et le CODE sont vides."; } 
    	}
    	if (code != "") {
    		if (code == "<?php echo $password; ?>") {
    			if (total_err == 1) { erreur = erreur + " est vide."; }
    			if (total_err > 1) { erreur = erreur + " sont vides."; }
    		} else { 
    			if (total_err == 0) { erreur = erreur + " Le CODE n'est pas bon."; }
    			if (total_err == 1) { erreur = erreur + " est vide, et le CODE n'est pas bon."; }
    			if (total_err > 1) { erreur = erreur + " sont vides, et le CODE n'est pas bon."; }		
    		}
    	}
     
     
    	// Lecture des erreurs
    	if (valide == false) { alert(erreur); }
     
     
    	// Validation du formulaire
    	if (valide == true) {
    		document.commentaires.submit();
    	}
    }
    </script>
    </head>
     
    <body>
     
    <h1>Titre de l'article.</h1>
     
    <br />
    <br />
     
    <img src="<?php echo $lien_image; ?>illustration de l'article.jpg" alt="" width="" height="" />
     
    <br />
    <br />
     
    ARTICLE
     
    <br />
    <br />
    Commentez cet article :
    <br />
    <br />
     
    <form id="commentaires" name="commentaires" method="post" action="<?php echo $url_erg; ?>">
     
    <input name="id_article" type="hidden" id="id_article" value="<?php echo $num_article; ?>" />
     
    <input name="url" type="hidden" value="<?php echo $url; ?>" />
     
    Nom :
    <br />
    <input name="nom" type="text" id="nom" value="" size="50" maxlength="100" />
    <br />  
    Titre :
    <br />
    <input name="titre" type="text" id="titre" size="50" maxlength="100" />
    <br />
    Commentaire :
    <br />
    <textarea name="commentaire" cols="60" rows="6" id="commentaire"></textarea>
    <br />
    <br />
     
    <table width="300" border="0">
        <tr>
        <td colspan="2"><div>Veuillez entrer le code ci dessous :</div></td>
        </tr>
     
       <tr>
       <td width="180"><div align="center"><img name="img_code" src="admin/images/code.jpg" alt="" width="100" height="25"/>
       </td>
     
       <td width="120">
       <div align="center">
       <input name="code" type="text" id="code" size="9" maxlength="6" />
       </div>
       </td>
     
       </tr>
      </table>
     
    <br />
     
    <input name="button" type="button" id="button" value="Envoyer" onClick="verif();" />
     
    </form>
     
    <!-- Reload de l'image de code --> 
    <script language="javascript1.2">document.img_code.src="<?php echo $url_img; ?>"</script>
     
    <?php
    /* info de la base */
    include($url_base);
    $nom_table = "commentaire";
    $id_article = $num_article;
    $total_enr = 1;
     
    $connect = mysql_connect($host, $login, $pass)
        or die("Impossible de se connecter : " . mysql_error());
     
    $action = "SELECT * FROM `commentaire` WHERE `id_article` = ".$id_article;
     
    $result = mysql_db_query($nombase, $action);
     
    while ($row = mysql_fetch_object($result)) {
    	$num[$total_enr] = $row->num;
    	$nom[$total_enr] = $row->nom;
    	$titre[$total_enr] = $row->titre;
    	$commentaire[$total_enr] = $row->commentaire;
    	$total_enr++;
    } 
     
    mysql_close($connect);
     
    if ($total_enr > 1) {
    echo "<table width='280'>
      <tr>
        <td><p>Les commentaires :<br /></p>";
    }
     
    for ($i=1; $i<$total_enr; $i++) {
    	echo "<table width='280' border='0'>
    			<tr>
    			  <td width='280'>Commentaire n° ".$i."
    			  <br />
    			  Nom :".$nom[$i]."
    			  <br />
    			  Titre :".$titre[$i]."
    			  <br />
    			  Commentaire :
    			  <br />
    				<table width='280'>
    				<tr>
    				<td width='280'>".$commentaire[$i]."</td>
    				</tr>
    				</table>
    			  </td>
    			</tr>
    		  </table>
    		<br />";
    }
     
    if ($total_enr > 1) {
    echo "</td></tr></table>";
    }
    ?>     
     
    </body>
    </html>


    Le code du fichier enregistrer.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    <?php
    /* valeur du formulaire */
    $id_article=$_POST['id_article'];
    $url=$_POST['url'];
    $nom=$_POST['nom'];
    $titre=$_POST['titre'];
    $commentaire=$_POST['commentaire'];
     
    /* correction des apostrophes */
    function modif($texte) {
    	$table[0][0] = "'"; $table[0][1] = "&acute;";
     
    	for($c=0; $c < 1; $c++) { 
    		$texte = str_replace($table[$c][0], $table[$c][1], $texte);	
    	}
     
    	return $texte;
    }
     
    $nom = modif($nom);
    $titre = modif($titre);
    $commentaire = modif($commentaire);
     
    /* info de la base */
    include("doc.php");
     
    $connect = mysql_connect($host, $login, $pass)
        or die("Impossible de se connecter : " . mysql_error());
     
    $action = "INSERT INTO `commentaire` (`num`, `id_article`, `nom`, `titre`, `commentaire`)  VALUES ('', ".$id_article.", '".$nom."', '".$titre."', '".$commentaire."');";
     
    $ok = mysql_db_query($nombase, $action); 
     
    mysql_close($connect);
     
    echo "<script language='javascript1.2'>location.href('".$url."');</script>";
    ?>
    code1 est l'image blanche sur laquelle un captcha aléatoire va être créé
    code est le captcha créé
    doc.php contient les infos de connexion à ma base de données

    Dans ma base de données PHPMySQL, j'ai créé la table 'commentaire' avec 4 champs: 'id_article', 'nom', 'titre' et 'commentaire'

    Voilà sa structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    -- Structure de la table `commentaire`
    --
     
    CREATE TABLE IF NOT EXISTS `commentaire` (
      `num` int(11) NOT NULL auto_increment,
      `id_article` int(11) NOT NULL default '0',
      `nom` varchar(100) NOT NULL default '',
      `titre` varchar(100) NOT NULL default '',
      `commentaire` text NOT NULL,
      PRIMARY KEY  (`num`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=128 ;


    Je bosse pour un client et je suis dans une mouise incroyable
    Si vous pouvez m'aider, je vous en serai extrêmement reconaissant

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Comment enregistrer.php est protégé ?
    Quel est le principe de ton captcha ? Il y a bcp de code et du Javascript, ce n'est pas clair pour moi.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Par défaut
    Si certaines personnes veulent vraiment t'ennuyer, tu arriveras difficilement à les arreter, surtout sans identification.

    Tu peux envoyer un lien vers une de ces pages spammées ?

    Pour regarder la façon dont le spam est créé ? Si tu vois des expressions récurrentes, tu peux interdire certains mots/expressions.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Comment enregistrer.php est protégé ?
    Quel est le principe de ton captcha ? Il y a bcp de code et du Javascript, ce n'est pas clair pour moi.
    Il n'est pas protégé. Je ne sais comment le proteger. Il est dans mon répertoire /admin/images
    Le javascript, ce sont les messages qui apparaissent si l'utilisateur oublie d'entre son nom/titre/commentaire/code, ou si le code est faux


    Citation Envoyé par Evilam Voir le message
    Si certaines personnes veulent vraiment t'ennuyer, tu arriveras difficilement à les arreter, surtout sans identification.

    Tu peux envoyer un lien vers une de ces pages spammées ?

    Pour regarder la façon dont le spam est créé ? Si tu vois des expressions récurrentes, tu peux interdire certains mots/expressions.
    C'est le même qui spamme depuis hier. Il envoie en bloc une cinquantaine de messages quasi en même temps.
    Tu veux dire que je devrais demander à mes visiteurs de s'identifier avant de pouvoir poster un commentaire?

    Envoyer un lien? C'est à dire? Leur écrire?

    Hélas, j'ai créé un script qui ne m'intedit pas certaines expressions/mots

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par nicolas.desb Voir le message
    Il n'est pas protégé. Je ne sais comment le proteger.
    Pourtant tu disais :
    Pour éviter les spammeurs, j'ai mis un système de captcha (le code change à chaque fois)
    Pourquoi n'utilises-tu pas ton captcha ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Pourtant tu disais :

    Pourquoi n'utilises-tu pas ton captcha ?
    En fait, ma page article contient un formulaire avec un captcha. L'internaute remplit le formulaire: nom/titre/commentaire, puis recopie le captcha, et puis il clique sur 'envoyer le commentaire'

    Là, ça envoie sur ma page enregistrer.php, qui se connecte à la base de données, et qui renvoie le commentaire de l'internaute sur ma page article

    Le tout quasiment instantanément

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    A quel moment est vérifié le captcha ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    OK, tu vérifies le captcha avec le Javascript suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	if (code != "<?php echo $password; ?>") { valide = false; }
    Autant dire que ça ne sert à rien. La plupart du temps les spams sont effectués par des robots qui n'ont que faire du JS. Et si tu as affaire à un être humain il lui suffirait de désactiver le JS de son navigateur ou de faire des requêtes POST directement sur enregistrer.php.

    Il faut tout revoir.

  9. #9
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Un captcha simple à mettre en place que j'ai déjà utilisé avec succès :

    captcha.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
        session_start( ) ;
     
        $image = imagecreatetruecolor(66, 30) ;
     
        $tokens = 'ABCDEFGHJKLMNPQRSTWXYZabcdefghjkmnopqrstwxyz123456789' ;
        $pass = substr(str_shuffle($tokens), 0, 5) ;
     
        $_SESSION['captcha'] = $pass ;
     
        imagestring($image, 5, 11, 7, $pass, 0xFFFF00) ;
     
        header('Content-Type: image/png') ;
        imagepng($image) ;
    ?>
    Exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
        session_start( ) ;    
     
        if ( isset($_POST['captcha']) ) { // Si le formlaire a été soumis...
            if ( isset($_SESSION['captcha']) ) {
                if ( $_POST['captcha'] == $_SESSION['captcha'] ) {
                    echo 'Traitement du formulaire...' ;
                } else {
                    echo 'Divergence,  formulaire à ne pas traiter !' ;             
                }
            } else {
                echo 'Pb avec captcha.php ou utilisateur n\'accepte pas les cookies' ;
            }
        }
    ?>
    <html>...
    <form method="post">
        <p><input type="text" name="captcha" size="6">
        <img src="captcha.php"></p>
        <p><input type="submit"></p>
    </form>

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Un captcha simple à mettre en place que j'ai déjà utilisé avec succès :
    Tout d'abord merci énormément Seb pour ces codes
    Je les ai testés, mais hélas ça ne fonctionne pas comme je voudrais
    Je suis obligé de laisser le Javascript pour obliger les visiteurs à laisser nom/titre/commentaire

    Le problème, c'est que je me trouve avec 2 boutons 'envoyer'. Je suis bien conscient qu'il faut en virer un et améliorer tout ça, mais ma méconaissance du PHP fait que je peux aller plus loin

    Pour que les commentaires apparaissent sur ma page, le bouton 'envoyer' doit à la fois:
    -permettre la vérification du Captcha
    -envoyer le formulaire sur ma page 'enregistrer.php', qui se connecte à ma BDD et qui renvoie le commentaire de l'internaute sur ma page d'article

    Voilà ce que j'ai fait
    J'ai ajouté ton fichier 'ptitcaptcha.php'

    Voilà ma page 'articles'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
     
     
    <?php
    require("ptitcaptcha.php");
    header ("Content-type: image/jpeg"); 
    // Gestion du numéro d'article sur la page
    	$num_article = 5;
    // ---------------------------------------
     
    // Création d'un code aléatoire ----------------------------------------
        $password = "";
        $basket = "abcdefghijklmnopqrstuvwxyz";
        $basket .= "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     
    	$i = 0;
    	while ($i < 6) {
    		$nb = rand(0, 61);
    		$car = substr($basket, $nb, 1);
    		$password .= $car;
    		$i++;
    	} 
    // ---------------------------------------------------------------------
     
    // Création de l'image de code -----------------------------------------
    if (isset($_SERVER["REDIRECT_SCRIPT_URI"])) {
    $adr = $_SERVER["REDIRECT_SCRIPT_URI"];
    } else {
    $adr = $_SERVER["PHP_SELF"];
    }
     
    $pos = strpos($adr, "://");
    $rep = substr_count($adr,"/");
    if ($pos == 4) {
    	$piece = explode("/", $adr, 4);
    	if ($rep == 3) {
    		$url_jpg = "admin/images/code.jpg";
    		$url_code1 = "admin/images/code1.jpg";
    		$url = "../".$piece[3];
    		$url_erg = "admin/enregistrer.php";
    		$url_img = "admin/images/code.jpg?".rand(0, 61);
    		$url_base = "admin/doc.php";
    		$lien_image = "admin/images/";
    	}
    	 else {
    	 	$ret = "";
    		for ($i=0; $i < $rep-3; $i++) { $ret .= "../"; }
    		$url_jpg = $ret."admin/images/code.jpg";
    		$url_code1 = $ret."admin/images/code1.jpg";
    		$url = $ret.$piece[3];
    		$url_erg = $ret."admin/enregistrer.php";
    		$url_img = $ret."admin/images/code.jpg?".rand(0, 61);
    		$url_base = $ret."admin/doc.php";
    		$lien_image = $ret."admin/images/";				 
    	 }
     } else {
    	 $piece = explode("/", $adr, 3);
    	if ($rep == 2) {
    		$url_jpg = "admin/images/code.jpg";
    		$url_code1 = "admin/images/code1.jpg";
    		$url = "../".$piece[2];
    		$url_erg = "admin/enregistrer.php";
    		$url_img = "admin/images/code.jpg?".rand(0, 61);
    		$url_base = "admin/doc.php";
    		$lien_image = "admin/images/";
    	}
    	 else { 
    	 	$ret = "";
    		for ($i=0; $i < $rep-2; $i++) { $ret .= "../"; }
    		$url_jpg = $ret."admin/images/code.jpg";
    		$url_code1 = $ret."admin/images/code1.jpg";
    		$url = $ret.$piece[2];
    		$url_erg = $ret."admin/enregistrer.php";
    		$url_img = $ret."admin/images/code.jpg?".rand(0, 61);	
    		$url_base = $ret."admin/doc.php";
    		$lien_image = $ret."admin/images/";	
    	}
     }
     
    $nom_image = $url_code1;
    $texte = $password;
    $image = imagecreatefromjpeg($nom_image);
    $bg = imagecolorallocate($image, 255, 255, 255);
    $textcolor = imagecolorallocate($image, 255, 0, 0);
    imagestring($image, 5, 23, 4, $texte, $textcolor);
    imagejpeg($image, $url_jpg);
    // ---------------------------------------------------------------------
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
     
    <script language="javascript1.2">
    function verif() {
    	// Initialisation des données
    	valide = true;
    	id = document.commentaires.id_article.value;
    	nom = document.commentaires.nom.value;
    	titre = document.commentaires.titre.value;
    	com = document.commentaires.commentaire.value;
    	code = document.commentaires.code.value;
     
    	// Vérification des données
    	if (id == "") { valide = false; }
    	if (nom == "") { valide = false; }
    	if (titre == "") { valide = false; }
    	if (com == "") { valide = false; }
    	if (code == "") { valide = false; }
    	if (code != "<?php echo $password; ?>") { valide = false; }
     
    	// Messages d'erreur
    	erreur = "Attention !"; total_err = 0;
    	if (nom == "") { erreur = erreur + " Le NOM"; total_err++; }
     
    	if (titre == "") {
    		total_err++;
    		if (erreur == "Attention !") { erreur = erreur + " Le TITRE"; } else { erreur = erreur + ", le TITRE"; }
    	}
     
    	if (com == "") {
    		total_err++;
    		if (erreur == "Attention !") { erreur = erreur + " Le COMMENTAIRE"; } else { erreur = erreur + ", le COMMENTAIRE"; }
    	}
     
    	if (code == "") {
    		total_err++;
    		if (erreur == "Attention !") { erreur = erreur + " Le CODE est vide."; } else { erreur = erreur + " et le CODE sont vides."; } 
    	}
    	if (code != "") {
    		if (code == "<?php echo $password; ?>") {
    			if (total_err == 1) { erreur = erreur + " est vide."; }
    			if (total_err > 1) { erreur = erreur + " sont vides."; }
    		} else { 
    			if (total_err == 0) { erreur = erreur + " Le CODE n'est pas bon."; }
    			if (total_err == 1) { erreur = erreur + " est vide, et le CODE n'est pas bon."; }
    			if (total_err > 1) { erreur = erreur + " sont vides, et le CODE n'est pas bon."; }		
    		}
    	}
     
     
    	// Lecture des erreurs
    	if (valide == false) { alert(erreur); }
     
     
    	// Validation du formulaire
    	if (valide == true) {
    		document.commentaires.submit();
    	}
    }
    </script>
    </head>
     
    <body>
     
    <h1>Titre de l'article.</h1>
     
    <br />
    <br />
     
    <img src="<?php echo $lien_image; ?>illustration de l'article.jpg" alt="" width="" height="" />
     
    <br />
    <br />
     
    ARTICLE
     
    <br />
    <br />
    Commentez cet article :
    <br />
    <br />
     
    <form id="commentaires" name="commentaires" method="post" action="<?php echo $url_erg; ?>">
     
    <input name="id_article" type="hidden" id="id_article" value="<?php echo $num_article; ?>" />
     
    <input name="url" type="hidden" value="<?php echo $url; ?>" />
     
    Nom :
    <br />
    <input name="nom" type="text" id="nom" value="" size="50" maxlength="100" />
    <br />  
    Titre :
    <br />
    <input name="titre" type="text" id="titre" size="50" maxlength="100" />
    <br />
    Commentaire :
    <br />
    <textarea name="commentaire" cols="60" rows="6" id="commentaire"></textarea>
    <br />
    <br />
     
    <form action="test.php" method="post">
    <?=PtitCaptchaHelper::generateImgTags("./")?>
    <?=PtitCaptchaHelper::generateHiddenTags()?>
    <?=PtitCaptchaHelper::generateInputTags()?>
    <input type="submit" />
    </form>
     
    <br />
     
    <input name="button" type="button" id="button" value="Envoyer" onClick="verif();" />
     
    </form>
     
    <!-- Reload de l'image de code --> 
    <script language="javascript1.2">document.img_code.src="<?php echo $url_img; ?>"</script>
     
    <?php
    /* info de la base */
    include($url_base);
    $nom_table = "commentaire";
    $id_article = $num_article;
    $total_enr = 1;
     
    $connect = mysql_connect($host, $login, $pass)
        or die("Impossible de se connecter : " . mysql_error());
     
    $action = "SELECT * FROM `commentaire` WHERE `id_article` = ".$id_article;
     
    $result = mysql_db_query($nombase, $action);
     
    while ($row = mysql_fetch_object($result)) {
    	$num[$total_enr] = $row->num;
    	$nom[$total_enr] = $row->nom;
    	$titre[$total_enr] = $row->titre;
    	$commentaire[$total_enr] = $row->commentaire;
    	$total_enr++;
    } 
     
    mysql_close($connect);
     
    if ($total_enr > 1) {
    echo "<table width='280'>
      <tr>
        <td><p>Les commentaires :<br /></p>";
    }
     
    for ($i=1; $i<$total_enr; $i++) {
    	echo "<table width='280' border='0'>
    			<tr>
    			  <td width='280'>Commentaire n° ".$i."
    			  <br />
    			  Nom :".$nom[$i]."
    			  <br />
    			  Titre :".$titre[$i]."
    			  <br />
    			  Commentaire :
    			  <br />
    				<table width='280'>
    				<tr>
    				<td width='280'>".$commentaire[$i]."</td>
    				</tr>
    				</table>
    			  </td>
    			</tr>
    		  </table>
    		<br />";
    }
     
    if ($total_enr > 1) {
    echo "</td></tr></table>";
    }
    ?>     
     
    </body>
    </html>

  11. #11
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Je suis obligé de laisser le Javascript pour obliger les visiteurs à laisser nom/titre/commentaire
    On n'est jamais obligé d'utiliser du JavaScript. La validation d'un formulaire, et d'autant plus d'un captcha, côté-client càd en JS, ne saurait être fiable.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut
    Citation Envoyé par Séb. Voir le message
    On n'est jamais obligé d'utiliser du JavaScript. La validation d'un formulaire, et d'autant plus d'un captcha, côté-client càd en JS, ne saurait être fiable.
    Comment dois-je faire alors ?

    Tu n'aurais pas un petit script tout fait?

  13. #13
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par nicolas.desb Voir le message
    Comment dois-je faire alors ?
    Je t'ai donné un squelette précédemment.

    Tu n'aurais pas un petit script tout fait?
    Ben non, trop spécifique.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Je t'ai donné un squelette précédemment.
    J'ai essayé de l'appliquer, mais je m'en sors pas: je me retrouve avec 1 formulaire (celui du captcha) imbriqué dans mon formulaire de commentaires....

    Sinon, je suis sur le Chat, dans le salon 'développement web'

Discussions similaires

  1. script de commentaires
    Par QQn91 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 08/07/2015, 10h11
  2. Script de commentaire adapté
    Par Matt67520 dans le forum Langage
    Réponses: 1
    Dernier message: 13/04/2013, 23h21
  3. Commentaire et évaluation d'un script.
    Par nasbe26 dans le forum VBScript
    Réponses: 0
    Dernier message: 22/09/2007, 14h09
  4. commentaire script virus
    Par alice100 dans le forum Linux
    Réponses: 9
    Dernier message: 11/06/2007, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo