mysql_query(); jak dodać dane z textboxa?

0

Witam

Mój problem wygląda następująco:

do tego kodu chciałbym wstawić dane z textboxa, z właściwości "text".

próbowałem to zrobić w ten sposób:

//konwersja na *const char
marshal_context ^context = gcnew marshal_context();
rej_login = context->marshal_as<const char*>(textBox2->Text);
marshal_context ^context1 = gcnew marshal_context();
rej_haslo = context1->marshal_as<const char*>(textBox3->Text);

//wstawianie danych do bazy
mysql_query(conn,"INSERT INTO `baza`.`tabela` (`Login` ,`Haslo`)VALUES ('"+rej_login+"', '"+rej_haslo+"');");

lecz kompilator wywala błąd:

error C2679: binary '+' : no operator found which takes a right-hand operand of type 'const char *' (or there is no acceptable conversion)
1>          could be 'built-in C++ operator+(volatile const System::Object ^, volatile const System::String ^)'
1>          or       'built-in C++ operator+(volatile const System::String ^, volatile const System::Object ^)'
1>          or       'built-in C++ operator+(volatile const System::String ^, volatile const System::String ^)'
1>          while trying to match the argument list '(System::String ^, const char *)'

Proszę o pomoc, nie wiem jak rozwiązać ten problem. Używam Visual studio 2010 i języka c++.

0

Nie można konkatenować ze sobą napisów typu const char* w ten sposób. Najpierw stwórz sobie całe zapytanie (gdy wszystko jest jeszcze typu System::String^), np. za pomocą String::Format albo zwykłej konkatenacji i dopiero skonwertuj do const char*.

Hint: sql injection.

0

Odradzam bo to co robisz to jest zaproszenie do sql injection. Wyobraź sobie co się stanie jak ktoś do textboxa wstawi jakieś:

dupa'); drop database....
0

Dzięki za wypowiedzi, spróbuję to zrobić tak jak napisał Rev.

Nie przewidziałem Sql injection, to faktycznie ma sens.
Stworzę całe zapytanie, przekonwertuję na const char*, wtedy funkcja wyglądała by tak:

mysql_query(conn,QueryString);

gdzie QueryString to zmienna typu char* przechowująca całe polecenie.
Takie rozwiązanie powinno zadziałać? :)

0

Ale co to niby zmieni? Przecież nadal ktoś może ci podać stringa z którego zrobi się injection?

0

Jak temu zapobiec?

0

prepared statements na przykład
http://pl.wikipedia.org/wiki/SQL_injection

0

Myślę, że przede wszystkim to Ci pomoże: http://dev.mysql.com/doc/refman/5.6/en/mysql-real-escape-string.html

0

Wprowadziłem zabezpieczenie po stronie serwera i użytkownik może wykonywać tylko polecenia select/update/insert , wiem, że to nie do końca zamyka drogę do sql injection dlatego teraz poznam szerzej funkcję: mysql_real_escape_string()

1 użytkowników online, w tym zalogowanych: 0, gości: 1