[RESOLU] aide : dead with 7.3 mais en vie avec 5.3 !

Eléphanteau du PHP | 11 Messages

28 févr. 2020, 11:21

le bout de code en 5.3 mais qui ne passe pas en 7.3 est :
114 	if(!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+'.
115 	'@'.
116 	'[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.'.
117 	'[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$',
118 	$f_7))
119         {
120 	$erreur.="<li><span class='txterror'>Le champ &laquo; Email &raquo; est vide ou incomplet.</span>";
121 		$errf_7=1;
122 	}
et donne le message d'erreur
appel à la fonction non définie ereg () dans /htdocs/c1.inc.php:114 Trace de pile: # 0 {main}
en changeant le fonction ereg par preg_match comme vu sur l'excellent tuto https://www.php.net/manual/fr/function.preg-match.php
114   if(!preg_match('^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+'.
115   '@'.
116   '[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.'.
117   '[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$',
118   $f_7))
119   {
120   $erreur.="<li><span class='txterror'>Le champ &laquo; Email &raquo; est vide ou incomplet.</span>";
121   $errf_7=1;
122   }
l'erreur se transforme en :
preg_match(): Unknown modifier '_' in /htdocs/c1.inc.php on line 118
alors que
$f_7
est bien définis en ligne 99 et il n'y a pas d'erreur ? :
	
93        // Formatage des entrées
94        $f_2=trim(ucwords(preg_replace("[^a-zA-Z0-9éè äö\ -]", "", $f_2)));
95	$f_3=trim(ucwords(preg_replace("[^a-zA-Z0-9éè äö\ -]", "", $f_3)));
96	$f_4=trim(ucwords(preg_replace("[^a-zA-Z0-9éè äö\ -]", "", $f_4)));
97	$f_5=trim(preg_replace("[^0-9+]", "", $f_5));
98	$f_6=trim(ucwords(preg_replace("[^a-zA-Z0-9éè äö\ -]", "", $f_6)));
99	$f_7=strip_tags(trim($f_7));
100	$f_8=trim(preg_replace("[^0-9\ +]", "", $f_8));
en indiquant en jaune que
Le champ « Email » est vide ou incomplet.
alors que le mail est inchangé :?:

autant dire que mes compétances php s'arrête la ! serait ce une histoire de utf8 ? :?:

merci !
(petite suggestion faire incrémenter un numérotage automatique lorsque on met du code php serait peut être une facilité de lecture surtout lorsque le code est long )
Modifié en dernier par thuillier-charmet le 28 févr. 2020, 11:51, modifié 2 fois.
" Contrôler cela n'est pas forcement maîtriser ! "
"ce qui est facile pour les uns peut être difficile pour les autres ! " copyright Thuillier-charmet

Loi 92-597 1992-07-01 annexe JORF 3 juillet 1992
Toute représentation ou reproduction intégrale ou partielle faite sans le consentement de l'auteur ou de ses ayants droit ou ayants cause est illicite. Il en est de même pour la traduction, l'adaptation ou la transformation, l'arrangement ou la reproduction par un art ou un procédé quelconque.

Avatar du membre
Mammouth du PHP | 1204 Messages

28 févr. 2020, 11:46

Salut, à priori le pattern doit être entouré d'un caractère délimiteur de ton choix. Généralement on choisit un caractère qui n'est pas présent dans l'expression. Sinon il faut échapper le caractère dans l'expression.

Petit exemple pour être clair, disons que tu veux tous les mots, l'expression sera \w+ et le preg_match('/\w+/', $subject); Ici le délimiteur est le /
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Eléphanteau du PHP | 11 Messages

28 févr. 2020, 12:52

Salut, à priori le pattern doit être entouré d'un caractère délimiteur de ton choix. Généralement on choisit un caractère qui n'est pas présent dans l'expression. Sinon il faut échapper le caractère dans l'expression.

Petit exemple pour être clair, disons que tu veux tous les mots, l'expression sera \w+ et le preg_match('/\w+/', $subject); Ici le délimiteur est le /
que est l'utilité du point d'exclamation devant preg match :
!preg_match
j'essaie de comprendre la logique des délimiteurs qui seraient différents aussi en 7.3 que le 5.3 si je comprends bien ???
" Contrôler cela n'est pas forcement maîtriser ! "
"ce qui est facile pour les uns peut être difficile pour les autres ! " copyright Thuillier-charmet

Loi 92-597 1992-07-01 annexe JORF 3 juillet 1992
Toute représentation ou reproduction intégrale ou partielle faite sans le consentement de l'auteur ou de ses ayants droit ou ayants cause est illicite. Il en est de même pour la traduction, l'adaptation ou la transformation, l'arrangement ou la reproduction par un art ou un procédé quelconque.

Avatar du membre
Mammouth du PHP | 1204 Messages

28 févr. 2020, 13:01

que est l'utilité du point d'exclamation devant preg match
C'est ce qu'on appelle un not. En fait ça inverse simplement la valeur du retour. Un true devient false et un false devient true.

j'essaie de comprendre la logique des délimiteurs qui seraient différents aussi en 7.3 que le 5.3 si je comprends bien ???
Je pense qu'il s'agit plutôt d'une différence entre POSIX et PCRE. ereg utilisant des expressions POSIX et preg des expressions PCRE.
POSIX ne nécessite pas de délimiteur mais PCRE si car PCRE permet l'ajout d'un modifier après le délimiteur de fin.
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Eléphanteau du PHP | 11 Messages

29 févr. 2020, 10:35

que est l'utilité du point d'exclamation devant preg match
C'est ce qu'on appelle un not. En fait ça inverse simplement la valeur du retour. Un true devient false et un false devient true.

j'essaie de comprendre la logique des délimiteurs qui seraient différents aussi en 7.3 que le 5.3 si je comprends bien ???
Je pense qu'il s'agit plutôt d'une différence entre POSIX et PCRE. ereg utilisant des expressions POSIX et preg des expressions PCRE.
POSIX ne nécessite pas de délimiteur mais PCRE si car PCRE permet l'ajout d'un modifier après le délimiteur de fin.
ah ! merci pour l'éclairage je comprends mieux avec cette logique explicité.

le mieux que j'ai obtenue aprés plus d'une heure de "titillement" est :
113  }else{
114		if(!preg_match('~/ ^[-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+  /~'.
115		'~/ @ /~'.
116		'~/ [-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.  /~'.
117		'~/ [-!#$%&\'*+\./0-9=?A-Z^_`a-z{|}~]+$ /~' ,
118  	    '~/$f_7 /~'))
        {
qui me retourne une erreur
Warning: preg_match(): Unknown modifier ']' in /htdocs/c1.inc.php on line 118
:?: #-o :?:
si je mets en ligne 118
  $f_7 ))
cela donne la même erreur
et si j'emploie une syntaxe complexe comme vu sur l'excellent tuto https://www.php.net/manual/fr/language.types.string.php en ligne 118
{$f_7}))
cela mer retourne l'erreur
Parse error: syntax error, unexpected '{', expecting ')' in /htdocs/c1.inc.php on line 118
de même pour
    }else{
114		if(!preg_match('/\w+/'.
115	    '/@/'.
116		'/\w+/'.
117		'/\w+/' ,
118	     $f_7))
qui me retourne
Warning: preg_match(): Unknown modifier '/' in /htdocs/c1.inc.php on line 118
:?: #-o
Modifié en dernier par thuillier-charmet le 29 févr. 2020, 13:05, modifié 1 fois.
" Contrôler cela n'est pas forcement maîtriser ! "
"ce qui est facile pour les uns peut être difficile pour les autres ! " copyright Thuillier-charmet

Loi 92-597 1992-07-01 annexe JORF 3 juillet 1992
Toute représentation ou reproduction intégrale ou partielle faite sans le consentement de l'auteur ou de ses ayants droit ou ayants cause est illicite. Il en est de même pour la traduction, l'adaptation ou la transformation, l'arrangement ou la reproduction par un art ou un procédé quelconque.

Avatar du membre
Mammouth du PHP | 1204 Messages

29 févr. 2020, 13:03

Bah en fait, le pattern tu l'as mis sur plusieurs ligne en faisant de la concaténation de chaines (.). Le délimiteur doit être présent une fois au début et une fois à la fin du pattern et c'est un unique caractère, pas deux.
'/pattern/' si tu fais '/patt/'.'/ern/' ça donne /patt//ern/ et c'est pas bon.
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Eléphanteau du PHP | 11 Messages

29 févr. 2020, 13:18

Bah en fait, le pattern tu l'as mis sur plusieurs ligne en faisant de la concaténation de chaines (.). Le délimiteur doit être présent une fois au début et une fois à la fin du pattern et c'est un unique caractère, pas deux.
'/pattern/' si tu fais '/patt/'.'/ern/' ça donne /patt//ern/ et c'est pas bon.
si je fais
113    }else{
114		if(!preg_match('/[email protected]+.w+/' , $f_7))
j'ai le message d'erreur " le champ email est vide ou incomplet" :?: #-o

idem si je fais
113}else{
114		if(!preg_match('/\[email protected]\D.\D/' , $f_7))
 115 {
116		$erreur.="<li><span class='txterror'>Le champ &laquo; Email &raquo; est vide ou incomplet.</span>";
117			$errf_7=1;
comme vu avec l'excellent tuto sur les cacartéres : https://www.php.net/manual/fr/regexp.re ... escape.php
Modifié en dernier par thuillier-charmet le 29 févr. 2020, 13:43, modifié 2 fois.
" Contrôler cela n'est pas forcement maîtriser ! "
"ce qui est facile pour les uns peut être difficile pour les autres ! " copyright Thuillier-charmet

Loi 92-597 1992-07-01 annexe JORF 3 juillet 1992
Toute représentation ou reproduction intégrale ou partielle faite sans le consentement de l'auteur ou de ses ayants droit ou ayants cause est illicite. Il en est de même pour la traduction, l'adaptation ou la transformation, l'arrangement ou la reproduction par un art ou un procédé quelconque.

Avatar du membre
Mammouth du PHP | 1204 Messages

29 févr. 2020, 13:23

Bah le pattern ne doit pas être bon. Tu peux le tester ici https://regexr.com/ regarde bien la cheatsheet.
Déjà w+ ça veut juste dire 1 à n w et le . c'est n'importe quel caractère.
'/\[email protected]\w+\.\w+/' serait déjà mieux mais ça fonctionnera pas avec tous les emails.

EDIT en fait les règles pour les emails sont assez complexes. Y a des fonctions toutes prêtes pour les valider comme filter_var avec FILTER_VALIDATE_EMAIL. Pour valider un email par regex, tu dois pouvoir trouver des regex tous prêts, beaucoup plus complexes que la simple expression au dessus.
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Eléphanteau du PHP | 11 Messages

29 févr. 2020, 13:48

Bah le pattern ne doit pas être bon. Tu peux le tester ici https://regexr.com/ regarde bien la cheatsheet.
Déjà w+ ça veut juste dire 1 à n w et le . c'est n'importe quel caractère.
'/\[email protected]\w+\.\w+/' serait déjà mieux mais ça fonctionnera pas avec tous les emails.

EDIT en fait les règles pour les emails sont assez complexes. Y a des fonctions toutes prêtes pour les valider comme filter_var avec FILTER_VALIDATE_EMAIL. Pour valider un email par regex, tu dois pouvoir trouver des regex tous prêts, beaucoup plus complexes que la simple expression au dessus.
yeah ! Saian !
c'est la bonne formule "sacré bon sang de bon soir"
: :lol: avec
  
113  }else{
114		if(!preg_match('/\[email protected]\w+\.\w+/' , $f_7))
et mon mail est bien partis ! =D>

pour le lien donné https://regexr.com/ il faut faire quoi :arrow: trés exactement demander new puis copier dans le dot l'expression pour la corriger ?
" Contrôler cela n'est pas forcement maîtriser ! "
"ce qui est facile pour les uns peut être difficile pour les autres ! " copyright Thuillier-charmet

Loi 92-597 1992-07-01 annexe JORF 3 juillet 1992
Toute représentation ou reproduction intégrale ou partielle faite sans le consentement de l'auteur ou de ses ayants droit ou ayants cause est illicite. Il en est de même pour la traduction, l'adaptation ou la transformation, l'arrangement ou la reproduction par un art ou un procédé quelconque.

Avatar du membre
Mammouth du PHP | 1204 Messages

29 févr. 2020, 16:34

pour le lien donné https://regexr.com/ il faut faire quoi :arrow: trés exactement demander new puis copier dans le dot l'expression pour la corriger ?
Tu mets l'expression dans la zone expression, le texte que tu veux tester dans la zone text et tu vas voir en live le résultat de l'expression.
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Eléphanteau du PHP | 11 Messages

29 févr. 2020, 17:57

pour le lien donné https://regexr.com/ il faut faire quoi :arrow: trés exactement demander new puis copier dans le dot l'expression pour la corriger ?
Tu mets l'expression dans la zone expression, le texte que tu veux tester dans la zone text et tu vas voir en live le résultat de l'expression.
merci ,j'ai compris la logique de la chose
" Contrôler cela n'est pas forcement maîtriser ! "
"ce qui est facile pour les uns peut être difficile pour les autres ! " copyright Thuillier-charmet

Loi 92-597 1992-07-01 annexe JORF 3 juillet 1992
Toute représentation ou reproduction intégrale ou partielle faite sans le consentement de l'auteur ou de ses ayants droit ou ayants cause est illicite. Il en est de même pour la traduction, l'adaptation ou la transformation, l'arrangement ou la reproduction par un art ou un procédé quelconque.

Avatar du membre
Mammouth du PHP | 1204 Messages

29 févr. 2020, 18:17

Tu peux utiliser le modifier u pour prendre en compte les caractères accentués. /\[email protected]\w+\.\w+/u
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Eléphanteau du PHP | 11 Messages

29 févr. 2020, 18:20

Tu peux utiliser le modifier u pour prendre en compte les caractères accentués. /\[email protected]\w+\.\w+/u
oui merci du bon suivis :lol: =D>
" Contrôler cela n'est pas forcement maîtriser ! "
"ce qui est facile pour les uns peut être difficile pour les autres ! " copyright Thuillier-charmet

Loi 92-597 1992-07-01 annexe JORF 3 juillet 1992
Toute représentation ou reproduction intégrale ou partielle faite sans le consentement de l'auteur ou de ses ayants droit ou ayants cause est illicite. Il en est de même pour la traduction, l'adaptation ou la transformation, l'arrangement ou la reproduction par un art ou un procédé quelconque.