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

JavaScript Discussion :

[AJAX] Insertion de données (formulaire) dans une base Access : ASP JavaScript


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut [AJAX] Insertion de données (formulaire) dans une base Access : ASP JavaScript
    Salut,

    J'ai récemment appris les langage ASP et Javascript et je cherche à entrer des informations saisies par formulaire dans une base de données Access...

    Je me suis pas mal promener sur le web mais je dois avouer que je frole l'overdose d' "incompréhension générale" vue que je commence à m'emmeler les méninges dans tous les sens.

    Mon problème est donc le suivant :

    fichier "ajouter_deplacement.ASP"

    1 champ text de saisie - 1 <div> contenant une référence "txtHint"
    1 boutton "Valider" avec un onClick -> function ValidForm

    ValiForm :

    1- Vérification que le champ text est non vide
    2- Vérification du BROWSER
    3- Envoi d'une requete au serveur (Je n'ai pas trop compris à quoi corresponde les paramètres : RequestHeader et ce que je vasi envoyer au serveur avec Send)
    4- Controle du State
    5- Envoi

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     <html>
    <head>
        <title>Acquisition de donnees </title>
    	<link rel="stylesheet" type="text/css" href="style2.css" />
    </head>
     
    <body>
     
    <div id="content">
    <form name="form_deplacement" action="" method="post">
    	<div class="AttachedForm"> Ajout d'un deplacement dans la base de donnees </div>
    		<div class="PositionForm">
    			<table>
    			<tr>
    			<td class="LabelForm"> <label for="nom_deplacement">Type de deplacement</label>: </td>
    			<td class="TextForm"> <input type="text" id="nom_deplacement" name="nom_deplacement"/></td>
    			<td class="AdviceForm"><div id="txtHint"></div></td>
    			</tr>
    			</table>
    		</div>
    	<div>
    			<input type="button" value="Valider" onClick="ValidForm(this.form_deplacement)"/>
    			<input type="reset" value="Retablir"/>
    	</div>
    </form>
     
     
    <script type="text/javascript">
     
    // Fonction d'insertion des données dans la base données
     
    function ValidForm(form){
    	if (form.length==0){ 
    		document.getElementById("txtHint").innerHTML="Champ Obligatoire !";
      		return;
      		}
      	else{	
    	xmlHttp=GetXmlHttpObject();
    	xmlHttp.open("post","/RequestASP.asp",true);
    	xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	xmlHttp.onreadystatechange = stateChanged;
    	xmlHttp.send("nom_deplacement="getElementById("nom_deplacement"));
    		}
    	}
     
    // Fonction de test du BROWSER
     
    function GetXmlHttpObject() {
    	var xmlHttp = null;
    	try { 
    		xmlHttp = new XMLHttpRequest(); }		// Firefox, Opera 8.0+, Safari
    	catch (e) {
    		try {
    	    	xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }		// Internet Explorer 6.0+
    	  catch (e) {
    	    try {
    	      	xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }		// Internet Explorer 5.5+
    	      catch (e) {
    	      	alert("Votre Explorateur Internet ne supporte pas la technologie AJAX !"); }
    	    }
    	  }
    	return xmlHttp;
    	}
     
    // Fonction de test du transfert des données au serveur
     
    function stateChanged() { 
    	if (xmlHttp.readyState==4 && xmlHttp.status == 200) {
    		document.getElementById("txtHint").innerHTML = xmlHttp.responseText;
    		}
    	}
     
    </script>
     
     
     
    </div>
     
    </body>
    </html>

    fichier "Request.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
    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
     
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <%option explicit %>
     
    <%
    Dim g_oConn
    Dim g_oRs
    Dim TempId
    Dim frm = Request.form
     
        Connect
        InsertData(Request.form)
        if TempId 
        Disconnect
     
     
     
    Sub Connect
        Set g_oConn = Server.CreateObject("ADODB.Connection")
        g_oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & Server.MapPath("base_test.mdb") & ";"
            On error resume next
            g_oConn.Open
            if g_oConn.State = 0 then
                Response.Write "La connexion à la base """ & Server.MapPath("base_test.mdb") & """ a échoué <br/>"
                Response.End        	
            End if
        On error goto 0
    End Sub
     
     
    Sub Disconnect
        If g_oConn.State = 1 then g_oConn.Close
        Set g_oConn = Nothing
    End Sub
     
     
    Sub InsertData(frm)
        Dim sql
     
    	    Set g_oRs = Server.CreateObject("ADODB.Recordset")
    	    sql = "INSERT INTO deplacements (nom_deplacement) VALUES ('" & frm("nom_deplacement") & "');"
        	g_oRs.Open sql, g_oConn, 3, 3
     
    		response.write("Le deplacement a été ajouté à la base !")
    End Sub
     
    Sub AfficheForm
        %>

    Si une ame charitable pouvait m'aider (en compréhension : lien vers explications / en programmation)...

    Merci

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par polothentik Voir le message
    Si une ame charitable pouvait m'aider (en compréhension : lien vers explications / en programmation)...
    Il manque un point essentiel : quelle est la question ou le problème qui te bloque ?

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Effectivement,

    et bien ce dont je suis sûr :

    // Dans le fichier ajouter_deplacement.asp
    function GetXmlHttpObject()
    function stateChanged()

    //Dans le fichier RequestASP.asp
    La procédure pour entrer des données dnas la base fonctionne !

    Ce dont je ne suis pas sûr :

    // Dans le fichier "ajouter_deplacement.asp"
    function ValidForm : Lorsque j'essaye de "valider" une donnée, je ne comprend pas ce que fait la fonction !! J'ai essayé de mettre un document.write dans le if, dans le else, avant le if .... RIEN NE S'AFFICHE !!

    De meme, je ne sais pas si ma condition pour détecter les champ vide est juste... elle me semble correcte !!??

    Enfin, je ne suis absolument pas sûr de la conformité de ma méthode POST. J'ai pu voir sur Internet qu'il existe beaucoup de configurations différentes pour setRequestHeader !!! Pourriez-vous m'en dire un peu plus ?

    Quant est-il de la 1ère ligne de code que l'on retrouve partout dans les fichiers (.asp) "response.expires=-1" ? Parfois, elle se retrouve sous la frome de plusieurs lignes ???

    Du coup, ça fait plein de questions et j'en suis désolé !!

    Merci pour tout (d'avance)

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    La fonction ValidForm() appelle via Akjax la page /RequestASP.asp en lui passant en paramètre "nom_deplacement="getElementById("nom_deplacement")
    Paramètre qui n'est pas bon : il manque le .value =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlHttp.send("nom_deplacement="getElementById("nom_deplacement").value);
    A réception de la réponse, elle lance stateChanged()
    De meme, je ne sais pas si ma condition pour détecter les champ vide est juste... elle me semble correcte !!??
    Non ! Elle teste le nombre de champ du formulaire (qui ne dépend pas des saisies de l'utilisateur).
    Il faut que tu testes les champs individuellement (cf. la FAQ Javascript).
    Quant est-il de la 1ère ligne de code que l'on retrouve partout dans les fichiers (.asp) "response.expires=-1" ? Parfois, elle se retrouve sous la frome de plusieurs lignes ???
    Cela force la regénération de la page (empêche l'utilisation du cache serveur).
    Personnellement, j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    response.expires = -1
    response.AddHeader "Pragma", "no-cache"
    response.AddHeader "cache-control", "no-store"
    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Merci pour la rapidité de ta réponse !!

    Je me pose une question toute bete : "Est-ce qu'il faut déclarer quelque chose en en-tête de page ??

    J'utilise <script type="text/javascript"> --- </script> pour tout ce que j'écris en javascript !!

    je ne comprend pas pourquoi onClick il ne veut pas éxecuter ma fonction ValidForm !!

    Je cherche...

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par polothentik Voir le message
    je ne comprend pas pourquoi onClick il ne veut pas éxecuter ma fonction ValidForm !!
    Je pense qu'elle s'exécute !
    Pour t'en convaincre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function ValidForm(form){
    alert('Et oui !');
    	if (form.length==0){ 
    ...
    Mais comme le passage de paramètre n'est pas bon (est en cas de bugg serveur, même s'il l'est), soit la réponse n'arrive jamais, soit elle n'a aucun effet.

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    .... au fait : il faudrait passer toute ta partie <script type="text/javascript">...</script> dans le <head> de ta page ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Mais il est bien là le souci, c'est que j'y ai pensé à mettre un alert où un document.write("blabla")... Mais....rien du tout !!

    Je cherche...

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par polothentik Voir le message
    Mais il est bien là le souci, c'est que j'y ai pensé à mettre un alert où un document.write("blabla")... Mais....rien du tout !!
    Alors c'est que ton code JS a planté avant l'appel (peut être au chargement de la page).
    Un message d'erreur ?
    Sont ils activés ?
    Les autres codes JS continuent à fonctionner ?

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Si je place un document.write dans la partie <body> de la page (les fonctions en javascript étant dans le <head>), il s'affiche parfaitement bien!

    Pas de message d'erreur lors du chargement de la page ou après le button click (J'ai l'impression qu'il ne prend pas en compte mon onClick (onClick ou onclick ??))

    Merci

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par polothentik Voir le message
    Pas de message d'erreur lors du chargement de la page ou après le button click (J'ai l'impression qu'il ne prend pas en compte mon onClick (onClick ou onclick ??))
    onclick !!
    Contrairement à une vieille habitude, tout doit être en minuscule en ... HTML

    Un doute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="ValidForm(this.form)"
    ne fonctionnerait pas mieux ?

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    J'ai apporté toute les corrections que tu m'as précisées précédemment :

    Code formulaire :

    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
    <form name="form" action="" method="post">
    	<div class="AttachedForm"> Ajout d'un deplacement dans la base de donnees </div>
    		<div class="PositionForm">
    			<table>
    			<tr>
    			<td class="LabelForm"> <label for="nom_deplacement">Type de deplacement</label>: </td>
    			<td class="TextForm"> <input type="text" id="nom_deplacement" name="nom_deplacement"/></td>
    			<td class="AdviceForm"><div id="txtHint"></div></td>
    			</tr>
    			</table>
    		</div>
    	<div>
    			<input type="button" value="Valider" onclick="ValidForm(this.form)"/>
    			<input type="reset" value="Retablir"/>
    	</div>
    </form>

    Code complet :

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html>
    <head>
        <title>Acquisition de donnees </title>
    	<link rel="stylesheet" type="text/css" href="style2.css" />
    	<script type="text/javascript">
     
    // Fonction d'insertion des données dans la base données
    	function ValidForm(form){
    	alert('Et oui !');
    	if (document.getElementById('nom_deplacement').value == ""){
    		document.getElementById('txtHint').innerHTML='Ce champ est obligatoire !';
      		return false;
      		}
      	//return true;
     
     
    	var xmlHttp=GetXmlHttpObject();
    	xmlHttp.open('post','RequestASP.asp',true);
    	xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xmlHttp.onreadystatechange = stateChanged;
    	xmlHttp.send('nom_deplacement='getElementById('nom_deplacement').value);
    		}
    	}
     
    // Fonction de test du BROWSER
     
    function GetXmlHttpObject() {
    	var xmlHttp = null;
    	try { 
    		xmlHttp = new XMLHttpRequest(); }		// Firefox, Opera 8.0+, Safari
    	catch (e) {
    		try {
    	    	xmlHttp = new ActiveXObject('Msxml2.XMLHTTP'); }		// Internet Explorer 6.0+
    	  catch (e) {
    	    try {
    	      	xmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); }		// Internet Explorer 5.5+
    	      catch (e) {
    	      	alert('Votre Explorateur Internet ne supporte pas la technologie AJAX !'); }
    	    }
    	  }
    	return xmlHttp;
    	}
     
    // Fonction de test du transfert des données au serveur
     
    function stateChanged() { 
    	if (xmlHttp.readyState==4 && xmlHttp.status == 200) {
    		document.getElementById('txtHint').innerHTML = xmlHttp.responseText;
    		}
    	}
     
    </script>
     
    </head>
     
    <body>
    <div id="content">
    <form name="form" action="" method="post">
    	<div class="AttachedForm"> Ajout d'un deplacement dans la base de donnees </div>
    		<div class="PositionForm">
    			<table>
    			<tr>
    			<td class="LabelForm"> <label for="nom_deplacement">Type de deplacement</label>: </td>
    			<td class="TextForm"> <input type="text" id="nom_deplacement" name="nom_deplacement"/></td>
    			<td class="AdviceForm"><div id="txtHint"></div></td>
    			</tr>
    			</table>
    		</div>
    	<div>
    			<input type="button" value="Valider" onclick="ValidForm(this.form)"/>
    			<input type="reset" value="Retablir"/>
    	</div>
    </form>
     
     
    </div>
     
    </body>
    </html>
    Je me permet de faire un up de ma question :"Y a t-il un entête spécifique à déclarer pour que le navigateur (IE pour ma part) puisse lire le javascript ?"
    Je dirais que non vu que j'arrive à écrire du javascript dans la apge dans les balise <script>..

    Na gros Bobo les neurones

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par polothentik Voir le message
    "Y a t-il un entête spécifique à déclarer pour que le navigateur (IE pour ma part) puisse lire le javascript ?"
    Je dirais que non vu que j'arrive à écrire du javascript dans la apge dans les balise <script>..
    Ah oui, pardon

    Le doctype n'intervient directement que sur le code HTML (et css ?). Par contre, si ton html n'est pas considéré comme valide, du coup ça peut effectivement "influencer" le JS ...

    Le code JS doit être commenté en stric, d'ailleurs je crois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript">
    <!--
    code JS
    -->
    </script>
    Tu as essayé en transitionnal ?

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    J'ai essayé en strict <!-- et //-->
    Si transitional consiste à rajouter language="javascript", j'ai donc aussi essayé

    En me promenant sur Internet, j'ai vu pas mal de post sur le fait qu'il vaut mieux mettre le javascript dans un fichier annexe : ce que j'ai fait !

    Je maintient que mon gros souci vient du onclick...

    Quel DocType utilises-tu habituellement ?? Peux-tu me le poster stp ??

    Merci

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par polothentik Voir le message
    J'ai essayé en strict <!-- et //-->
    Si transitional consiste à rajouter language="javascript", j'ai donc aussi essayé
    Non, ça consiste surtout à changer l'en-tête DOCTYPE, et à respecter les normes de développement associées (cf. le W3C et son Validator)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut Appel de fonction javascript impossible !?!?!
    Salut,

    Tout d'abord, un grand merci à tous ceux qui jusqu'à lors se sont penchés sur mon problème !

    Un petit récapitulatif : L'objectif est de remplir un formulaire contenu dans une page "ajouter_deplacement.asp", à la validation d'un <input> de type "button" et via une commande "onclick", une fonction de validation du formulaire est appellée. Celle-ci est contenu dans un fichier "test.js".

    Dans un 1er temps, cette fonction test si le champ "text" est rempli et renvoye un message d'erreur via une cible nommée "txtHint" s'il ne l'est pas.
    Dans un 2nd temps, cette fonction fait appel à une fonction permettant de tester le "BROWSER" de l'utilisateur puis envoye une requête au serveur de type "POST". Execution du code asp contenu dans le fichier "Request.asp" chargé d'insérer le contenu du champ "txt" dans une base de données.

    Le problème survient lors de l'appel de la fonction de validation du formulaire "ValidForm(this.form)". Une commande "alert" a été rajoutée dans la fonction ValidForm (fichier "test.js") avant toutes condition mais ce message ne s'affiche pas !!!!

    Une commande javascript dans la page "ajouter_deplacement.asp" s'effectue parfaitement !!
    Le doctype de cette même page est de type transitionnal pour XHTML 1.0 !!
    Aucun message d'erreur ne s'affiche, seulement aucune execution de la fonction !!
    Il n'y a pas de doctype dans les fichiers "test.js" et "RequestASP.asp" (faut-il en mettre ?)

    Quelqu'un pourrait-il m'aider à résoudre ce problème d'appel de la fonction "ValidForm" ? Si queuqu'un arrivait à faire fonctionner le lein entre les fichiers "ajouter_deplacement.asp" et "test.js" chez lui, je serais rassuré !! Je ne comprend pas d'où vient l'erreur !

    Merci d'avance pour la lecture de ce post tout à fait indigeste !!

    fichier "ajouter_deplacement.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html>
    <head>
        <title>Acquisition de données </title>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    	<link rel="stylesheet" type="text/css" href="style2.css" />
    	<script src="test.js" type="text/javascript">
    	</script>
    </head>
     
    <body>
    <div id="content">
    <form name="form" action="" method="post">
    	<div class="AttachedForm"> Ajout d'un déplacement dans la base de données </div>
    		<div class="PositionForm">
    			<table>
    			<tr>
    			<td class="LabelForm"> <label for="nom_deplacement">Type de déplacement</label>: </td>
    			<td class="TextForm"> <input type="text" id="nom_deplacement" name="nom_deplacement"/> </td>
    			<td class="AdviceForm"> <div id="txtHint"></div> </td>
    			</tr>
    			</table>
    		</div>
    	<div>
    			<input type="button" value="Valider" onclick="ValidForm(this.form)"/>
    			<input type="reset" value="Rétablir"/>
    			<script type="text/javascript">
    			<!--
    			alert("test");
    			//-->
    			</script>
    	</div>
    </form>
     
     
    </div>
     
    </body>
    </html>

    fichier "test.js"

    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
     
    // Fonction d'insertion des données dans la base données
    	function ValidForm(form) {
    	alert('Ca marche enfin !');
    	if (document.getElementById('nom_deplacement').value == "") {
    		document.getElementById('txtHint').innerHTML='Ce champ est obligatoire !';
      		return false;
      		}
      	//return true;
     
    	else {
    	var xhr = GetXmlHttpObject();
    	xhr.open('post','RequestASP.asp',true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.onreadystatechange = stateChanged;
    	xhr.send('nom_deplacement='getElementById('nom_deplacement').value);
    		}
    	}
     
    // Fonction de test du BROWSER
     
    function GetXmlHttpObject() {
    	var xhr = null;
    	try { 
    		xhr = new XMLHttpRequest(); }		// Firefox, Opera 8.0+, Safari
    	catch (e) {
    		try {
    	    	xhr = new ActiveXObject('Msxml2.XMLHTTP'); }		// Internet Explorer 6.0+
    	  catch (e) {
    	    try {
    	      	xhr = new ActiveXObject('Microsoft.XMLHTTP'); }		// Internet Explorer 5.5+
    	      catch (e) {
    	      	alert('Votre Explorateur Internet ne supporte pas la technologie AJAX !'); }
    	    }
    	  }
    	return xhr;
    	}
     
    // Fonction de test du transfert des données au serveur
     
    function stateChanged() { 
    	if (xhr.readyState==4 && xhr.status == 200) {
    		document.getElementById('txtHint').innerHTML = xhr.responseText;
    		}
    	}

    fichier "RequestASP.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
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <%option explicit %>
     
    <%
    ' Regénération de la page (empêche l'utilisation du cache serveur)
    response.expires = -1
    response.AddHeader "Pragma", "no-cache"
    response.AddHeader "cache-control", "no-store"
     
    Dim g_oConn
    Dim g_oRs
    Dim TempId
    Dim frm = Request.form
     
        Connect
        InsertData(Request.form) 
        Disconnect
     
     
     
    Sub Connect
        Set g_oConn = Server.CreateObject("ADODB.Connection")
        g_oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & Server.MapPath("base_test.mdb") & ";"
            On error resume next
            g_oConn.Open
            if g_oConn.State = 0 then
                Response.Write "La connexion à la base """ & Server.MapPath("base_test.mdb") & """ a échoué <br/>"
                Response.End        	
            End if
        On error goto 0
    End Sub
     
     
    Sub Disconnect
        If g_oConn.State = 1 then g_oConn.Close
        Set g_oConn = Nothing
    End Sub
     
     
    Sub InsertData(frm)
        Dim sql
     
    	    Set g_oRs = Server.CreateObject("ADODB.Recordset")
    	    sql = "INSERT INTO deplacements (nom_deplacement) VALUES ('" & frm("nom_deplacement") & "');"
        	g_oRs.Open sql, g_oConn, 3, 3
     
    		response.write("Le deplacement a été ajouté à la base !")
    End Sub
     
    Sub AfficheForm
        %>

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Salut,

    Je me permet de faire un petit UP de mon problème vu que je suis tout bloqué....

    Merci d'avance pour un petit test de ma programmation !!

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Salut,

    J'ai réalisé plusieurs tests notamment celui de faire appel à la fonction GetXmlHttpObject() et d'essayer d'afficher le contenu de la variable xhr par un document.write(xhr) ...

    Il m'affiche le mot "undefined" !!

    Si quelqu'un à une explication ou même la solution ...

    Merci

    la page d'affichage "ajouter_deplacement.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html>
    <head>
        <title>Acquisition de données </title>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<link rel="stylesheet" type="text/css" href="style_ajouter_deplacement.css" />
    	<script type="text/javascript" src="JavaScript/test.js"></script>
    </head>
     
    <body>
    <div id="content">
    <p> Ajout d'un déplacement dans la base de données :</p>
    <form name="form" action="" method="post" class="PositionForm">
    	<table>
    		<tr>
    		<td class="LabelForm"> <label for="nom_deplacement">Type de déplacement</label>: </td>
    		<td class="TextForm"> <input type="text" id="nom_deplacement" name="nom_deplacement"/> </td>
    		<td class="AdviceForm"> <div id="txtHint"></div> </td>
    		</tr>
    	</table>
    	<div>
    		<input type="button" value="Valider" onclick="validForm(this.form)"/>
    		<input type="reset" value="Rétablir"/>
    	</div>
    </form>
     
     
    </div>
     
    </body>
    </html>

    La page contenant les fonction JavaScript pour le test :

    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
     
    /* Fonction de validation du formulaire */
     
    function validForm(form) {
    	if (document.getElementById('nom_deplacement').value == "") {
    		document.getElementById('txtHint').innerHTML='Ce champ est obligatoire !';
      		return false;
      		}  	
    	else {
    		var xhr = GetXmlHttpObject();
    		//xhr.open('post','RequestASP.asp',true);
    		//xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		//xhr.onreadystatechange = stateChanged;
    		//xhr.send('nom_deplacement='getElementById('nom_deplacement').value);
    		return document.write(xhr);
    		}
    	}
     
     
     
    /* Fonction de test du BROWSER */
     
    function GetXmlHttpObject() {
    	var xhr = null;
    	try { 
    		xhr = new XMLHttpRequest();
    		}		// Firefox, Opera 8.0+, Safari
    	catch (e) {
    		try {
    	    	xhr = new ActiveXObject('Msxml2.XMLHTTP');
    	    	}		// Internet Explorer 6.0+
    		catch (e) {
    		    try {
    		      	xhr = new ActiveXObject('Microsoft.XMLHTTP');
    		      	}		// Internet Explorer 5.5+
    		    catch (e) {
    	      		alert('Votre Explorateur Internet ne supporte pas la technologie AJAX !');
    	      		}
    	    	}
    	  	}
    	return xhr;
    	}
     
     
     
    /* Fonction de test du transfert des données au serveur */
     
    function stateChanged() { 
    	if (xhr.readyState == 4 && xhr.status == 200) {
    		document.getElementById('txtHint').innerHTML = xhr.responseText;
    		}
    	}

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Salut,

    Je poursuis dans mon monologue ! Je vais finir par le resoudre par moi même ce problème... héhé !

    La situation s'est grandement améliorée... disons que j'ai pas mal débuggé le fichier "test.js". Ca ne marche toujours pas vous l'aurez bien compris, j'ai donc 2 questions !

    Après une série de test en bataille, je suis sûr de ma fonction validForm (la partie if fonctionne, l'ordre d'appel des fonctions dans la partie else est le même que tout ce que j'ai pu trouver sur Internet et les fonctions sont conformes à la méthode POST)


    1ere question : Je ne comprend pas la formulation des données que j'envoie... Cette formulation est-elle formalisée ?? Comment vais-je devoir traiter les données que j'envoie dans le fichier "RequestASP.asp" ?? C'est principalement le 'nom_deplacement=' qui me perturbe car pour moi il ne sert à rien !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var data = 'nom_deplacement=' + getElementById('nom_deplacement').value;
    [...]
    xhr.send(data);
    2ème question : Que doit contenir (ou comment doit être structuré) mon fichier "RequestASP.asp" pour recevoir les données que je lui envoie sous la variable data?? L'objectif final est d'entrer des données dans une Base De Données !

    Merci d'avance pour toute vos réponse

    fichier "test.js" updated :

    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
    function validForm(form) {
    	if (document.getElementById('nom_deplacement').value == "") {
    		document.getElementById('txtHint').innerHTML = 'Ce champ est obligatoire !';
      		return false;
      		}
    	else {
    		var xhr = GetXmlHttpObject();
    		xhr.onreadystatechange = reportStatus();											//Fonction de suivi de l'état de la requête
    		xhr.open('post','ajouter_deplacement.asp',true);									//'post' : méthode / '***' : URL absolue ou relative de la page XML / true : pour asynchrone
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');			//Fonction appartenant à la méthode POST
    		var data = 'nom_deplacement=' + document.getElementById('nom_deplacement').value;
    		xhr.send(data);
    		}
    	}
     
     
    // Fonction de test du BROWSER
     
    function GetXmlHttpObject() {
    	var xhr = null;
    	try { 
    		xhr = new XMLHttpRequest();		// Firefox, Opera 8.0+, Safari
    		}
    	catch (err) {
    		try {
    	    	xhr = new ActiveXObject('Msxml2.XMLHTTP');		// Internet Explorer 6.0+
    	    	//var test = "xhr IE6";
    	    	//document.getElementById('txtHint').innerHTML = test.responseText;
    	    	}
    	  	catch (err) {
    	  		try {
    	      		xhr = new ActiveXObject('Microsoft.XMLHTTP');		// Internet Explorer 5.5+
    	      		}
    	      	catch (err) {
    	      		alert('Votre Explorateur Internet ne supporte pas la technologie AJAX !');
    	      		}
    	    	}
    		}
    	return xhr;
    	}
     
     
    // Fonction de test du transfert des données au serveur
     
    function reportStatus() { 
    	if (xhr.readyState == 4 && xhr.status == 200) {									//readyState --> 0 : uninitialized / 1 : Open / 2 : Sent / 3 : Receiving / 4 : Loaded
    		document.getElementById('txtHint').innerHTML = xhr.responseText;
    		}
    	}

    fichier ajouter_deplacement.asp" (inchangé) :

    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
    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html>
    <head>
        <title>Acquisition de données </title>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<link rel="stylesheet" type="text/css" href="style_ajouter_deplacement.css" />
    	<script type="text/javascript" src="test.js"></script>
    </head>
     
    <body>
    <div id="content">
    <p> Ajout d'un déplacement dans la base de données :</p>
    <form name="form" action="" method="post" class="PositionForm">
    	<table>
    		<tr>
    		<td class="LabelForm"> <label for="nom_deplacement">Type de déplacement</label>: </td>
    		<td class="TextForm"> <input type="text" id="nom_deplacement" name="nom_deplacement"/> </td>
    		<td class="AdviceForm"> <div id="txtHint"></div> </td>
    		</tr>
    	</table>
    	<div>	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    		<input type="button" value="Valider" onclick="validForm(this.form)"/>
    		<input type="reset" value="Rétablir"/>
    	</div>
    </form>
     
     
    </div>
     
    </body>
    </html>
    fichier "Request.ASP" (sans doute à modifier) :

    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
    <%option explicit %>
     
    <%
    ' Regénération de la page (empêche l'utilisation du cache serveur)
    response.expires = -1
    response.AddHeader "Pragma", "no-cache"
    response.AddHeader "cache-control", "no-store"
     
    Dim g_oConn
    Dim g_oRs
    Dim TempId
    Dim frm = Request.form
     
        Connect
        InsertData(Request.form) 
        Disconnect
     
     
     
    Sub Connect
        Set g_oConn = Server.CreateObject("ADODB.Connection")
        g_oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & Server.MapPath("base_test.mdb") & ";"
            On error resume next
            g_oConn.Open
            if g_oConn.State = 0 then
                Response.Write "La connexion à la base """ & Server.MapPath("base_test.mdb") & """ a échoué <br/>"
                Response.End        	
            End if
        On error goto 0
    End Sub
     
     
    Sub Disconnect
        If g_oConn.State = 1 then g_oConn.Close
        Set g_oConn = Nothing
    End Sub
     
     
    Sub InsertData(frm)
        Dim sql
     
    	    Set g_oRs = Server.CreateObject("ADODB.Recordset")
    	    sql = "INSERT INTO deplacements (nom_deplacement) VALUES ('" & frm("nom_deplacement") & "');"
        	g_oRs.Open sql, g_oConn, 3, 3
     
    		response.write("Le deplacement a été ajouté à la base !")
    End Sub
     
    Sub AfficheForm
        %>

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Salut,

    Est-ce qu'il vaut mieux programmer le fichier de connexion et d'insertion de données dans la base de données access en ASP ou PHP ?

    Le PHP semble plus facile à manier (et on le rencontre plus souvent que l'ASP sur le web dans les exmples)

    Help !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. insertion des données checkbox dans une base de données
    Par WIN76 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/01/2017, 17h28
  2. Réponses: 17
    Dernier message: 11/10/2013, 09h57
  3. Insertion des données Excel dans une base SQL-Server
    Par cedy-kassy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 15/03/2012, 11h11
  4. [MySQL] insertion de données csv dans une base de données
    Par angelina88 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 12/12/2011, 00h57
  5. Insérer des données Excel dans une base Access ?
    Par MaTHieU_ dans le forum Access
    Réponses: 3
    Dernier message: 22/06/2005, 15h11

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