Właśnie programuję funkcję do kontaktu z bazą MySQL. Używam do tego skryptów PHP wrzuconych na serwer znajomego. Wiem, powinienem używać SQLite lub innej biblioteki, lecz wtedy nie nie znalazłem dobrej biblioteki, a to tego taka konstrukcja ułatwia mechanizm logowania. W programie używam SFML::Http do wykonywania skryptów. Poprzednio używałem cURL, ale potem stwierdziłem, że
a) SFML i tak używam do FTP i generowania obrazka, więc po co ładować kolejną bibliotekę?
b) C-kowy cURL w C++ do takich zadań, jak to, można sobie o pewien kant potłuc :)
Dobra, do sedna:
Jest kod C++
void log( string text, int reset = 0 )
{
fstream plik;
if( reset == 1 )
{
plik.open( "C:\\Kuidland\\loghttp.txt", ios::trunc | ios::out );
}
else
{
plik.open( "C:\\Kuidland\\loghttp.txt", ios::app | ios::out );
}
if( plik.good() )
{
plik << "Log Kuidland HTTP: " << text << endl;
cout << "Log Kuidland: " << text << endl;
}
else
cout << "Log Fail: " << text << endl;
plik.close();
}
...
string ver[ 7 ] = { "0", "0", "0", "0", "0", "0", "0" };
int k = 1;
int i = 0;
do
{
int type = 1;
string up1 = glue( "kuidland/sqlscripts/kuid.php?l=", login, "&p=", pass, "&o1=", "sc", "&o2=", "sd", "&o3=" );
string up2 = glue( package[ 6 ], "&o4=", package[ 1 ], "&o5=", package[ 5 ], "&o6=&o7=", sti( type ), "&i0=", ver[ 0 ], "&i1=", ver[ 1 ], "&i2=", ver[ 2 ], "&i3=", ver[ 3 ], "&i4=", ver[ 4 ], "&i5=", ver[ 5 ], "&i6=", ver[ 6 ] );
url = glue( up1, up2 );
log( glue( "URL-KUID(", sti( i ), "): ", url ) );
re.SetURI( url );
res = pol.SendRequest( re );
if( sti( res.GetStatus() ) != "200" )
{
string error = "Blad polaczenia SQL! Error ";
error.append( sti( res.GetStatus() ) );
cout << error;
return 0;
};
log( glue( "Status (KUID)", sti( res.GetStatus() ) ) );
tx = res.GetBody();
log( glue( "Odpowiedz serwera: ", tx ) );
i++;
} while( i < k );
I PHP
<html><head><title>Blawex</title></head><body>
<?php
$id = mysql_connect ("127.0.0.1","db180109","*********");
mysql_select_db (db180109);
$login = $_GET['l'] ;
$zapytanie = "SELECT `pass` FROM `users` WHERE `user` = '$login'" ;
$wykonaj = mysql_query ($zapytanie);
$wiersz=mysql_fetch_array ($wykonaj) ;
$pass = $wiersz ['pass'] ;
$inpass = $_GET['p'] ;
if ($pass == $_GET['p'] )
{
echo "VALID" ;
$o1 = $_GET['o1'] ;
$o2 = $_GET['o2'] ;
$o3 = $_GET['o3'] ;
$o4 = $_GET['o4'] ;
$o5 = $_GET['o5'] ;
$o6 = $_GET['o6'] ;
$o7 = $_GET['o7'] ;
$v[0] = $_GET['i0'] ;
$v[1] = $_GET['i1'] ;
$v[2] = $_GET['i2'] ;
$v[3] = $_GET['i3'] ;
$v[4] = $_GET['i4'] ;
$v[5] = $_GET['i5'] ;
$v[6] = $_GET['i6'] ;
$zapytanie = "INSERT INTO `kuid`(`kuid`, `name`, `info`, `author`, `cdp_id`, `trainz`, `trs2004`, `trs2006`, `trainzc`, `trs2009`, `trs2010`, `trs2012`, `kuid_deps`, `kuid_type`) VALUES ('$o1' ,'$o2' ,'$o3' ,'$o4' ,$o5 ,$v[0] ,$v[1] ,$v[2] ,$v[3] ,$v[4] ,$v[5] ,$v[6] ,'$o6' ,$o7 )";
echo " SQL Response: ".mysql_errno($id)." - ".mysql_error($id);
echo "$zapytanie" ;
$wykonaj = mysql_query ($zapytanie);
}
else
{
}
?>
</body></html>
Kompiluję program, a następnie włażę do PMA i okazuje się, że danego wpisu nie ma. Więc otwieram log, a tam:
Log Kuidland HTTP: URL-KUID(0): kuidland/sqlscripts/kuid.php?l=pawajoro&p=pass&o1=sc&o2=sd&o3=Tu opis&o4=Pawajero&o5=37&o6=&o7=1&i0=0&i1=0&i2=0&i3=0&i4=0&i5=0&i6=0
Log Kuidland HTTP: Status (KUID)200
Log Kuidland HTTP: Odpowiedz serwera: <html><head><title>Blawex</title></head><body>
VALID SQL Response: 0 - INSERT INTO `kuid`(`kuid`, `name`, `info`, `author`, `cdp_id`, `trainz`, `trs2004`, `trs2006`, `trainzc`, `trs2009`, `trs2010`, `trs2012`, `kuid_deps`, `kuid_type`) VALUES ('sc' ,'sd' ,'Tu' ,'' , , , , , , , , ,'' , )
</body></html>
Próbuję zapytanie z loga ręcznie wpisać do PMA. Wyskakuje mi błąd:
#1064 - Something is wrong in your syntax obok ' , , , , , , ,'' , )' w linii 1
Gdzie te zera? Teraz próbuję wpisać URL z loga do przeglądarki. Odpowiedź z serwera:
VALID SQL Response: 0 - INSERT INTO `kuid`(`kuid`, `name`, `info`, `author`, `cdp_id`, `trainz`, `trs2004`, `trs2006`, `trainzc`, `trs2009`, `trs2010`, `trs2012`, `kuid_deps`, `kuid_type`) VALUES ('sc' ,'sd' ,'Tu opis' ,'Pawajero' ,36 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,'' ,1 )
Czyli w URL nie problem? Skąd tu te zera, jak z poziomo programu zer za nic nie chciał dodać? Nadmienię, że przy wpisywaniu do przeglądarki dane w bazie się
ZNALAZŁY. Co robić
PS. Mam nadzieje, że nie za dużo się rozpisałem :)