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 :

C en CGI : Récuperer les données GET


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 35
    Par défaut C en CGI : Récuperer les données GET
    Bonjour,
    Je souhaiterai récupérer les données GET d'un formulaire pour les utiliser en CGI avec un programme en C.

    Dans le cadre de mon application il n'y aura que 2 champ de type string.

    Je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cgi = getenv("QUERY_STRING");
    et ca me donne par exemple a=fichier.txt&b=123456 (123456 vu comme string) mais le probleme si j'utilise sscanf il me donne "fichier.txt&b=123456" pour le 1er argument et ne trouve pas de 2nd argument.

    J'ai essayé de faire un strchr et maintenant j'arrive a recupérer le 2nd argument mais impossible d'avoir le premier ! (du moins QUE le premier, sans le &b=123456)

    Pouvez-vous m'aider svp.

    Merci

  2. #2
    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 azertylr
    Je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cgi = getenv("QUERY_STRING");
    et ca me donne par exemple a=fichier.txt&b=123456 (123456 vu comme string) mais le probleme si j'utilise sscanf il me donne "fichier.txt&b=123456" pour le 1er argument et ne trouve pas de 2nd argument.

    J'ai essayé de faire un strchr et maintenant j'arrive a recupérer le 2nd argument mais impossible d'avoir le premier ! (du moins QUE le premier, sans le &b=123456)
    Montre ton code. On ne peut pas deviner comment tu utilises sscanf()...

    Ceci dit, je chercherais '=' avec strchr(), et j'appliquerais un strtol() sur la suite... Si tu veux les 2 paramètres, il faut utiliser strtok(), par exemple, ou mieux, strtok_r() (POSIX.1)

  3. #3
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 35
    Par défaut
    Ceci permet de récuperer la 2e chaine ca ne marche pas pour la premiere.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char *cgi;
    char *arg1;
    char *arg2;
     
    cgi = getenv("QUERY_STRING");
     
    arg2=strchr(cgi, '&');
    sscanf(arg2,"a=%s&b=%s",&arg1);
    arg2=strchr(arg2, '=')+1;
    Je vais essayer de faire quelque chose avec strtok

    Merci

  4. #4
    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 azertylr
    Ceci permet de récuperer la 2e chaine ca ne marche pas pour la premiere.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char *cgi;
    char *arg1;
    char *arg2;
     
    cgi = getenv("QUERY_STRING");
     
    arg2=strchr(cgi, '&');
    sscanf(arg2,"a=%s&b=%s",&arg1);
    arg2=strchr(arg2, '=')+1;
    Je vais essayer de faire quelque chose avec strtok

    Merci
    Si tu ne trouves pas :
    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
    #include <stdio.h>
    #include <string.h>
    
    int main (void)
    {
       char cgi[] = "a=fichier.txt&b=123456";
       char *p = strtok (cgi, "=&");
       char arg1[32];
       char arg2[32];
       int i = 1;
    
       while ((p = strtok (NULL, "=&")) != NULL)
       {
          i++;
          switch (i)
          {
          case 2:
             strcpy (arg1, p);
             break;
          case 4:
             strcpy (arg2, p);
             break;
          }
       }
       printf ("'%s' '%d'\n", arg1, arg2);
    
       return 0;
    }
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'fichier.txt' '2293520'
     
    Press ENTER to continue.

  5. #5
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 35
    Par défaut
    Merci beaucoup.

    Il y a quelque chose que je ne comprends pas : pourquoi case 2 et case 4 dans le switch ?

    Merci

  6. #6
    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 azertylr
    Il y a quelque chose que je ne comprends pas : pourquoi case 2 et case 4 dans le switch ?
    Parce que strtok() découpe la chaine en 4 morceaux (que j'ai numéroté 1 à 4) Seuls les morceaux 2 et 4 nous intéressent (si j'ai bien compris la spec...)

Discussions similaires

  1. Modifier et récuperer les données avec get et set
    Par rimbaut dans le forum Langage
    Réponses: 2
    Dernier message: 14/02/2010, 16h45
  2. Réponses: 1
    Dernier message: 24/04/2006, 01h55
  3. Récuperer les données d'un FlexGrid pour faire requete SQL
    Par Terminator dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/10/2005, 11h26
  4. Récupere les données d'un dataGrid
    Par Terminator dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/10/2005, 14h05
  5. [JTable] Comment récuperer les données d'un fichier texte ?
    Par Makunouchi dans le forum Composants
    Réponses: 2
    Dernier message: 03/05/2005, 16h37

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