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

Langage PHP Discussion :

mot interdit et message d'erreur


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut mot interdit et message d'erreur
    Bonjour,

    je souhaite intrerdire un mot interdit en particulier dans un champ de saisie de mon formulaire de soumission de site.

    Donc j'ai trouvé une solution mais le probleme et que je voudrais bloquer l'envoi si un mot interdit est detecté, car sinon sa me remplace par *** mais le site et quand meme envoyé .

    Voici mes deux variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $interdit=array('#\bporno\b#i');
    $remplace="***";
    et ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $address=preg_replace($interdit, $remplace, $address);

    Que j'ai placé dans ma page ci dessous.


    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
    <?php
     
    require_once('header.inc.php');
     
    $bookmarkservice =& ServiceFactory::getServiceInstance('BookmarkService');
    $templateservice =& ServiceFactory::getServiceInstance('TemplateService');
    $userservice =& ServiceFactory::getServiceInstance('UserService');
    $cacheservice =& ServiceFactory::getServiceInstance('CacheService');
     
    $tplVars = array();
    $interdit=array('#\bporno\b#i');
    $remplace="***";
     
    if (isset($_GET['action']) && ($_GET['action'] == "add") && !$userservice->isLoggedOn()) {
        $loginqry = str_replace("'", '%27', stripslashes($_SERVER['QUERY_STRING']));
        header('Location: '. createURL('login', '?'. $loginqry));
        exit();
    }
     
    @list($url, $user, $cat) = isset($_SERVER['PATH_INFO']) ? explode('/', $_SERVER['PATH_INFO']) : NULL;
     
    $loggedon = false;
    if ($userservice->isLoggedOn()) {
        $loggedon = true;
        $currentUser = $userservice->getCurrentUser();
        $currentUserID = $userservice->getCurrentUserId();
        $currentUsername = $currentUser[$userservice->getFieldName('username')];
    }
     
    $endcache = false;
    if ($usecache) {
        // Generate hash for caching on
        $hash = md5($_SERVER['REQUEST_URI'] . $user);
     
        // Don't cache if its users' own bookmarks
        if ($loggedon) {
            if ($currentUsername != $user) {
                // Cache for 5 minutes
                $cacheservice->Start($hash);
                $endcache = true;
            }
        } else {
            // Cache for 30 minutes
            $cacheservice->Start($hash, 1800);
            $endcache = true;
        }
    }
     
    $pagetitle = $rssCat = $catTitle = '';
    if ($user) {
        if (is_int($user)) {
            $userid = intval($user);
        } else {
            if (!($userinfo = $userservice->getUserByUsername($user))) {
                $tplVars['error'] = sprintf(T_('User with username %s was not found'), $user);
                $templateservice->loadTemplate('error.404.tpl', $tplVars);
                exit();
            } else {
                $userid =& $userinfo['uId'];
            }
        }
        $pagetitle .= ': '. $user;
    }
    if ($cat) {
        $catTitle = ': '. str_replace('+', ' + ', $cat);
        $pagetitle .= $catTitle;
    }
    $pagetitle = substr($pagetitle, 2);
     
    // Header variables
    $tplVars['loadjs'] = true;
     
    // ADD A BOOKMARK
    $saved = false;
    $templatename = 'bookmarks.tpl';
    if ($loggedon && isset($_POST['submitted'])) {
        if (!$_POST['title'] || !$_POST['address']) {
            $tplVars['error'] = T_('Your bookmark must have a title and an address');
            $templatename = 'editbookmark.tpl';
        } else {
            $address = trim($_POST['address']);
            // If the bookmark exists already, edit the original
            if ($bookmarkservice->bookmarkExists($address, $currentUserID)) {
                $bookmark =& $bookmarkservice->getBookmarkByAddress($address);
                header('Location: '. createURL('edit', $bookmark['bId']));
                exit();
            // If it's new, save it
            } else {
    			$address=preg_replace($interdit, $remplace, $address);
                $title = trim($_POST['title']);
                $description = trim($_POST['description']);
                $status = intval($_POST['status']);
                $categories = trim($_POST['tags']);
                $saved = true;
                if ($bookmarkservice->addBookmark($address, $title, $description, $status, $categories)) {
                    if (isset($_POST['popup'])) {
                        $tplVars['msg'] = '<script type="text/javascript">window.close();</script>';
                    } else {
                        $tplVars['msg'] = T_('Bookmark saved');
                        // Redirection option
                        if ($GLOBALS['useredir']) {
                            $address = $GLOBALS['url_redir'] . $address;
                        }
                        header('Location: http://xxxxxxxxxxxxx/');
                    }
                } else {
                    $tplVars['error'] = T_('There was an error saving your bookmark. Please try again or contact the administrator.');
                    $templatename = 'editbookmark.tpl';
                    $saved = false;
                }
            }
        }
    }
     
    if (isset($_GET['action']) && ($_GET['action'] == "add")) {
        // If the bookmark exists already, edit the original
        if ($bookmarkservice->bookmarkExists(stripslashes($_GET['address']), $currentUserID)) {
            $bookmark =& $bookmarkservice->getBookmarkByAddress(stripslashes($_GET['address']));
            $popup = (isset($_GET['popup'])) ? '?popup=1' : '';
            header('Location: '. createURL('edit', $bookmark['bId'] . $popup));
            exit();
        }
        $templatename = 'editbookmark.tpl';
    }
     
    if ($templatename == 'editbookmark.tpl') {
        if ($loggedon) {
            $tplVars['formaction']  = createURL('bookmarks', $currentUsername);
            if (isset($_POST['submitted'])) {
                $tplVars['row'] = array(
                    'bTitle' => stripslashes($_POST['title']),
                    'bAddress' => stripslashes($_POST['address']),
                    'bDescription' => stripslashes($_POST['description']),
                    'tags' => ($_POST['tags'] ? explode(',', stripslashes($_POST['tags'])) : array())
                );
                $tplVars['tags'] = $_POST['tags'];
            } else {
                $tplVars['row'] = array(
                    'bTitle' => stripslashes($_GET['title']),
                    'bAddress' => stripslashes($_GET['address']),
                    'bDescription' => stripslashes($_GET['description']),
                    'tags' => ($_GET['tags'] ? explode(',', stripslashes($_GET['tags'])) : array())
                );
            }
            $title = T_('Add a Bookmark');
            $tplVars['pagetitle'] = $title;
            $tplVars['subtitle'] = $title;
            $tplVars['btnsubmit'] = T_('Add Bookmark');
            $tplVars['popup'] = (isset($_GET['popup'])) ? $_GET['popup'] : null;
        } else {
            $tplVars['error'] = T_('You must be logged in before you can add bookmarks.');
        }
    } else if ($user && !isset($_GET['popup'])) {
     
        $tplVars['sidebar_blocks'] = array('profile', 'watchstatus');
     
        if (!$cat) {
            $cat = NULL;
            $tplVars['currenttag'] = NULL; 
    	$tplVars['sidebar_blocks'][] = 'linked'; //test
        } else {
            $rssCat = '/'. filter($cat, 'url');
            $tplVars['currenttag'] = $cat;
            $tplVars['sidebar_blocks'][] = 'tagactions';
    	$tplVars['sidebar_blocks'][] = 'linked';
            $tplVars['sidebar_blocks'][] = 'related';
        }
        $tplVars['popCount'] = 30;
        $tplVars['sidebar_blocks'][] = 'popular';
     
        $tplVars['userid'] = $userid;
        $tplVars['userinfo'] =& $userinfo;
        $tplVars['user'] = $user;
        $tplVars['range'] = 'user';
     
        // Pagination
        $perpage = getPerPageCount();
        if (isset($_GET['page']) && intval($_GET['page']) > 1) {
            $page = $_GET['page'];
            $start = ($page - 1) * $perpage;
        } else {
            $page = 0;
            $start = 0;
        }
     
        // Set template vars
        $tplVars['rsschannels'] = array(
            array(filter($sitename .': '. $pagetitle), createURL('rss', filter($user, 'url') . $rssCat))
        );
     
        $tplVars['page'] = $page;
        $tplVars['start'] = $start;
        $tplVars['bookmarkCount'] = $start + 1;
     
        $bookmarks =& $bookmarkservice->getBookmarks($start, $perpage, $userid, $cat, $terms, getSortOrder());
        $tplVars['total'] = $bookmarks['total'];
        $tplVars['bookmarks'] =& $bookmarks['bookmarks'];
        $tplVars['cat_url'] = createURL('bookmarks', '%s/%s');
        $tplVars['nav_url'] = createURL('bookmarks', '%s/%s%s');
        if ($user == $currentUsername) {
            $title = T_('My Bookmarks') . filter($catTitle);
        } else {
            $title = filter($pagetitle);
        }
        $tplVars['pagetitle'] = $title;
        $tplVars['subtitle'] = $title;
    }
     
    $tplVars['summarizeLinkedTags'] = true;
     
    $templateservice->loadTemplate($templatename, $tplVars);
     
    if ($usecache && $endcache) {
        // Cache output if existing copy has expired
        $cacheservice->End($hash);
    }
    ?>

    J'ai trouvé ceci pour bloqué mais sa ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			if( $address == '' )
    			{
    				// On affiche une erreur
    				echo 'Veuillez saisir un mot valide<br /><a href="javascript:history.back()">Retour</a>';
     
    				// On arrête l'exécution du script
    				exit;
    			}
    Si vous savez comment faire pouvez vous me dire à quelle endroit le placer

    Merci d'avance

  2. #2
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    tu peux juste faire une petite vérification javascript lorsque la personne cliquer sur valider comme ça, ça évite de faire un aller-retour entre les pages parce que la vérification php ne se fera que sur la page suivante ...

    mais si tu veux placer ce code dans la page, déjà, change le :

    if($adresse=='***') et pas '' vu que tu as remplacé le champ

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Merci

    Et comment on fait la vérification php car je suis debutant .

    Ou je peus trouver le code php à mettre dans la page formulaire


    pour le bout de code j'ai mis *** mais sa ne marche pas . ou je le place pas au bon endroit

  4. #4
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    hum ... c'est ce que tu as noté plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			if( $address == '' )
    			{
    				// On affiche une erreur
    				echo 'Veuillez saisir un mot valide<br /><a href="javascript:history.back()">Retour</a>';
     
    				// On arrête l'exécution du script
    				exit;
    			}
    c'est du php ça :p mais en voyant le code que tu as collé plus haut, j'imaginais bien que ça n'était pas de toi (ce n'est pas méchant mais j'avoue que mm pour moi, c'est chaud :p)

    bref, le code au dessus, modifie le juste un peu en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			if( $address == '***' )
    et colle le juste sous $address=preg_replace...

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    non sa ne marche pas il me remplace bien le mot dans l'url par *** mais la soumission se fait quand meme.

    sa fais que dans l'annuaire il y a l'url mais qui ne marche pas c'est déja un début

    J'ai essayer de la placer à pleins d'endroit et c'est pareil.

    Il y a pas d'autre moyen de bloquer la soumission s'il détecte le mot ??


    MERCI

  6. #6
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    en fait comme je t'ai dis, le plus simple c'est une vérification côté client avec du javascript au moment où la personne clique sur le bouton VALIDER.

    en gros, une petite popup s'ouvre en disant ERREUR ! vous n'avez pas le droit d'écrire ce mot et là, ça ne charge pas le formulaire, il doit saisir autre chose puis revalider et c'est bon, c'est mieux que cette vérification après envoie du formulaire

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    Ok Merci

    Je vais voir pour trouver ceci

  8. #8
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    un script simple :

    (colle le < et script, je n'ai pas pu le faire pour des raisons de sécurité du forum)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    < script language="javascript">
    function verif() {
       if(document.nom_du_formulaire.nom_du_champ.value == "porno") { 
          document.nom_du_formulaire.nom_du_champ.value == "";
          document.nom_du_formulaire.nom_du_champ.focus();
          alert("Ce mot est interdit, merci de noter autre chose");
          return false;
       }
    }
    </script>
    tu le colles dans la page et tu mets le lien dans le bouton <input type="submit" onclick="return verif();">

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 252
    Points : 358
    Points
    358
    Par défaut
    Je rappelle que si c'est pour un problème de spam, faire une vérification javascript sera inutile car celui-ci est désactivé chez les robots.

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    sa ne marche toujour pas je comprend pas pouquoi.

    A quoi correspond cette ligne du javascript

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.nom_du_formulaire.nom_du_champ.value == "";

    avec ce code javascript normalement je peux enlever les variable et le bout de code que j'avais au depart ? (simple question)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    J'approche du but en utilisant le code php


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			if( $address == '' )
    			{
    				// On affiche une erreur
    				echo 'Veuillez saisir un mot valide<br /><a href="javascript:history.back()">Retour</a>';
     
    				// On arrête l'exécution du script
    				exit;
    			}
    Mais voici le message d'erreur que j'ai lorsque je soumet un mot interdit.

    Warning: Wrong parameter count for preg_replace() in /homepages/3/dxxxxxx/xxxx/xxxxxxxxx/bookmarks.php on line 107
    Veuillez saisir un Pseudo
    Retour

  12. #12
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Points : 434
    Points
    434
    Par défaut
    Peux-tu montrer la partie de code où tu utilises la fonction preg_replace ? Tu dois ne pas lui donner le minimum d'arguments requis.

  13. #13
    Membre émérite Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Points : 2 276
    Points
    2 276
    Par défaut
    Il me semble malvenu d'utiliser un preg_remplace(), car effectivement si le mot est correct comment le remplacer ?

    Il me semble t'avoir proposer une solution à ton problème de mots à éviter, pourquoi ne pas l'utiliser ?
    Tu a juste à le placer avant ton preg_remplace() (a supprimer lui).

    Ensuite passer par javascript oui et non, vu qu'il ni a pas qu'un mot à vérifier ca me semble pas utile, parcontre tu php qui lit un fichier texte avec tout les mots me semble plus facilement maintenable (on ajoute au txt et hop ca marche ) à éditer souvent le JS on risque plus de mauvais copier/coller.

    Je te redonne le code:
    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
     
    <?php
    //Tableau de mots interdit
    $word[0] = 'porno';
    $word[1] = 'porn';
    $word[2] = 'p0rn';
    $word[3] = 'p0rn0';
     
    //Fonction de tri
    function trimoi($malistedemot){
    	$maliste = explode('separateur',$malistedemot);//Je découpe les mots dans un tableau.
    	$mesmotsfinaux = '';
    	foreach($maliste as $value){//Pour chaque mot de ma liste.
    		if(motvalide($value)){//Si ma fonction qui verifie le mot renvoie true (donc que le mot est bon).
    			$mesmotsfinaux .= 'separateur'.$value;
    		}
    		else{//Sinon ne pas le stocker.
    		}
    	}
    	return $mesmotsfinaux;
    }
    }
    //Fonction qui valide un mot suivant le tableau $word plus haut.
    function motvalide($lemot){
    	foreach($word as $value){//Pour chaque mot de la liste des interdits.
    		if($lemot == $value){//Si le mot est interdit on sort en retournant false.
    			return false;
    		}
    		else{
    		}
    	}
    	return true;//On retourne true en fin de foreach car ca équivaut à ce que le mot est pas dans la liste.
    }
    //Utilisation de la fonction.
    $malistebonne = trimoi($monancienneliste);
    ?>
    En plus j'aimerai en apprendre un peu plus dans ce que tu veux, désire tu trié l'addresse soumise, ou bien les mots clés ?
    Car bon si c'est sur l'url ton tri ( $address ), je voie même pas l'interet de trier porno la dessus, car si je monte www.mespetitesfermieres.com le site passera peut importe le contenu réel .

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 35
    Points : 16
    Points
    16
    Par défaut
    probleme résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/08/2011, 13h29
  2. Réponses: 12
    Dernier message: 27/06/2006, 12h08
  3. Réponses: 4
    Dernier message: 04/03/2003, 02h05
  4. [CR] Message d'erreur
    Par nono1 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/09/2002, 15h54
  5. Réponses: 2
    Dernier message: 27/05/2002, 20h46

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