Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
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 18/10/2006, 11h06   #1
Membre habitué
 
Avatar de xenos
 
Inscription : septembre 2005
Messages : 402
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 402
Points : 140
Points : 140
Par défaut insérer ligne Textarea dans BDD

Bonjour,

J'ai un Textarea et pour chaqu'une des lignes qui s'y trouvent je voudrais la rajouter dans une ligne dans la table correspondante.

J'ai donc commencé par récupérer la valeur du Textarea ($email).

Ensuite j'utilise la fonction Explode :

Code :
$email = explode("\n", $email);
Ensuite j'aimerais compter le nombre de ligne dans le Textarea ... mais je ne trouve pas de fonction en php qui le permette ...

D'avance merci pour vos réponses.
xenos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 11h08   #2
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Bonjour,

La fonction explode est utilisé correctement mais que font les deux points avant le signe égal. Surement, un petit mélange de langage

Pierre
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 11h11   #3
Membre habitué
 
Avatar de xenos
 
Inscription : septembre 2005
Messages : 402
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 402
Points : 140
Points : 140
Citation:
Envoyé par pierre
La fonction explode est utilisé correctement mais que font les deux points avant le signe égal. Surement, un petit mélange de langage
Oui merci, mais je m'en suis rendu compte juste après avoir posté ... je me suis trompé de langage de programmation pour le "égal" ...

Merci pour cette remarque Pierre.
xenos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 11h12   #4
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 43
Points : 18
Points : 18
Explode te retourne un tableau, tu peux utiliser count($email) pour connaitre le nombre d'élément de ton tableau.
Thi0123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 11h40   #5
Membre habitué
 
Avatar de xenos
 
Inscription : septembre 2005
Messages : 402
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 402
Points : 140
Points : 140
Merci pour votre aide, ça m'a déjà permis de bien avancer ...

Lorsque j'écris le code qui suit ça fonctionne correctement, il introduit toutes les adresses e-mails dans la table.

Code :
1
2
3
4
5
6
7
8
9
10
11
$email = explode("\n", $email);
$nombre=0;
$nombre_emails = count($email);
while ($nombre < $nombre_emails)
{
	if (mysql_query("INSERT INTO liste_email VALUES('', '" . $id_admin . "', '". $email[$nombre] ."','". $langue ."', '" . $pays . "', '" . $source . "', NOW(), '')"))
	{
		echo ($email[$nombre]);
	}
$nombre ++;
}
Cependant lorsque je rajoute une condition, pour être sûr que l'information est bien une adresse e-mail, il introduit uniquement la dernière adresse e-mail de la liste ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$email = explode("\n", $email);
$nombre=0;
$nombre_emails = count($email);
while ($nombre < $nombre_emails)
{
	//Si l'adresse e-mail est valide ...
	if (preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{1,}\.[a-z]{2,6}$#', $email[$nombre]))
	{
		if (mysql_query("INSERT INTO liste_email VALUES('', '" . $id_admin . "', '". $email[$nombre] ."','". $langue ."', '" . $pays . "', '" . $source . "', NOW(), '')"))
		{
			echo ($email[$nombre]);
		}
	}
$nombre ++;
}
Je ne comprends pas pourquoi il introduit uniquement la dernière adresse e-mail de la liste ... Car toutes les e-mails introduitent correspondent bien au Regex que j'ai rajouté dans le code !
xenos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 11h45   #6
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Il doit surement y avoir un problème avec la regex. Le mieux est de faire quelques echos dans le if preg_match pour voir s'il rentre bien dedans

Code :
1
2
3
4
5
6
7
8
 
...
//Si l'adresse e-mail est valide ...
	if (preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{1,}\.[a-z]{2,6}$#', $email[$nombre]))
	{
 
echo 'Email '.$email[$nombre].' : OK <br>';
...
Sinon, pour le parcours d'un tableau, une boucle for() est plus adapté

Ou mieux encore la boucle foreach()

Bonne continuation
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 12h58   #7
Membre habitué
 
Avatar de xenos
 
Inscription : septembre 2005
Messages : 402
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 402
Points : 140
Points : 140
Citation:
Envoyé par FCYPBA
mieux encore la boucle foreach()
J'ai revu le code en mettant un Foreach :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$email = explode("\n", $email);
Foreach ($email as $value)
{
	//Si l'adresse e-mail est valide ...
	if (preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{1,}\.[a-z]{2,6}$#', $value))
	{
		if (mysql_query("INSERT INTO liste_email VALUES('', '" . $id_admin . "', '". $value ."','". $langue ."', '" . $pays . "', '" . $source . "', NOW(), '')"))
		{
 
		}
	echo ('$' . $value . '$ OK <br />');
	}
	else
	{
	echo ('$' . $value . '$ PAS OK <br />');
	}
}
Citation:
Envoyé par FCYPBA
Il doit surement y avoir un problème avec la regex. Le mieux est de faire quelques echos dans le if preg_match pour voir s'il rentre bien dedans
Comme tu as pu le remarquer, j'ai rajouté des echo ... ça m'a permis de comprendre que l'algorithme ne rajoute dans la table que la dernière adresse e-mail ... même si elles sont toutes correct et en accord avec le Regex.

Parce qu'il rajoute un espace à la fin de chaque ligne en découpant les adresses en tableau.

Un exemple sera surement plus clair. J'introduis les adresses e-mails suivantes :

Citation:
test1@gmail.com
test2@gmail.com
test3@gmail.com
Et après l'exécution la page php écrit :

Citation:
$test1@gmail.com $ PAS OK
$test2@gmail.com $ PAS OK
$test3@gmail.com$ OK
On remarque que pour toutes les lignes sauf la dernière, il rajoute un espace ... alors qu'il n'y en a pas au moment de l'introduction des e-mails ...

Comment puis je faire pour supprimer cet espace ?
xenos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 13h00   #8
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
tu dois utiliser la fonction trim()

Bonne continuation dans ton projet
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 14h56   #9
Membre habitué
 
Avatar de xenos
 
Inscription : septembre 2005
Messages : 402
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 402
Points : 140
Points : 140
Un grand merci à vous, FCYPBA et Thi0123 pour votre aide !!!

Tout fonctionne parfaitement !!!

Bonne programmation à tous.
xenos 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 17h42.


 
 
 
 
Partenaires

Hébergement Web