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

C Discussion :

Textboxes et HTTPExecCmd pour récuperer des informations puis les stocker


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut Textboxes et HTTPExecCmd pour récuperer des informations puis les stocker
    Bonjour,


    Je cherche à créer sur une page web plusieurs textbox afin d'y rentrer des informations puis lorsque le bouton "envoyer" est cliqué, je voudrai récuperer ces informations pour les utiliser ensuite.

    j'ai crée un fichier cgi ( contenu dans le fichier zip attaché ci-joint )

    Ensuite j'ai créé ce code en C pour pouvoir récuperer le contenu des arguments puis les traiter avec HTTPExecCmd

    mais cela ne fonctionne pas ...


    Pourriez vous m'aider ou me proposer une autre méthode afin de capturer les infos entrées dans mes textbox lorsqu'on appui sur le bouton 'envoyer' .

    je me suis inspiré de la page 82 de cette note d'application, mais je ne parviens pas à faire fonctionner le code ( j'obtiens beaucoup d'erreurs que je ne sais pas résoudre )

    http://ww1.microchip.com/downloads/e...tes/00833c.pdf

    Merci beaucoup pour votre aide,



    ...

    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
     
    case CGI_CMD_TIMER:
     
    // Go through each parameters for current form command.
    // We are skipping form action name, so i starts at 1...
    for (i = 1; i < argc; i++ )
    {
    // Identify parameter.
    if ( argv[i][0] == ‘Hour’ ) // Is this Hour Setting?
    {
    // Next parameter is the Hour.
    set_hour = atoi(argv[++i]);
    }
    else if ( argv[i][0] == ‘Min’ ) // Is this Minutes Setting?
    set_minute = atoi(argv[++i]);
    else if ( argv[i][0] == ‘Sec’ ) // Is this Seconds Setting?
    set_second = atoi(argv[++i]);
    else if ( argv[i][0] == ‘Out’ ) // Is this Output select Setting?
    set_second = atoi(argv[++i]);
    }
     
    // If another page is to be displayed as a result of this command, copy
    // its upper case name into argv[0]
     
    // Renvoi les données capturées dans le fichier SEETIMER.cgi
     
    memcpypgm2ram((void*)argv[0], (ROM void*)SEETIMER_PAGE, SEETIMER_PAGE_LEN);
     
     
    break;
    Fichiers attachés Fichiers attachés

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Ton fichier CGI n'est pas valide :
    Un fichier CGI est en fait un petit programme, souvent écrit en C qui va être appelé par le serveur http quand l'utilisateur cliquera sur le bouton qui appelle la méthode post.

    Exemple minimal :
    La page html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <html>
        <body>
            <form method=POST action=hello.cgi>
                <input type=SUBMIT value=Lancer>
            </form>
        </body>
    </html>
    L'exécutable hello.cgi doit se trouver dans le même répertoire que la page html. Cet exécutable sera lancé par le serveur qui renverra la sortie standard du programme.

    Un peu de doc sur le CGI : http://nospam.chez.com/cgi.html

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    J'ai écrit mon CGI en m'inspirant de la doc d'application Microchip.
    Y aurait-il une erreur ?
    Celle ci utilise <FORM METHOD=GET action=>

    Actuellement le code qui doit traiter les données envoyées par le CGI me retourne pleins d'erreurs :

    Error [1128] compatible scalar operands required for comparison

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( argv[i][0] == ‘Hour’ ) // Is this Hour Setting?

    Error [1153] cannot assign array type objects
    Error [1102] cannot assign to 'const' modified object
    Error [1131] type mismatch in assignment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_hour = atoi(argv[++i]);
    Error [1128] compatible scalar operands required for comparison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else if ( argv[i][0] == ‘Min’ ) // Is this Minutes Setting?
    Error [1153] cannot assign array type objects
    Error [1102] cannot assign to 'const' modified object
    Error [1131] type mismatch in assignment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_minute = atoi(argv[++i]);

    Pourriez vous m'aider à les résoudre ?
    je ne suis pas à l'aise avec cette fonctionnalité.

    Merci à vous,

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Error [1128] compatible scalar operands required for comparison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( argv[i][0] == ‘Hour’ ) // Is this Hour Setting?
    Tu compares des choux et des caisses de fanes de carottes :

    Une chaine de caractères s'écrit "chaine" et non 'chaine'.
    Deux chaines de caractères se comparent par str[n]cmp.

    Error [1153] cannot assign array type objects
    Error [1102] cannot assign to 'const' modified object
    Error [1131] type mismatch in assignment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_hour = atoi(argv[++i]);
    De quel type est set_hour ?

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    j'ai défini set_hour ainsi :

    Je suis un peu perdu

    Pourriez vous me donner un petit exemple de cgi associé un code C qui utilise HTTPExecCmd , mon but est d'entrer 2 ou données dans des textboxes et récuperer le contenu de celles ci dans le code en C pour ensuite les exploiter.

    sur le site de mabu à donné les exemples de codes ne sont plus disponibles .

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par lcoulon Voir le message
    j'ai défini set_hour ainsi :
    Supposons qu'argv contienne : {"power.cgi", "Hour", "15", "Min", "45"}...
    Tu pourras écrire :
    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
     
    char * set_hour = NULL;
    char * set_min = NULL;
    size_t i;
    for(i = 1; i < argc; ++i) {
        if(0 == strcmp("Hour", argv[i])) {
            set_hour = strdup(argv[i+1]);
            ++i;
        }
        if(0 == strcmp("Min", argv[i])) {
            set_min = strdup(argv[i+1]);
            ++i;
        }
    }
    /* Ici, set_min contient "45\0"n set_hour "15\0" */
     
    /* ... */
     
    free(set_min);
    free(set_hour);
    Sinon, avant d'essayer de faire des choses compliquées avant ton programme cgi, arrives tu à lui faire afficher un simple hello world ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    int main(void)
    {
        printf("Content-Type: text/html\r\n\r\n");
        printf("<html> <body>\n");
        printf("Hello World\n");
        printf("</body></html>\n");
        return 0;
    }
    Une fois que tu auras fait ça, la suite sera plus facile.

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    J'ai intégré votre example de code dans la structure HTTPExecCmd :

    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
    void HTTPExecCmd(BYTE** argv, BYTE argc)
    {
        BYTE command, var;
     
        // Design your pages such that they contain command code as a one
        // character numerical value.
        // Being a one character numerical value greatly simplifies the job
        command = argv[0][0] - '0';
     
        // Find out the cgi file name and interpret parameters accordingly
     
    	 switch(command)
        {
     
    case CGI_CMD_TIMER:
     
    for (i = 1; i < argc; i++ )
    {
     
    if(0 == strcmp("Hour", argv[i])) {
            set_hour = strdup(argv[i+1]);
            ++i;
        }
        if(0 == strcmp("Min", argv[i])) {
            set_min = strdup(argv[i+1]);
            ++i;
        }
    }
    memcpypgm2ram((void*)argv[0], (ROM void*)SEETIMER_PAGE, SEETIMER_PAGE_LEN);
    break;
    je rencontre les erreurs suivantes :

    Warning [2066] type qualifier mismatch in assignment
    Warning [2058] call of function without prototype
    Error [1131] type mismatch in assignment

    sur cette ligne ou celle qui la précède :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(0 == strcmp("Hour", argv[i])) {

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par lcoulon Voir le message
    J'ai intégré votre example de code dans la structure HTTPExecCmd :

    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
    void HTTPExecCmd(BYTE** argv, BYTE argc)
    {
        BYTE command, var;
     
        // Design your pages such that they contain command code as a one
        // character numerical value.
        // Being a one character numerical value greatly simplifies the job
        command = argv[0][0] - '0';
     
        // Find out the cgi file name and interpret parameters accordingly
     
    	 switch(command)
        {
     
    case CGI_CMD_TIMER:
     
    for (i = 1; i < argc; i++ )
    {
     
    if(0 == strcmp("Hour", argv[i])) {
            set_hour = strdup(argv[i+1]);
            ++i;
        }
        if(0 == strcmp("Min", argv[i])) {
            set_min = strdup(argv[i+1]);
            ++i;
        }
    }
    memcpypgm2ram((void*)argv[0], (ROM void*)SEETIMER_PAGE, SEETIMER_PAGE_LEN);
    break;
    je rencontre les erreurs suivantes :

    Warning [2066] type qualifier mismatch in assignment
    Warning [2058] call of function without prototype
    Error [1131] type mismatch in assignment

    sur cette ligne ou celle qui la précède :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(0 == strcmp("Hour", argv[i])) {
    As-tu inclus <string.h> ? Il faut cesser de coder au hasard. Le langage C a des règles bien précises qui ne s'inventent pas et qu'il faut apprendre.

    Il y a des références de tutoriels sur ce site et sur le mien.

    D'autre part, attention, la technique du CGI est obsolète. La plupart des serveurs la refusent pour des questions de stabilité et de sécurité. Envisager plutôt une solution à base de PhP. Dans ce cas, le langage C n'est pas utilisé.

  9. #9
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,

    LCoulon oublie de dire qu'il programme pour un µ-controlleur PIC18.


  10. #10
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    Merci Emmanuel,

    <string.h> est bien déclaré dans le programme.

    Jowo à raison en effet,

    Je suis obligé d'utiliser les cgi car le petit serveur web à base de Pic 18F xxxx sur lequel je travaille n'accepte que cela.

  11. #11
    Invité(e)
    Invité(e)
    Par défaut
    Je vais poser une question bête, mais ton compilateur est-il capable de comprendre que BYTE et char sont la même chose ?

    Autre possibilité : strcmp est il bien déclaré dans <string.h> ?
    J'ai déjà vu ça : retirer des fonctions de la bibliothèque standard pour l'alléger.

    À voir dans la doc du pic....

  12. #12
    Invité(e)
    Invité(e)
    Par défaut
    Si strcmp est manquante, il est assez facile de la recoder :
    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
    /*
     * strcmp_B : strcmp mais pour des BYTE.
     * s1 et s2 doivent être des chaines valides : 
            non nulles et se terminant par '\0'.
     * retourne 0 si les chaines sont identiques. 
     */
    int strcmp_B(const BYTE*s1, const BYTE*s2)
    {
        int ret = 0;
        while (0 != *s1 && 0 != *s2 && 0 == ret) {
            ret = (int)(*s1 - *s2);
            ++s1, ++s2;
        }
        if(0 == ret) {
            ret = (int)(*s1 - *s2);
        }
        return ret;
    }

  13. #13
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    oui, byte et char sont bien compris par le compilateur

    et strcmp semble l'être aussi ( vu dans string.h )

    si j'enlève les " " de Hour, le Warning disparait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( strcmp(Hour, argv[i]) == 0)

    Par contre, pour strdup, ce n'est pas certain que cette fonction soit prise en charge par le compilateur, car je ne la trouve pas dans string.h

    Aurait-il une façon de contourner ce problème en utilisant un autre code pour la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_hour = strdup(argv[i+1]);
    --> car pour le moment j'ai :
    Warning [2058] call of function without prototype
    Error [1131] type mismatch in assignment
    Fichiers attachés Fichiers attachés

  14. #14
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par lcoulon Voir le message
    si j'enlève les " " de Hour, le Warning disparait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( strcmp(Hour, argv[i]) == 0)
    De quel type est Hour ? que contient-il ?


    Citation Envoyé par lcoulon Voir le message
    Par contre, pour strdup, ce n'est pas certain que cette fonction soit prise en charge par le compilateur, car je ne la trouve pas dans string.h

    Aurait-il une façon de contourner ce problème en utilisant un autre code pour la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_hour = strdup(argv[i+1]);
    strdup est une façon rapide de dupliquer une chaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char * set_hour = NULL;
    set_hour = strdup("toto");
    peut être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char * set_hour = NULL;
    set_hour = malloc(strlen("toto" + 1));
    if(NULL != set_hour) {
        strcpy(set_hour, "toto");
    }

  15. #15
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    @mabu
    lcoulon travaille dans un environnement µ-controlleur...

    Donc la gestion de l'espace mémoire est différent que celle d'un environnemet "normal".

    Par exemple:
    -pas de possibilité d'allocation dynamique de la mémoire
    -séparation mémoire entre ram et rom (les constantes sont placées en rom)

  16. #16
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par jowo Voir le message
    @mabu
    lcoulon travaille dans un environnement µ-controlleur...

    Donc la gestion de l'espace mémoire est différent que celle d'un environnemet "normal".

    Par exemple:
    -pas de possibilité d'allocation dynamique de la mémoire
    -séparation mémoire entre ram et rom (les constantes sont placées en rom)
    Je suis parti sur des allocation dynamiques après avoir vu Dans un set_hour défini comme ça, supposait qu'on voulait y stocker l'heure sous forme de chaine, mais en oubliant le \0 final.

    L'allocation dynamique permet -si bien utilisée- d'éviter des dépassement de tableau prévisibles si on utilise un set_hour trop court.

  17. #17
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    j'ai lu qu'il était possible d'utiliser strdup même si cette fonction n'est pas disponible dans string.h en déclarant un prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* strdup(char* buf);
    cependant je n'est pas réussi à l'appliquer à mon code car je continu à recevoir des erreurs.


    Comme je ne ne parviens dans cette voie, j'ai également continué à chercher sur l'exemple de note d'application des Pic Microchip et j'ai écrit cela :

    je déclare les set_hour, set_minute, set_second et set_out avec int

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BYTE i;
     
    int set_hour;
    int set_minute;
    int set_second;
    int set_out;
     
    char * Hour = NULL;
    char * Min = NULL;
    char * Sec = NULL;
    char * Out = NULL;
    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
    case CGI_CMD_TIMER:
     
    // Go through each parameters for current form command.
    // We are skipping form action name, so i starts at 1...
    for (i = 1; i < argc; i++ )
    {
    // Identify parameter.
    if( strcmp(Hour, argv[i]) == 0)
    {
    // Next parameter is the Hour.
    set_hour = atoi(argv[++i]);
    }
    else if ( strcmp(Min, argv[i]) == 0)
    set_minute = atoi(argv[++i]);
     
    else if ( strcmp(Sec, argv[i]) == 0)
    set_second = atoi(argv[++i]);
     
    else if ( strcmp(Out, argv[i]) == 0)
    set_out = atoi(argv[++i]);
    }
     
    // If another page is to be displayed as a result of this command, copy
    // its upper case name into argv[0]
    //memcpypgm2ram( argv[0], SEETIMER_PAGE, SEETIMER_PAGE_LEN);
    memcpypgm2ram((void*)argv[0], (ROM void*)SEETIMER_PAGE, SEETIMER_PAGE_LEN);
    break;

    Le compilateur accepte ce code, mais il ne fonctionne pas avec mon fichier cgi.

    Je ne sais donc pas si mon code est incomplet ou si le pb vient de mon fichier cgi, pourriez vous me donner votre avis svp ?

  18. #18
    Invité(e)
    Invité(e)
    Par défaut
    Hour, Min, Sec et Out ne sont jamais remplis ?

    Teste avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char * Hour = "Hour";
    char * Min = "Min";
    char * Sec = "Sec";
    char * Out = "Out";
    ou mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char Hour[] = "Hour";
    char Min[] = "Min";
    char Sec[] = "Sec";
    char Out[] = "Out";

  19. #19
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    J'ai testé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char Hour[] = "Hour";
    char Min[] = "Min";
    char Sec[] = "Sec";
    char Out[] = "Out";
    J'ai inséré le fichier TIMER.cgi dans ma page web principale grace à un frame.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <iframe name="I1" src="TIMER.cgi" width="448" height="244">
    <form method=POST action=TIMER.cgi>
    </iframe>
    A présent, TIMER.cgi apparait bien dans index.htm.
    Cependant, lorsque je rempli les texboxes avec des valeurs et clique sur Envoyer, je reçois une erreur 404. ( fichier non trouvé )

    Le fichier TIMER.cgi se trouve pourtant bien dans le même répertoire que index.htm

    Donc pour le moment, je ne peux pas savoir si mon code en C et en html sont bien corrects, Hour, Min, Sec et Out ne se remplissent pas.
    Fichiers attachés Fichiers attachés

  20. #20
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    Bonjour,

    Je suis toujours bloqué sur mon problème de textboxes afin de stocker leur contenu dans des variables.

    J'ai trouvé un exemple venant de Microchip puisque c'est un code pour µC Pic.
    J'ai essayé de l'adapter mais les contenus des texboxes ne sont visiblement pas stockées dans les buffer correspondants : set_hour , set_min , set_sec ; sec_out.

    Peut etre verrez vous ou se trouve le pb ?
    Je pense que le soucis se trouve au niveau des atoi(argv) qui doivent logiquement transferer l'argument (contenu de la textbox) dans le buffer approprié.

    Les buffers sont déclarés avec int
    si je les déclare avec char, le compilateur retourne des erreurs.

    Ci joint mon code HTML :
    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
     
    <form action="7" method="GET">
       <table width="171" id="table2">
           <tr>
               <td width="88">Heure :</td>
               <td><input type="text" size="2" maxlength="2" name="F1"></td>
           </tr>
           <tr>
               <td width="88">Minute :</td>
               <td><input type="text" size="2" maxlength="2" name="F2"></td>
           </tr>
           <tr>
               <td width="88">Second :</td>
               <td><input type="text" size="2" maxlength="2" name="F3"></td>
           </tr>
           <tr>
               <td width="88"><font color="#0000FF">Sortie :</font></td>
               <td><input type="text" size="2" maxlength="1" name="F4"></td>
           </tr>
           <tr>
               <td width="88"><input type="submit">
               </td>
           </tr>
           <tr>
               <td width="88"><input type="reset">
               </td>
           </tr>
       </table>
    </form>
    Ci-joint mon code en C :

    déclaration préalables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    #define CGI_CMD_TIMER            (7)    // ACTION = n°7
     
    #define VAR_HOUR (0xF1)
    #define VAR_MIN (0xF2)
    #define VAR_SEC (0xF3)
    #define VAR_OUT (0xF4)
     
    int set_hour;
    int set_min;
    int set_sec;
    int set_out;
    ...
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    /*********************************************************************
    * Function: void HTTPExecCmd(BYTE** argv, BYTE argc)
    *
    * PreCondition: None
    *
    * Input: argv - List of arguments
    * argc - Argument count.
    *
    * Output: None
    *
    * Side Effects: None
    *
    * Overview: This function is a "callback" from HTTPServer
    * task. Whenever a remote node performs
    * interactive task on page that was served,
    * HTTPServer calls this functions with action
    * arguments info.
    * Main application should interpret this argument
    * and act accordingly.
    *
    * Following is the format of argv:
    * If HTTP action was : thank.htm?name=Joe&age=25
    * argv[0] => thank.htm
    * argv[1] => name
    * argv[2] => Joe
    * argv[3] => age
    * argv[4] => 25
    *
    * Use argv[0] as a command identifier and rests
    * of the items as command arguments.
    *
    * Note: THIS IS AN EXAMPLE CALLBACK.
    ********************************************************************/
    #if defined(STACK_USE_HTTP_SERVER)
     
     
    ROM char const SEETIMER_PAGE[] = "SEETIMER.CGI";
    // Copy string with NULL termination.
     
    #define SEETIMER_PAGE_LEN (sizeof(SEETIMER_PAGE))
    ROM char const CMD_UNKNOWN_PAGE[] = "INDEX.HTM";
    // Copy string with NULL termination.
    #define CMD_UNKNOWN_PAGE_LEN (sizeof(CMD_UNKNOWN_PAGE))
     
    void HTTPExecCmd(BYTE** argv, BYTE argc)
    {
    BYTE command;
    BYTE var;
    BYTE CurrentArg;
    WORD_VAL TmpWord;
    /*
    * Design your pages such that they contain command code
    * as a one character numerical value.
    * Being a one character numerical value greatly simplifies
    * the job.
    */
    command = argv[0][0] - '0';
    /*
    * Find out the cgi file name and interpret parameters
    * accordingly
    */
    switch(command)
    {
     
    case CGI_CMD_TIMER: // ACTION=7
    // Loop through all variables that we've been given
    CurrentArg = 1;
    while(argc > CurrentArg)
    {
    // Get the variable identifier (HTML "name"), and
    // increment to the variable's value
    TmpWord.byte.LB = argv[CurrentArg][0];
    TmpWord.byte.HB = argv[CurrentArg++][1];
    var = hexatob(TmpWord);
    // Make sure the variable's value exists
    if(CurrentArg >= argc)
    break;
    // Take action with this variable/value
    switch(var)
    {
    case VAR_HOUR:
    set_hour = atoi(argv[CurrentArg]);
    break;
     
    case VAR_MIN:
    set_min = atoi(argv[CurrentArg]);
    break;
     
    case VAR_SEC:
    set_sec = atoi(argv[CurrentArg]);
    break;
     
    case VAR_OUT:
    set_out = atoi(argv[CurrentArg]);
    break;
    }
     
    // Advance to the next variable (if present)
    CurrentArg++;
    }
    // Save any changes to non-volatile memory
    SaveAppConfig();
     
    // Return the same SEETIMER.CGI file as a result.
    memcpypgm2ram((void*)argv[0], (ROM void*)SEETIMER_PAGE, SEETIMER_PAGE_LEN);
    break;

Discussions similaires

  1. Script SNMP pour récupérer des information de la MIB
    Par patchiko dans le forum Développement
    Réponses: 4
    Dernier message: 23/05/2011, 18h31
  2. Réponses: 3
    Dernier message: 06/01/2007, 19h11
  3. Réponses: 8
    Dernier message: 13/07/2006, 01h17
  4. [VB6]Comment faire pour récuperer des donnée sur un mp3 ou wav ?
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 13/06/2006, 16h08
  5. Comment récuperer des informations d'un .swf (flash) ?
    Par diado dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 12/01/2004, 21h32

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