Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML + PHP] Ciekawe zjawisko znikania zer

Ostatnio zmodyfikowano 2012-10-13 00:00
Autor Wiadomość
pawajoro
Temat założony przez niniejszego użytkownika
[SFML + PHP] Ciekawe zjawisko znikania zer
» 2012-10-12 21:55:46
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++
C/C++
void log( string text, int reset = 0 )
{
    fstream plik; // = new fstream;
    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=", /*kuid[i].i[1]*/ "sc", "&o2=", /*kuid[i].i[3]*/ "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;
        //throw error ;
    };
    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 :)
P-66704
DejaVu
» 2012-10-12 22:15:06
Jeżeli kolumna ma w bazie danych zabronione wartości NULL, to wówczas domyślnie do pola MySQL przypisuje wartość 0 (da się zmienić na inną - osobno dla każdej kolumny), a więc jeżeli wyślesz do bazy zapytanie z NULL-ami, to on bodajże doda wpis, ale NULL-e zastąpi wartościami domyślnymi (choć w sumie tak teoretycznie baza danych powinna zwrócić chyba błąd, więc warto to jeszcze zweryfikować). W sumie nie wiem czy Ci odpowiadam na pytanie, bo trudno zrozumieć o co Ci tak na dobrą sprawę chodzi.
P-66706
pawajoro
Temat założony przez niniejszego użytkownika
» 2012-10-12 22:28:28
1.Wiadomości, które chcę włożyć do bazy wysyłam GET-em do skryptu PHP na serwerze
2.   Używam sf::Http
3.Gdy -//-   -//-   program zapisuje użyty URL i zapytanie do bazy SQL wygenerowane przez skrypt PHP (czyli odpowiedź z serwera)
4.Tak utworzone zapytanie SQL nie wstawia zer w odpowiednie miejsca (a URL jest prawidłowy - wina raczej nie leży po stronie programu, albo nie ode mnie zależy)
5.-//- -//-      -//-     -//-, gdy wstawiam do PMA, wywala mi błąd #1064 - treść 2 posty wyżej
6.URL wspomniany w pkt.3 jest zapisywany do pliku na kompie
7.Wpisuję ww. URL do przeglądarki Firefox i zatwierdzam
8.Strona, jak w pkt. 3 generuje i wyświetla zapytanie SQL
9.To zapytanie SQL już ZAWIERA te zera
10. Te skrypt, odwrotnie do przypadku z pkt. 5, już normalnie wkleja dane do bazy

Waszmość mam nadzieję, że zrozumiał ? :D
P-66711
DejaVu
» 2012-10-12 22:36:43
Czy przypadkiem w PHP nie trzeba poinformować, że $v będzie tablicą zanim cokolwiek do niej zaczniesz zapisywać? Czyli: $v = array();
Skoro przekazujesz coś przez URL i nie wyświetla się jak trzeba to drąż temat URL-a.

Druga opcja: jeżeli ręcznie podany URL działa OK, a URL wysłany przez Twoją aplikację NIE to prawdopodobnie wysyłasz zły URL, np. masz źle zakodowane ampersandy (&), które zamiast postaci (&) mają postać (&amp;) i wszystko się pierdzieli :)
P-66714
pawajoro
Temat założony przez niniejszego użytkownika
» 2012-10-12 22:44:07
Nie, próbowałem, to nie to
Tym bardziej zauważ, że zera znikają, gdy wysyłam zapytanie z programu, gdy to robię z poziomu Firefox'a czy IE, nie znikają... 

EDYTA: Też nie, przed tym są podobne deklaracje do innych skryptów, też z & i wszystko jest dobrze ...
P-66716
pawajoro
Temat założony przez niniejszego użytkownika
» 2012-10-13 00:00:58
Dobra, problem rozwiązany: okazało się, że problemem była spacja :)
P-66729
« 1 »
  Strona 1 z 1