[C/C++] Post arrays via libcurl

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von t-low, 24. Mai 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 24. Mai 2010
    Post arrays via libcurl

    Hi ho,
    also ich habe folgendes problem: ich habe eine knotenstruktur, die mehrere variablen enthält:
    Code:
    struct knoten {
    int var1, var2;
    knoten * nachfolger;
    }
    
    dabei zeigt nachfolger immer auf das nächste element..

    nun nehmen wir an, ich habe viele dieser strukturen angelegt, automatisch; ich will diese jetzt in EINER anfrage an einen server senden, per curl, an eine .php schnittstelle.

    Code:
    //p wird zuvor als zeiger auf das erste element gesetzt, folgende schleife liest alle einträge aus
    while (NULL != p)
     {
     // an dieser stelle sollten sie in ein post array geschrieben werden, das man mit curl übermitteln kann
     p = p->nachfolger;
     }
    
    
    ich will danach auf dem server ein array erhalten, dass ich mit php wie folgt verarbeiten kann: $_POST[$i]['var1']; und so weiter
    ist das ganze zufällig mit curl_formadd möglich? wenn ja, wie?
     
  2. 24. Mai 2010
    AW: Post arrays via libcurl

    das sollte mit dem struct "curl_forms" gehen. damit kannst du einen array mit inhalten übergeben

    siehe: libcurl - curl_formadd()
     
  3. 25. Mai 2010
    AW: Post arrays via libcurl

    das hatte ich mir neulich schon mal angekuckt, danke soweit..
    ich ahtte nur die argumente der struct nicht richtig verstanden. in dem beispiel werden ja für option konstanten übergeben. gibt man damit den arraykey an? dann dürfte der ja kein string sein, oder?
    das heißt, ich würde das wie folgt übergeben:
    Code:
    form[0].option = 1;
    form[0].value = var1;
    
    und dann mit formadd übergeben
    und so aufrufen $_POST['nameDenIchUebergebenHab'][1];
    oder ist option nicht der key?
     
  4. 26. Mai 2010
    AW: Post arrays via libcurl

    den namen der variable (array) übergibst du im funktionsaufruf curl_formadd()
     
  5. 26. Mai 2010
    AW: Post arrays via libcurl

    also ich schaff das immer noch nich, mehrere daten zu übergeben, geschweige denn im array.
    ich kann zwar wie folgt EINE variale übergeben, aber weiter komm ich nich:
    Code:
    struct curl_httppost* post = NULL;
    struct curl_httppost* last = NULL;
    
    struct curl_forms form[3];
    
    form[0].option = CURLFORM_COPYNAME;
    form[0].value = "name";
    form[1].option = CURLFORM_COPYCONTENTS;
    form[1].value = "inhalt";
    form[2].option = CURLFORM_END;
    curl_formadd(&post, &last, CURLFORM_ARRAY, form, CURLFORM_END);
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
    
    
    dann gibt ein aufruf $_POST['name'] das wort inhalt aus.

    aber sobald ich versuch, mehrere variablen zu übergeben, schlägt dieses fehl, keine ahnung, woran das liegt. an das übergeben von mehrdimensionalen arrays, wenn ich mehrer male die variable var1 hab : $_POST['var1'][0] bzw $_POST[0]['var1'] ist noch gar nicht zu denken..
    kann mir da jemand helfen?

    edit:

    mit folgendem code kann ich mehrere variablen registrieren, aber ich kriege immer noch nicht das gewünschte mehrdimensionale array; allerdings kann ich jetzt ja durch spielereinen mit den indexen mehrere variablen als array hinzufügen bsp var11 var12 etc...
    Code:
    struct curl_forms form[6];
    form[0].option = CURLFORM_COPYNAME;
    form[0].value = "name1";
    form[1].option = CURLFORM_COPYCONTENTS;
    form[1].value = "inhalt";
    form[2].option = CURLFORM_END;
    form[3].option = CURLFORM_COPYNAME;
    form[3].value = "name2";
    form[4].option = CURLFORM_COPYCONTENTS;
    form[4].value = "inhalt2";
    form[5].option = CURLFORM_END;
    
    curl_formadd(&post, &last, CURLFORM_ARRAY, form+3, CURLFORM_END);
    curl_formadd(&post, &last, CURLFORM_ARRAY, form, CURLFORM_END);
    
    wenn ich $_POST['name1'][0] ausgebe, gibt das php-script i aus, den ersten buchstaben.. also, wenn jemand ne arraylösung einfällt, wär ich immer noch dankbar...
     
  6. 27. Mai 2010
    AW: Post arrays via libcurl

    das ist ja auch falsch, hast du dir mal die doku angesehen?

    ich hoff mal das dir "form-arrays" bekannt sind, in html sieht das so aus:
    HTML:
    <form action="dahin.php" method="post">
     <input type="text" name="feld[]" value="inhalt1" />
     <input type="text" name="feld[]" value="inhalt2" />
    </form>
    dann hast du in php ein array namens "feld" mit zwei einträgen (0 und 1).
    PHP:
    print_r ( $_POST [ 'feld' ]);  // Array ( [0] => inhalt1 [1] => inhalt2 )
    so ein array kannst mit curl und dem struct "curl_forms" erzeugen:

    Code:
    struct curl_forms form[3];
    
    form[0].option = CURLFORM_COPYCONTENTS;
    form[0].value = "inhalt1"; /* der inhalt der variablen, NICHT der name! */
    form[1].option = CURLFORM_COPYCONTENTS;
    form[1].value = "inhalt2"; /* der inhalt der variablen, NICHT der name! */
    form[2].option = CURLFORM_END;
    
    curl_formadd(&post, &last, CURLFORM_COPYNAME, "feld", /* hier der NAME des feldes! */
     CURLFORM_ARRAY, form, CURLFORM_END);
    
    das ergebnis ist 1zu1 das selbe wie im html-beispiel.
     
  7. 30. Mai 2010
    AW: Post arrays via libcurl

    hmm. so ziemlich genau dein beispiel hat bei mir neulich nicht geklappt... keine ahnung, warum...

    ich hab das ganze jetzt auch gelöst, allerdings ein bisschen grobmotorisch, indem ich mir quasi ein zweidimensionales array selbstgebastelthab:
    bsp:
    Code:
    char index[5];
    int i= 0;
    sprintf(index, "var%i", i);
    
    
    wenn man dann i wachsen lässt und index immer als arrayindex angibt erhälz man eben $_POST['var0']; $_POST['var1']; etc

    vielleicht werd ich mir dein beispiel nochmal zu herzen nehmen und das ganze bei zeiten eleanter lösen.. vielen dank also.. ich denke, das thema hat sich erledigt, also :
    closed
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.