Besoin d'aire sur une preg_match

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Besoin d'aire sur une preg_match

Re: Besoin d'aire sur une preg_match

par Mouflon » 28 janv. 2012, 16:45

Merci beaucoup à vous 2.

@Boro64 désolé de ma réponse un peu brutale mais je 'bidouille' en php et je suis en train de modifier le script d'import de joomla qui ne fonctionnait pas sous ma config (version PhP trop récente) et je patauge grave.

@Boro64 et Moogli C'est bien les délimiteurs qui manquaient "#;$#".

@modo, si quelqu'un peux fermer le post, je n'ai pas trouvé comment.

@modo, deleter le post dans la section Projets collaboratifs / entraide

Bon week-end à vous et encore merci

Re: Besoin d'aire sur une preg_match

par moogli » 28 janv. 2012, 15:38

:mrgreen: :mrgreen:

Re: Besoin d'aire sur une preg_match

par Boro64 » 28 janv. 2012, 15:03

Damned! Grillé! :mrgreen:

Re: Besoin d'aire sur une preg_match

par Boro64 » 28 janv. 2012, 15:02

Bonjour
là, l'alarme te dit que tu n'as pas mis de délimiteurs
Je ne suis pas un spécialiste (et pour tout dire j'ai encore quelques difficultés avec les expressions régulières :mrgreen: ) mais la documention sur les délimiteurs devrait t'aider; et en particulier ceci:
Délimiteurs

Lors de l'utilisation des fonctions PCRE, il est nécessaire que le motif soit encadré par des délimiteurs. Un délimiteur peut être n'importe quel caractère alpha-numérique autre qu'un backslash ou qu'un espace.

Les délimiteurs les plus courants sont les slashes (/), dièses (#) et les tildes (~). Les exemples suivants ont tous des motifs encadrés avec des délimiteurs valides.
Bref, quelque chose comme
"#;$#"
peut être.....

Re: Besoin d'aire sur une preg_match

par moogli » 28 janv. 2012, 14:58

N'étant pas complètement abruti, j'ai bien vu qu'il manquait un ;.
on s'emballe pas hein :)

le problème vient du fait de ta méconnaissance des expression régulière. je te conseil le site expreg.com pour en savoir plus.

en gros ereg* utilisait des expressions régulière basé sur POSIx, les preg_match* sur PRCE.
La grosse différence c'est que PRCE demande un délimiteur sur l'expression régulière. Et il prend le 1er caractère rencontré comme le délimiteur de la chaine, hors ici c'est le ; :mrgreen:

en général on utilise en délimiteur / ou # ou ` (tant qu'il ne se trouve pas dans le motif).


@+

Re: Besoin d'aire sur une preg_match

par Mouflon2 » 28 janv. 2012, 14:48

Merci de votre réponse rapide.
N'étant pas complètement abruti, j'ai bien vu qu'il manquait un ;.
J'ai aussi consulté la doc que vous cité puisqu'elle correspond à la nouvelle instrruction destinée à remplacer celle devenue obsolète. Deprecated pour parler comme les phpistes.
Mon problème, c'est que je ne sais pas ou le claquer ce ;
Comme de plus l'instruction est destinée à rechercher un ; je me demande si le problème ne vient pas de là.
Bref je ne suis toujours pas plus avancé.

Re: Besoin d'aire sur une preg_match

par Boro64 » 28 janv. 2012, 14:00

Bonjour
Réponse sans garantie, mais sans doute une piste....
Il me semble que la réponse t'es donnée dans le warning; je te conseille la lecture du manuel et des pattern; là, l'alarme te dit que tu n'as pas mis de délimiteurs

Besoin d'aire sur une preg_match

par Mouflon » 28 janv. 2012, 13:39

Bonjour a tous
je suis en train de migrer un site pour une asso (bénévolat).
je ne m'en sort pas avec une instruction, si une ame charitable peut m'aider, je lui en serais infiniment reconnaissant.

Source php 3:
 // Execute query if end of query detected (; as last character) AND NOT in parents
if (ereg(";$", trim($dumpline)) && !$inparents) {
 if (!TESTMODE) {
 $db->setQuery(trim($query));
// echo $query . '
';
 if (!$db->Query()) {
 echo ("<p class=\"error\">".JText::_('Error at the line') ." $linenumber: ". trim($dumpline) . "</p>\n");
 echo ("<p>".JText::_('Query:') . trim(nl2br(htmlentities($query))) ."</p>\n");
 echo ("<p>MySQL: " . mysql_error() . "</p>\n");
 $error = true;
 break;
 }
ma modif en php5
// Execute query if end of query detected (; as last character) AND NOT in parents
if (preg_match(";$", trim($dumpline)) && !$inparents) {
 if (!TESTMODE) {
 $db->setQuery(trim($query));
// echo $query . '
';
 if (!$db->Query()) {
 echo ("<p class=\"error\">".JText::_('Error at the line') ." $linenumber: ". trim($dumpline) . "</p>\n");
 echo ("<p>".JText::_('Query:') . trim(nl2br(htmlentities($query))) ."</p>\n");
 echo ("<p>MySQL: " . mysql_error() . "</p>\n");
 $error = true;
 break;
 }

et j'obtiens cette erreur

Warning: preg_match() [function.preg-match]: No ending delimiter ';' found in

j'ai juste remplacé ereg par preg-match (trouvé sur le net).

Je vous remercie par avance de votre aide
Cordialement
Gérard