Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/08/2008, 12h19   #1
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
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 :
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 !!!
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 13h13   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2008, 13h25   #3
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
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 !!!
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 09h40   #4
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
Code :
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
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 10h06   #5
Modérateur
 
Avatar de SirDarken
 
Eric Willems
Développeur Web
Inscription : février 2004
Messages : 895
Détails du profil
Informations personnelles :
Nom : Eric Willems
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : février 2004
Messages : 895
Points : 1 065
Points : 1 065
Envoyer un message via MSN à SirDarken Envoyer un message via Skype™ à SirDarken
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 :
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.
SirDarken est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 11h47   #6
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
Dans ce cas le code intégré dans le code de départ serai ???

Code :
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>";
}
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 11h53   #7
Modérateur
 
Avatar de SirDarken
 
Eric Willems
Développeur Web
Inscription : février 2004
Messages : 895
Détails du profil
Informations personnelles :
Nom : Eric Willems
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : février 2004
Messages : 895
Points : 1 065
Points : 1 065
Envoyer un message via MSN à SirDarken Envoyer un message via Skype™ à SirDarken
En faite non plutot comme ceci :
Code :
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.
SirDarken est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 13h25   #8
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
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 :
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
} 
?>
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 14h02   #9
Modérateur
 
Avatar de SirDarken
 
Eric Willems
Développeur Web
Inscription : février 2004
Messages : 895
Détails du profil
Informations personnelles :
Nom : Eric Willems
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : février 2004
Messages : 895
Points : 1 065
Points : 1 065
Envoyer un message via MSN à SirDarken Envoyer un message via Skype™ à SirDarken
Si tu a deja ouvert un if, mets le code que j'ai donné dedans, il est inutile de faire la boucle si le texte est vide.

Code :
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
 
// 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);
	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
	}
}
Je le ferai de la sorte moi.

Pour foreach() en faite ca veux dire : pour chacun des éléments du tableau $key vaut l'indice (ca sert quand tu a un indice non numéroté par exemple), $value la valeur de l'élément de l'indice en court ($key).
Ensuite je teste donc pour chaque mot du message si il existe dans le tableau de mot interdit, si il existe je mets $erreur à true, ce qui voudra dire que j'ai au moins un mot interdit.
SirDarken est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 14h59   #10
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
Merci beaucoup pour ton aide. Je vais tester le code chez moi ce soir, mais bon je pense que ça va marcher

Il me reste encore le 'CURRENT_DATE()' a voir mais je pense que je vais pouvoir y arriver tout ce seul ce week-end, même si ça me prend le week-end !!! n'empêche on a un jour de plus !!!
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 15h11   #11
Modérateur
 
Avatar de SirDarken
 
Eric Willems
Développeur Web
Inscription : février 2004
Messages : 895
Détails du profil
Informations personnelles :
Nom : Eric Willems
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : février 2004
Messages : 895
Points : 1 065
Points : 1 065
Envoyer un message via MSN à SirDarken Envoyer un message via Skype™ à SirDarken
Ah j'oublié pour la date moi j'utilise ceci :

Code :
1
2
 
$date= date("d-m-Y");
ca me donne 14-08-2008 comme valeur je pense donc qu'un :
Code :
1
2
 
$date= date("Y/m/d");
Devrai te donner la date en format 2008/08/14 aprés à toi de t'adapter suivant ton désirata.
SirDarken est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2008, 11h42   #12
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
Juste une petite correction :

Code :
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
// 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");
Pour enregistrer la date dans mysql
//On enregistre la date du message
$date_message='date("Y/m/d")';
// 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);
le "=> $value" est inutile	
foreach($tab_mot as $key ){
Une parenthèse manquante à la fin
		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
	}
}
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2008, 17h02   #13
Modérateur
 
Avatar de SirDarken
 
Eric Willems
Développeur Web
Inscription : février 2004
Messages : 895
Détails du profil
Informations personnelles :
Nom : Eric Willems
Âge : 30
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : février 2004
Messages : 895
Points : 1 065
Points : 1 065
Envoyer un message via MSN à SirDarken Envoyer un message via Skype™ à SirDarken
Dsl pour la parenthèse le faisant de tête je reconnai que bon :p

Pour le $value et bien en faite j'ai pris l'habitude de le mettre partout, je savais pas que tu pouvais l'utilisé (dans le in_array()) si tu l'omettais dans le foreach.

Sinon est-ce résolu et fonctionel ?
un petit
SirDarken est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h06.


 
 
 
 
Partenaires

Hébergement Web