IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

Bloquer une erreur en ASP


Sujet :

ASP

  1. #1
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut Bloquer une erreur en ASP


    Je suis en train de pofiner un intranet. J'ai un p'ti pb sur la récupération d'erreur. Je plante le décor :
    Sur chaque page de mon intranet, il y a un controle de droit d'accès du type
    Ex dans ma feuille acceuil.asp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%if droits("TOTO")  then%>
    La fonction droits("TOTO") est dans une autre page ASP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!--#include file="../script/securite.asp" -->
    Cette Fonction retourne True ou False.
    Cette fonction marche très bien.
    Ma problèmatique est maintenant de faire en sorte que si ma Base n'est pas accessible, que ma fonction droits("TOTO") retourne : False

    Voici mon code de securite.asp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <% 
    on error resume next 
     
    Public Function droits(strNomDroit)
    	Dim objRs
    	Set objRs = Server.CreateObject("ADODB.Recordset")
     
                 'J'ai forcé une erreur dans ma connexion
                  objRs.ActiveConnection = connect_padrol		
    	if err then 	
    		err.clear
    		droits = false
                 else
                              Traitement 
                 end if
    end function
    %>
    Mais mon erreur est remontée dans ma page acceuil.asp
    or si dans la page acceuil.asp l'erreur que je rattrape est bien l'erreur de connection provoqué dans securite.asp

    Voici comment je l'ai vu dans accueil.asp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <H1><%=err.description%></H1>
    <H1><%=err.source%></H1>
    et si après je mets après dans acceuil.asp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <%err.clear%>
    <H1><%=err%></H1>
    ça me retourne 0

    Je ne comprend pas pourquoi mon err.clear ne marche pas dans securite.asp

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Je ne comprend pas bien.

    D'une manière générale, en ASP, il est très fastidieux de tenter de gérer les erreurs. Tu es obligé de mettre des "on error..." partout. C'est d'ailleurs dangereux car si une erreur survient et que le script ne s'arrête pas il peut se passer des choses imprévisibles.

    La meilleur solution est de faire une page par défaut pour les erreurs et de faire pointer IIS dessus. Ainsi, quelque soit l'erreur, ton script cessera de s'executer et tu arriveras sur une page expliquant simplement qu'une erreur est survenue et qu'un administrateur a été mis au courant.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut BLOQUE UNE ERREUR : MON BUT
    Déjà merci du conseil.
    Je tiens à préciser que je débute l'asp, je suis plus a l'aise avec VB et C#

    Ce que je veux faire est un peu près dans le meme but que ce que tu me propose.

    En fait, securite.asp est un fichier contenant mon script qui détermine si tu as le droit d'aller sur la page demandée.
    Je veux que s'il y a une erreur dans cette page que ma fonction retourne false
    mais dans l'état actuel des choses l'erreur remonte dans ma page.
    Ainsi je suis sur qu'on n'accèdera pas à des données si tu n'a pas le droit.

    J'ai essayé dans securite.asp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    on error resume next 
     
    Public Function droits(strNomDroit)
    on error goto ETIQUETTE
    ...
    exit Function 
    ETIQUETTE :
    err.clear 
    droits = false
     
    end function
    mais je doit avoir une mauvaise syntaxe, car ça ne fonctionne pas non plus

    De plus, je n'ai pas accès à IIS.

    Merci d'avances à ce qui pourront me donner un coup de main

  4. #4
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Public Function droits(strNomDroit)
    	Dim objRs
    	Set objRs = Server.CreateObject("ADODB.Recordset")
     
                 'Désactiver le gestionnaire d'erreur
                  on error resume next 
                  objRs.ActiveConnection = connect_padrol		
    	if err.number <> 0 then 	
                             'Activer le gestionnaire d'erreur
    		on error goto 0
    		droits = false
                 else
                             'Activer le gestionnaire d'erreur
    		on error goto 0
                              Traitement 
                 end if
    end function

  5. #5
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par pc75 Voir le message
    Bonjour,

    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Public Function droits(strNomDroit)
    	Dim objRs
    	Set objRs = Server.CreateObject("ADODB.Recordset")
     
                 'Désactiver le gestionnaire d'erreur
                  on error resume next 
                  objRs.ActiveConnection = connect_padrol		
    	if err.number <> 0 then 	
                             'Activer le gestionnaire d'erreur
    		on error goto 0
    		droits = false
                 else
                             'Activer le gestionnaire d'erreur
    		on error goto 0
                              Traitement 
                 end if
    end function
    J'ai mis ton code dans securite.asp
    mais l'erreur remonte toujours dans ma fenetre d'appel accueil.asp

    le on error resume next marche bien, si je l'nlève ma page s'affiche avec le gros message d'erreur.
    le pb c'est comme il y a un retour d'erreur il affiche ma page acceuil.asp
    alors que moi je voudrait qu'il réponde "vous n'etes pas autorisé"
    Ce qu'il fait avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <%if droits("PADROL")  then%>
    <%else%>
    	Vous n'êtes pas autorisé à accéder à cette page
    <%end if%>
    Je souhaiterais que la fonction droits bloque l'erreur sans que j'ai a retouché a toutes mes pages( plus de 300)
    Donc si j'arrive à contenir l'erreur dans droits (de securite.asp) j'aurai gagné

    Merci de l'aide encore une fois

  6. #6
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut
    Oups j'avais mal copier un morceaux

    ça marche nickel

    MERKI infiniement 1 semaine de recherche pour m'apercevoir que mon on error resume next marche mieux dans ma fonction que dehors
    PC75 t'es un

  7. #7
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Trois choses:
    1. Je ne vois pas à quoi sert cette fonction.
    2. Si cette fonction verifie qu'un utilisateur à le droit d'accéder à une page tu ne pourras pas le vérifier en faisant
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      objRs.ActiveConnection = connect_padrol
    3. Un conseil sinon, ne jamais demander à une fonction d'utiliser une variable qui ne lui a pas été EXPLICITEMENT passée. Tu utilises "connect_padrol" alors qu'on ne sait pas d'où cette variable vient. Dans la mesure du possible il faut absolument éviter!! Je te conseil de te faire un géstionnaire de sécurité sous la forme d'une classe "Utilisateur". Copie colle ce code dans une page sans rien d'autre, sauvegarde la sous le nom "test.asp" (ou ce que tu veux) sur ton serveur IIS et affiche la dans ton navigateur.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      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
      61
      62
      63
       
      <%
      Dim User
      Set User = New Utilisateur
      	User.LName = "toto"
      	Response.Write "Vous êtes : " & User.LName & "<br />"
      	If User.IsAuthorized then
      		Response.Write "Utilisateur OK<br />"
      	Else
      		Response.Write "Utilisateur pas OK<br />"
      	End If
      	User.LName = "titi"
      	Response.Write "Vous êtes : " & User.LName & "<br />"
      	If User.IsAuthorized then
      		Response.Write "Utilisateur OK<br />"
      	Else
      		Response.Write "Utilisateur pas OK<br />"
      	End If
      Set User = Nothing
       
      Class Utilisateur
      	Private LName_
      	Private IsAuthorized_
       
      	Private Sub Class_Initialized
      		IsAuthorized_ = Null
      	End Sub
       
      	Private Sub Class_Terminate
       
      	End Sub
       
      	Public Property Get DefaultProperty
      		DefaultProperty = "Class Utilisateur"
      	End Property
       
      	Public Property Get LName
      		LName = LName_
      	End Property
       
      	Public Property Let LName(value)
      		LName_ = value
      	End Property
       
      	Public Property Get IsAuthorized
      		If IsNull(IsAuthorized_) Then
      			IsAuthorized_ = false
      		Else
      			If LName = "toto" Then
      				IsAuthorized_ = true
      			Else
      				IsAuthorized_ = false
      			End If
      		End If
      		IsAuthorized = IsAuthorized_
      	End Property
       
      	Public Property Let IsAuthorized(value)
      		IsAuthorized_ = value
      	End Property
       
      End Class
      %>
      C'est juste un brouillon. Il manque le moyen pour cette classe de se connecter à ta base de données. Si tu veux en savoir plus hésite pas.

      Si tu veux une classe pour disposer d'outils facile d'accès pour gérer la relation avec ta BD jette un oeil ici: http://www.developpez.net/forums/sho...40&postcount=2

      Par contre, retiens une chose: soit explicite!
    "Winter is coming" (ma nouvelle page d'accueil)

  8. #8
    Membre éprouvé
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Salut,

    Trois choses:
    1. Je ne vois pas à quoi sert cette fonction.
    2. Si cette fonction verifie qu'un utilisateur à le droit d'accéder à une page tu ne pourras pas le vérifier en faisant
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      objRs.ActiveConnection = connect_padrol
    3. Un conseil sinon, ne jamais demander à une fonction d'utiliser une variable qui ne lui a pas été EXPLICITEMENT passée. Tu utilises "connect_padrol" alors qu'on ne sait pas d'où cette variable vient. Dans la mesure du possible il faut absolument éviter!! Je te conseil de te faire un géstionnaire de sécurité sous la forme d'une classe "Utilisateur". Copie colle ce code dans une page sans rien d'autre, sauvegarde la sous le nom "test.asp" (ou ce que tu veux) sur ton serveur IIS et affiche la dans ton navigateur.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      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
      61
      62
      63
       
      <%
      Dim User
      Set User = New Utilisateur
      	User.LName = "toto"
      	Response.Write "Vous êtes : " & User.LName & "<br />"
      	If User.IsAuthorized then
      		Response.Write "Utilisateur OK<br />"
      	Else
      		Response.Write "Utilisateur pas OK<br />"
      	End If
      	User.LName = "titi"
      	Response.Write "Vous êtes : " & User.LName & "<br />"
      	If User.IsAuthorized then
      		Response.Write "Utilisateur OK<br />"
      	Else
      		Response.Write "Utilisateur pas OK<br />"
      	End If
      Set User = Nothing
       
      Class Utilisateur
      	Private LName_
      	Private IsAuthorized_
       
      	Private Sub Class_Initialized
      		IsAuthorized_ = Null
      	End Sub
       
      	Private Sub Class_Terminate
       
      	End Sub
       
      	Public Property Get DefaultProperty
      		DefaultProperty = "Class Utilisateur"
      	End Property
       
      	Public Property Get LName
      		LName = LName_
      	End Property
       
      	Public Property Let LName(value)
      		LName_ = value
      	End Property
       
      	Public Property Get IsAuthorized
      		If IsNull(IsAuthorized_) Then
      			IsAuthorized_ = false
      		Else
      			If LName = "toto" Then
      				IsAuthorized_ = true
      			Else
      				IsAuthorized_ = false
      			End If
      		End If
      		IsAuthorized = IsAuthorized_
      	End Property
       
      	Public Property Let IsAuthorized(value)
      		IsAuthorized_ = value
      	End Property
       
      End Class
      %>
      C'est juste un brouillon. Il manque le moyen pour cette classe de se connecter à ta base de données. Si tu veux en savoir plus hésite pas.

      Si tu veux une classe pour disposer d'outils facile d'accès pour gérer la relation avec ta BD jette un oeil ici: http://www.developpez.net/forums/sho...40&postcount=2

      Par contre, retiens une chose: soit explicite!
    connect_padrol n'est qu'une string avec mes paramètres de connexion à ma BDD. : "driver={SQL Server}; server=sql..."
    je la maitrise bien
    je fais des modif dedans pour provoquer mes erreurs

    En fait j'ai repris un intranet qui tourne depuis plusieurs année
    mais il n'y a aucune gestion d'erreur. ce que je suis en train de faire

    Mais merci de ton avis quand n apprend c'est pas de refus

  9. #9
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    D'une manière générale, en ASP, il est très fastidieux de tenter de gérer les erreurs. Tu es obligé de mettre des "on error..." partout. C'est d'ailleurs dangereux car si une erreur survient et que le script ne s'arrête pas il peut se passer des choses imprévisibles.

    La meilleur solution est de faire une page par défaut pour les erreurs et de faire pointer IIS dessus. Ainsi, quelque soit l'erreur, ton script cessera de s'executer et tu arriveras sur une page expliquant simplement qu'une erreur est survenue et qu'un administrateur a été mis au courant.

    A+
    Ben en ASP c'est la seule solution.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Bloquer une cellule : .Locked=True renvoie ue erreur
    Par diude54 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/09/2009, 08h30
  2. Page .asp renvoi une erreur après 500 lignes
    Par hamsterj dans le forum ASP
    Réponses: 13
    Dernier message: 02/09/2009, 20h25
  3. [ASP.Net 2.0/Oracle] Pourquoi ai-je une erreur de connection ?
    Par lenoil dans le forum Accès aux données
    Réponses: 1
    Dernier message: 02/08/2006, 08h28
  4. Réponses: 25
    Dernier message: 23/11/2004, 18h20
  5. Ne pas formater une erreur
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 2
    Dernier message: 18/03/2003, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo