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 23/08/2006, 00h28   #1
Membre du Club
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 54
Points : 54
Envoyer un message via MSN à dark_vidor
Par défaut Regex : généralisation d'un remplacement numérique

j'aimerai généraliser un remplacement de caractère :

Code :
1
2
3
$line = '24';
$text = "Erreur de syntaxe près de '' à la ligne 1";
$text = ereg_replace("ligne 1", "ligne ".$line, $text);
ou "erreur de syntaxe" est en faite le retour de mysql_error();
et ou $line est la vraie ligne d'erreur retourner par __LINE__

Je suis en train de créer une fonction de gestion des erreurs sql parce que le mysql_error(); ... s'est bien mais pour debuger vraiment corectement et rapidement c'est pas terrible notement avec le numéro de ligne retourné qui n'est pas le bon

je voudrais generaliser le remplacement de la ligne fournit par le mysql_error() par celle fournit par __LINE__

exemple
Citation:
Erreur de syntaxe près de '' à la ligne 1 Erreur de syntaxe près de '' à la ligne 25
dark_vidor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 09h52   #2
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
et... ca ne marche pas ? je vois pas de questions là
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 10h16   #3
Membre du Club
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 54
Points : 54
Envoyer un message via MSN à dark_vidor
bon je recommence plus clairement

Code :
$text = "Erreur de syntaxe près de '' à la ligne 1";
on ne connait pas la ligne d'erreur a l'avance
ça peut etre ligne 1, ligne 127, ligne 3052, ...

sauf que : la ligne retournée par le mysql_error(); et la ligne dans mon code n'est jamais la meme ! j'aimerais donc remplacer la ligne retournée par mysql_error par la constante __LINE__

alors forcément dans le cas ci dessus ça fonctionne puisque je met texto ce qu'il faut remplacer ... sauf que j'aimerais que ça le fasse tout le temps quelques soit le numéro de ligne mysql_error

Code :
ereg_replace("ligne [numero]", "ligne ".$line, $text);
je creer une fonction sql_error pour gerez les erreurs enfin pour debuger plus rapidement (suivant la regle2 c'est elle qui m'a donnée cette idée)
dark_vidor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 11h38   #4
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
ok ;o)

Je pense quand meme tu devrais garder le numero de ligne mysql, au cas ou, ca pourrait etre utile un jour, genre afficher "ligne 32(1)" ou "ligne 32-1" au lieu de "ligne 1"

Pour cela, en preg :

Code :
$texte=preg_replace("#ligne ([0-9]+)$#", "ligne $line ($1)", $texte)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 11h40   #5
Membre du Club
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 54
Points : 54
Envoyer un message via MSN à dark_vidor
pouriez vous m'expliquer #ligne ([0-9]+)$#

parce que a chaque fois que je veux faire une opération du type remplacement comme ça j'suis tjrs embetter parce que je sais pas me servir de ce qu'on doit mettre a l'intérieur

merci


edit :

voici ce que j'ai cré :

Code :
1
2
3
4
5
6
7
8
9
10
11
function SQL_Error($file, $line, $query, $error)
{
	$log_file = fopen("log.txt","a+");
	$result = '['.date("d-m-Y H:i:s").']|'.$file.'|'.$query.' : '.preg_replace("#ligne ([0-9]+)$#", "ligne $1 (ligne ".$line.")", $text)."\n" ;
	fwrite($log_file, $result);
	fclose($log_file);
	exit();
}
 
 
mysql_query($query) or SQL_Error($_SERVER['PHP_SELF'], __LINE__, $query, mysql_error());
si vous voyez une optimisation (je sais le preg dans le coup sert plus à grand chose mais bon tant pi je pensais pas que ça pouvais être utile de garder la ligne retourner par mysql_error qui est erroné ... ^^

n'empeche que je veux bien comprendre comment ça marche le premier parametre dans ereg, preg ...
dark_vidor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 11h49   #6
Rédacteur
 
Avatar de Yoshio
 
Homme
Inscription : septembre 2005
Messages : 1 741
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 1 741
Points : 1 497
Points : 1 497
Citation:
parce que a chaque fois que je veux faire une opération du type remplacement comme ça j'suis tjrs embetter parce que je sais pas me servir de ce qu'on doit mettre a l'intérieur
les regex ca s'apprend : http://www.expreg.com/
(d'autre tuto sont sur developepz.com)
Yoshio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 12h05   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

En effet, il y a par exemple ce tutoriel : Initiation aux expressions régulières en PHP
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 12h08   #8
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
alors en gros :

#...# sert a délimiter l'expression réguliere, ce n'est pas utilisé par ereg. On peut utiliser #, ou bien / ou bien d'autres caracteres, c'est au choix ;o)

[] défini un ensemble de caracteres possibles
0-9 veux dire : un caractere entre 0 et 9
+ veux dire : 1 ou plusieurs caracteres précédents (donc ici, 1 ou plusieurs caractere parmis l'ensemble composé des caracteres entre 0 et 9 : donc un nombre ;o)
$ veux dire que l'on doit atteindre la fin de la chaine, donc que les chiffres devront etre collés a la fin du message d'erreur.
() correspond a une "capture", on décide donc de capturer (=sauvegarder) le numero de la ligne mysql (si on avait pas capturé le +, on aurait eu que le premier chiffre de la ligne)

Dans la chaine de remplacement, $1 sera remplacé par le 1er texte capturé. On peux aussi ecrire \1 c'est a chacun de faire selon ses préférences ;o)

Les regexp sont un monde a part... et il faut s'y plonger... mais une fois qu'on connait un peu, on fait vraiment beaucoup de chose dans la manipulation des chaines de caracteres ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2006, 12h35   #9
Membre du Club
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 54
Points : 54
Envoyer un message via MSN à dark_vidor
bon ça j'imprime et j'apprend par coeur ^^

merci j'ai compris l'appliquer correctement ça va etre autre chose mais j'ai compris le principe


bon sinon ma fonction vous en pensez quoi ?
dark_vidor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h55.


 
 
 
 
Partenaires

Hébergement Web