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 :

Filtrer une chaine de caractères


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut Filtrer une chaine de caractères
    Bonjour à vous !!!

    Voilà, je ne suis pas très bon et j'ai besoin de vos conseils. Merci de ne pas tenir compte de ma ligne 33, qui n'est pas très catholique !!! Le champs num_message(ligne
    31b) est auto incémenté.

    voici mon 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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    1	<?php
    2	// On commence par récupérer les champs
    3	if(isset($_POST['message']))      $Resultat=$_POST['message'];
    4	else      $Resultat="";
     
    5	// On enregistre l'ip du visiteur
    6	$ip_visiteur=getenv("REMOTE_ADDR");
     
    7	//On enregistre la date du message
    8	$date_message='CURRENT_DATE()';
     
    9	// On vérifie si les champs sont vides
    10	if(empty($Resultat))
    11	{
    12	include('templates/haut_de_page.php');
    13	    echo "<script language=\"javascript\">alert('Merci de remplir le champ')</script><script language=\"javascript\">history.go(-1)</script>";
    14	include('templates/bas_de_page.php');
    	}
     
    15	//On vérifie que l'on se fait pas insulter
    16	elseif ($Resultat=="merde")
    17	{
    18	echo "<script language=\"javascript\">alert('Message non correct')</script><script language=\"javascript\">history.go(-1)</script>";
    19	}
     
    20	elseif ($Resultat=="pute")
    21	{
    22	echo "<script language=\"javascript\">alert('Message non correct')</script><script language=\"javascript\">history.go(-1)</script>";
    23	}
    24	// Aucun champ n'est vide ou prohibé, on peut l'enregistrer
    25	else     
    26	{
    27       // connexion à la base
    28	$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
    29	// sélection de la base  
     
    30    mysql_select_db('football',$db)  or die('Erreur de selection '.mysql_error());
     
    31    // on écrit la requête sql
    31B	$sql = "insert into messages (num_message,date_message,texte_message,ip_message) VALUES ('','$date_message','$Resultat','$ip_visiteur')";
     
     
    32    // on insère les informations du formulaire dans la table
    33    mysql_query($sql) or die('<script language="javascript">alert(\'Le même message a déjà été écrit. Veuillez recommencer.\')</script><script language="javascript">history.go(-1)</script>');
     
    34    // on affiche le résultat pour le visiteur
    35    include('templates/haut_de_page.php');
    36	echo '<p align="center">Merci pour votre message</p>';
    37	include('templates/bas_de_page.php');
     
    38    mysql_close();  // on ferme la connexion
    39    } 
    40	?>

    Voici mes questions :
    1/ j'ai un soucis pour enegitrer la date dans ma base de donnée (ligne 7 et 8) En effet, j'aimerai enrgeistrer la date sous le format d/m/Y h/m/s.Pour cela, j'ai chosi "date time" pour ma structure de champs,
    mais le résultat retourné est tj 0000-00-00 00:00:00.
    2/ Ligne 15 à 22
    a/ Je voulais savoir comment l'on pouvait interdire d'enregistrer le message en retrouvant les mots des lignes 16,20 (et d'autres...) dans une chaine de caractère (ex : interdire le message "fils de pute" ou pas seulement "pute"
    b/ je voulais savoir si l'on pouvait regrouper tous les mots interdits dans une seul elseif et pas dans plusieurs (16 et 20). j'ai pensé à or ou //, mais ça ne marche pas


    Voilà, j'espère avoir été clair et pas trop lourd !!! Merci d'avance pour vos conseils !!!

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour et bienvenue sur le forum

    Tu as en fait deux problèmes, le premier portant sur le format de la date en base et le second sur des filtres à appliquer.

    En ce qui concerne la date :
    Une date dans une base mysql a toujours le format YYYY-DD-MM hh:mm:ss. C'est à toi de te débrouiller pour l'afficher au format que tu veux lorsque tu récupères les enregistrements.
    Comment convertir une date MySQL au format francophone ?

    En ce qui concerne le filtre, tu peux probablement utiliser soit une regex, soit une fonction comme strpos.
    Comment savoir si une chaîne est incluse dans une autre ?

    Bon courage !
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut Filtrer une chaine de caractères
    Pour la date, je vais essayé comme tu me la dis.
    Pour le reste je n'ai pas compris grand chose à ce que tu as dis : je suis qu'un petit débutant !!! Je vais étudier ça !!!

    Par contre comment je peut regrouper tous les mots interdit dans un seul elseif?

    Merci pour les liens !!!

  4. #4
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //On vérifie que l'on se fait pas insulter
     
    $insulte='merde';
     
     
    $pos1 = stripos($Resultat, $insulte);
     
     
    elseif ($insulte !=='false')
    {
    echo "<script language=\"javascript\">alert('Message non correct')</script><script language=\"javascript\">history.go(-1)</script>";
    }

    J'ai essayé avec le code que tu m'as filler, mais ça marche pas vraiment. J'aimerai y arrivé tout seul, mais j'aimerai juste des indices sur ce qui va pas !!
    Merci d'avance

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

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

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    Pour trier les mots tu peux faire un truc du genre :

    1) je crée un tableau de mot interdit
    2) je découpe le message par mot
    3) je teste chacun des mots pour savoir si il est dans la liste

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $erreur = false;
    $tab_interdit = array('mot','mot1','mot2');
    $tab_mot = explode(' ',$message);
    foreach($tab_mot as $key => $value){
      if(in_array($value,$tab_interdit){
        $erreur = true;
      }
    }
    Si erreur vaut true c'est qu'il y'as un mot interdit.

  6. #6
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Dans ce cas le code intégré dans le code de départ serai ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $erreur = false;
    $tab_interdit = array('mot','mot1','mot2');
    $tab_mot = explode(' ',$Resultat);
     
    elseif (foreach($tab_mot as $key => $value){
      if(in_array($value,$tab_interdit){
        $erreur = true;
      }
    }
    echo "<script language=\"javascript\">alert('Message non correct')</script><script language=\"javascript\">history.go(-1)</script>";
    }

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

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

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    En faite non plutot comme ceci :
    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
     
     
    $erreur = false;
    $tab_interdit = array('mot','mot1','mot2');
    $tab_mot = explode(' ',$Resultat);
     
    foreach($tab_mot as $key => $value){
      if(in_array($value,$tab_interdit){
        $erreur = true;
      }
    }
    if($erreur){
      echo "<script language=\"javascript\">alert('Message non correct')</script><script language=\"javascript\">history.go(-1)</script>";
    }
    else{
      //message correct
    }
    }
    j'ai pas testé mais ca devrai être bon.

  8. #8
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Le soucis avec ton code c'est pour l'intégrer avec le début. J'ai déjà ouvert un if pour savoir si les champs étaient vides ou non, et je souhaite maintenant vérifier que les champs ne comporte pas les mots interdits. On peut écrire ça comme ça ou pas? (à partir de "//On vérifie que l'on se fait pas insulter")
    Et j'avoue que je ne comprend pas trop ton "foreach($tab_mot as $key => $value){
    if(in_array($value,$tab_interdit){
    $erreur = true;"

    Je suis désolé, d'être aussi pénible, mais j'ai très envie de comprendre et d'y arriver !!! En tous cas merci beaucoupe pour votre patience!!

    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
     
    <?php
    // On commence par récupérer les champs
    if(isset($_POST['message']))      $Resultat=$_POST['message'];
    else      $Resultat="";
     
    // On enregistre l'ip du visiteur
    $ip_visiteur=getenv("REMOTE_ADDR");
     
    //On enregistre la date du message
    $date_message='CURRENT_DATE()';
     
    // On vérifie si les champs sont vides
    if(empty($Resultat))
       {
       include('templates/haut_de_page.php');
       echo "<script language=\"javascript\">alert('Merci de remplir le champ')   </script><script language=\"javascript\">history.go(-1)</script>";
      include('templates/bas_de_page.php');
    	}
     
    //On vérifie que l'on se fait pas insulter
    $erreur = false;
    $tab_interdit = array('mot','mot1','mot2');
    $tab_mot = explode(' ',$Resultat);
     
     
    elseif (
         foreach($tab_mot as $key => $value){
         if(in_array($value,$tab_interdit){
         $erreur = true;
      }
    }
    if($erreur){
      echo "<script language=\"javascript\">alert('Message non correct')</script><script language=\"javascript\">history.go(-1)</script>";
    }
     
    // Aucun champ n'est vide ou prohibé, on peut l'enregistrer
    else     
    {
    // connexion à la base
    $db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
    // sélection de la base  
     
    mysql_select_db('football',$db)  or die('Erreur de selection '.mysql_error());
     
    // on écrit la requête sql
    $sql = "insert into messages (num_message,date_message,texte_message,ip_message) VALUES ('','$date_message','$Resultat','$ip_visiteur')";
     
     
    // on insère les informations du formulaire dans la table
    mysql_query($sql) or die('<script language="javascript">alert(\'Le même message a déjà été écrit. Veuillez recommencer.\')</script><script language="javascript">history.go(-1)</script>');
     
    // on affiche le résultat pour le visiteur
    include('templates/haut_de_page.php');
    echo '<p align="center">Merci pour votre message</p>';
    include('templates/bas_de_page.php');
     
    mysql_close();  // on ferme la connexion
    } 
    ?>

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

Discussions similaires

  1. Comment filtrer une chaine de caractère
    Par pierrot10 dans le forum jQuery
    Réponses: 6
    Dernier message: 24/02/2012, 14h23
  2. Filtrer une chaine de caractère sur le 6ème caractère
    Par lfa44 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 12/02/2010, 18h51
  3. [AC-2000] Comment filtrer des mots dans une chaine de caractères
    Par bionet dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 21/07/2009, 18h16
  4. [RegEx] Filtrer une chaine de caractère
    Par JulienFio dans le forum Langage
    Réponses: 44
    Dernier message: 17/06/2009, 10h36
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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