Toon posts:

[C++] CGI: Form (POST): Verzonden waarde inlezen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een programma geschreven, in c++, dat een formulier weergeefd. als er op de verzendknop gedrukt word, wil ik de verzonden waarden verwerken. Met de GET methode lukt dat wel. Hier is ook genoeg informatie over te vinden op het internet.

Maar het verzenden van wachtwoordinfo via GET vond ik niet zo'n flex idee. Daarom wou ik POST gebruiken. Dus ikke zoeken in MSDN, waar ze mij alleen willen verderhelpen als ik de plugins van IIS ga gebruiken. Tweede stap was heel voorspelbaar de GoT search... ookwel wat links, maar geeneen die echt over het maken van Formulierverwerkers gingen.

Op het internet was genoeg te vinden over CGI C++ applicaties die formulieren verwerkte, maar de merendeel van de links waren dood, of gaven niet werkende codes met niet-relevante informatie. De rest was alleen voor de GET methode bedoeld.

Daarom wou ik jullie vragen hoe ik het voor elkaar krijg om die gegevens in mijn C++ programma te krijgen. Ik hoef niet te weten hoe ze verwerkt hoeven worden, dat lukt mij wel. Maar ik weet echt niet hoe ik de gegevens, verzonden via POST, mijn programma in krijg.

Het formulier bestaat uit een tekstvak (User) een passwordvak (PassWord) een verzendknop (cmdSubmit) en een resetknop (cmdCancel)

Verwijderd

De POST informatie wordt naar de stdin van je cgi-app gestuurd. Meer informatie:
http://hoohoo.ncsa.uiuc.edu/cgi/forms.html.

(of zoek met google naar cgi+post+stdin).

[ Voor 6% gewijzigd door Verwijderd op 05-07-2003 15:46 ]


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Hmm... POST-variabelen kun je gewoon van de stdin inlezen...
CGI zorgt ervoor dat je stdin geen data van je keyboard leest (zoals 't normaal zou doen), maar de POST-data krijgt.

Misschien handig (vooral 't stukje "Reading the User's Form Input"):
http://www.jmarshall.com/easy/cgi/

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
POST-data wordt verstuurd in de body van een HTTP-request. Dat ziet er dus ongeveer zo uit:
code:
1
2
3
4
5
6
7
GET /url HTTP/1.0
HeaderX: abc
HeaderY: def
Host: www.hostname.com
Content-type: multipart/form-data
.
POST DATA KOMT HIER

Er zijn meerdere manieren om die post data te coderen. Default is (dacht ik) urlencoding, wat wil zeggen dat de gegevens die je normaliter in de URL krijgt, nu in de HTTP request body staan (bijvoorbeeld: "veld1=waarde1&veld2=waarde2"). Er zijn echter ook alternatieve coderingen, zoals (de meest gebruikte) multipart form-data.

Aangezien het decoderen van URL data je al gelukt was, ben je blijkbaar al bekend met de URL encoding. Details over MIME multipart/form-data kun je in RFC 2388 vinden.

Verwijderd

Topicstarter
Thanks allemaal, was al een tijdje an het rondzoeken. Zal het direct uiproberen.

Verwijderd

Topicstarter
Hij werkt :D

Verwijderd

Topicstarter
Weet iemand hoe ik een string naar CString moet converten... Andersom lukt wel, maar ik moet nu de waarde van een string toevoegen aan een CString

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 10-07 04:13

PommeFritz

...geen friet

• gebruik edit knopje
• Ai, MFC... umm werkt dit niet gewoon: CString totaal = bestaand + new CString( string ) ?

FireFox - neem het web in eigen hand


Verwijderd

Topicstarter
PommeFritz schreef op 07 July 2003 @ 01:24:
• gebruik edit knopje
• Ai, MFC... umm werkt dit niet gewoon: CString totaal = bestaand + new CString( string ) ?
(sorrie, normaal gebruik ik de edit knop.... 8) )
Dat heb ik in zeer veel mogelijke combinaties geprobeert, maar dat lukte niet. Ik zal zo effe de code en de foutmeldingen hier neerzetten

deze werkt:
C++:
1
CString cstrQueryString = "select username, password from users where Username = ";

Maar deze is niet compleet, want de SQL opdracht moet totaal zoiets worden:
SQL:
1
2
3
select username, password
from users
where Username = (variabelle)
Anders moet ik namelijk heel de tabel uitzoeken, en daar wordt mijn prgramma te sloom van

daarna dit geprobeert:
C++:
1
CString cstrQueryString = "select username, password from users where Username = " + strUserName;

kreeg deze error: c:\visual c++\login.cpp(122) : error C2440: 'initializing' : cannot convert from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'class CString'
No constructor could take the source type, or constructor overload resolution was ambiguous

en dit:
C++:
1
2
CString cstrBaseQueryString = "select username, password from users where Username = "
CString cstrQueryString = cstrBaseQueryString + strUserName

kreeg ik deze error: c:\visual c++\login.cpp(123) : error C2679: binary '+' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptable conversi
on) (regel 123 is die tweede regel). Ik heb nog wel wat geprobeert, maar dat waren 'gewoon' andere versies van deze methoden.

[ Voor 75% gewijzigd door Verwijderd op 07-07-2003 12:14 ]


  • Belgar
  • Registratie: Januari 2002
  • Laatst online: 17-08 22:31

Belgar

Archmaster ranzige code..

werkt het ook niet als je char array meegeeft uit de string? :

+ strUserName.c_str()

...Als het maar werkt


Verwijderd

Topicstarter
Belgar schreef op 07 July 2003 @ 13:12:
werkt het ook niet als je char array meegeeft uit de string? :

+ strUserName.c_str()
Hij geeft geen foutmeldingen meer... Nu nogf effe kijken of het programma goed werkt, maar alzovast Bedankt :*)

*Dat deel* van het programma werkt wel :X ...Zitten een paar beestjes in mijn programma :X

[ Voor 14% gewijzigd door Verwijderd op 07-07-2003 13:51 ]


  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 10-07 04:13

PommeFritz

...geen friet

Aha, okay, strUserName was een string.... een C++ STL string wel te verstaan. Dat had ik gemist... :) Vandaar dat je die niet zomaar aan een MFC CString kan 'toevoegen'. Enige reden waarom je zowel MFC CStrings als STL strings door elkaar gebruikt?

FireFox - neem het web in eigen hand


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
PommeFritz schreef op 07 July 2003 @ 01:24:
• gebruik edit knopje
• Ai, MFC... umm werkt dit niet gewoon: CString totaal = bestaand + new CString( string ) ?
Nee, je bent aan het Java'en. Onthoud: Java in your CUP, C++ in your CPU :)

new levert je een pointer op, in dit geval een CString* naar een nieuw CTring object op de heap. Dat zul je dus ooit moeten deleten. Verder heb je dan nog het probleem dat CString operator+(CString, CString*) oid niet bestaat.

Je bedoelt gewoon CString totaal = betaand + CString( char_pointer );

CString en std::string mixen is overigens niet handig. In een MFC GUI project is het soms onontkoombaar, maar een CGI interface heeft heel MFC niet nodig. Gooi CString er dus uit, en gebruik alleen std::string. Dan werkt je CGI applicatie ook gewoon op een Linux/Apache server.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
PommeFritz schreef op 08 July 2003 @ 00:49:
Aha, okay, strUserName was een string.... een C++ STL string wel te verstaan. Dat had ik gemist... :) Vandaar dat je die niet zomaar aan een MFC CString kan 'toevoegen'. Enige reden waarom je zowel MFC CStrings als STL strings door elkaar gebruikt?
Ah... geeft nie, het programma werkt nu. Heeft nog iemand een goede manier om wachtwoorden te versleutellen in C++?
Pagina: 1