MB/8 Club Poland - Klub i forum miłośników samochodów Mercedes-Benz

Forum dyskusyjne klubu właścicieli i miłośników samochodów marki Mercedes-Benz
Dzisiaj jest czw sie 28, 2025 4:13 pm

Strefa czasowa UTC+02:00




Nowy temat  Odpowiedz w temacie  [ Posty: 17 ]  Przejdź na stronę 1 2 Następna
Autor Wiadomość
Post: czw lut 01, 2007 9:57 pm 
Offline
kombatant
Awatar użytkownika

Rejestracja: śr paź 29, 2003 7:31 pm
Posty: 3225
Lokalizacja: Kraków
Czesc

Panowie mam problem i już zgłupiałem. Albo ja robie jakiś potwornie trywialny błąd i już się tak głęboko gdzieś zasugerowałem, albo czegoś nie wiem. Moze coś czegoś [poprostu nie obsługuje a ja o tym nie wiem. Panowie looknijcie prosze.

puszczam do bazy nastepujace zapytanie w transakcji z php:

Kod:
$query_result=mysql_query("
                   begin;
                insert into users (user_id,login, first_name,surname) VALUES (".$wiersz[0].",'".$_POST['login']."','".$_POST['firstname']."','".$_POST['surname']."');
                insert into passwords (user_id,pass) VALUES (".$wiersz[0].",md5('".$_POST['pass1']."'));
                commit;
");


Zero błędu, zero ostrzeżenia, ale dane się nie wpisują. Transakcja prawdopodobnie zadziałała gdyż w bazie nie pojawia się żaden z 2 rekordów.
Za chwilę podmieniam $query_result=mysql_query na echo aby sobie podejrzeć co za zapytanie mi sie wygenerowało. W przegladarce naciskam F5 aby wszystko poszlo na tych samych danych z POST i wyswietla mi sie zapytanie. Nastepnie kopiuje je i uruchamiam w kliencie phpMyAdmin i..... wszystko dziala calkowicie poprawnie. Acha zapomnialem jeszcze dodać że oczywiscie obie tabele są typu InnoDB

Pytanie:
Dlaczego z poziomu phpmyadmina to dziala a z poziomu php nie ??

Z góry dzieki ;-)

PS.
Kozystam z zestawu serwerów easyPHP

PS2.
Wiem że na tym forum to chyba juz tylko kwestii porad miłosnych nie poruszaliśmy wiec liczę na to ze ktos znajacy PHP mi cos podsunie ;-)

_________________
pozdrawiam Andrzej
Mercedes Benz 450 SLC - było
MGB 1965
GMail: anwojcik (at) gmail.com


Na górę
 Tytuł:
Post: czw lut 01, 2007 11:28 pm 
Offline
wiarus senior
Awatar użytkownika

Rejestracja: czw wrz 13, 2001 2:00 am
Posty: 1561
Lokalizacja: [KR/KWI] Kraków i okolice
Jako, że mam nieco doświadczenia w tej kwestii zapytam może w ten sposób: a znak kończący komendę jest ustawiony na ';'? To pierwsze, co przyszło mi do głowy.
Drugie, co mi się nasuwa, to: zapytanie jest w " więc jest parsowane, a zawiera znak końca linii interpretowany również przez parser PHP, czyli ; -> a może zmień ciapki zamykające i otwierające zapytanie na ' i escape'uj te ' które są w środku zapytania.
A po drugie: nie wiem, czy to jest docelowe zapytanie, czy tylko wklejasz taki przykład "na brudno", ale jeśli to jest docelowe, to mocno wskazane jest zrobienie jakiegokolwiek escape'owania i zabezpieczania danych wejściowych, zwłaszcza przekazywanych w POST/GET (zakładam, że wpisywane przez użytkownika gdzieś w serwisie) przed wszelkimi zapędami typu SQL Injection czy też Union Select.

_________________
http://pulpecik.pl/" onclick="window.open(this.href);return false; - Co dziś zjesz dobrego?
_________________
Ex MB C123 '80 300CD
Ex MB C124 '87 230CE
FSM 126el '95


Na górę
 Tytuł:
Post: pt lut 02, 2007 4:18 pm 
Offline
kombatant
Awatar użytkownika

Rejestracja: śr paź 29, 2003 7:31 pm
Posty: 3225
Lokalizacja: Kraków
Próbowałem zaminay pazurów z cudzysłowiami i nie działa ;/
A co do parsowania danych wejsciowych to oczywiscie masz racje ale i tak ten formularz jest już za logowaniem wiec jesli user tam juz jest to ma i tak prawie wszystkie mozliwosci. Ale oczywiscie jesli mialo by to byc wystawione do netu to musialo by byc sprawdzane.

Ale i tak dzieki <br>Dodano po 57 minutach.:<br> Dało radę ;-)
Trzeba było wysyłać zapytania w osobnych wywołaniach funkcji ;/
Kod:
function transaction($queries)
{
   $err = false;
   mysql_query('BEGIN');
   
   while ($query=each($queries))
   {
     $err=mysql_query($query[1]);
   }
   if(!$err) {
       mysql_query('ROLLBACK');
       return 0;
   } else {
       mysql_query('COMMIT');
       return 1;
   }
}

_________________
pozdrawiam Andrzej
Mercedes Benz 450 SLC - było
MGB 1965
GMail: anwojcik (at) gmail.com


Na górę
 Tytuł:
Post: pt lut 02, 2007 8:00 pm 
Offline
wiarus senior
Awatar użytkownika

Rejestracja: czw wrz 13, 2001 2:00 am
Posty: 1561
Lokalizacja: [KR/KWI] Kraków i okolice
and6412 pisze:
A co do parsowania danych wejsciowych to oczywiscie masz racje ale i tak ten formularz jest już za logowaniem wiec jesli user tam juz jest to ma i tak prawie wszystkie mozliwosci. Ale oczywiscie jesli mialo by to byc wystawione do netu to musialo by byc sprawdzane.

To takie przyzwyczajenie, pierwsze na co patrzę w kodzie to zabezpieczenia przed podstawowymi atakami. Widziałem już kilka "profesjonalnie" napisanych serwisów, do których byłem proszony o analizę "co się stało, że zniknęło i mam stronę z krzaczkami" [zlosnik]


and6412 pisze:
Dało radę ;-)
Trzeba było wysyłać zapytania w osobnych wywołaniach funkcji ;/
Kod:
function transaction($queries)
{
   $err = false;
   mysql_query('BEGIN');
   
   while ($query=each($queries))
   {
     $err=mysql_query($query[1]);
   }
   if(!$err) {
       mysql_query('ROLLBACK');
       return 0;
   } else {
       mysql_query('COMMIT');
       return 1;
   }
}


No tak, za małe mam doświadczenie w MySQL5 - rzadko piszę rzeczy wymagające transakcji czy też innych "fjuczerów" zawartych w 5. Póki co 4 stabilniejsza ;)

_________________
http://pulpecik.pl/" onclick="window.open(this.href);return false; - Co dziś zjesz dobrego?
_________________
Ex MB C123 '80 300CD
Ex MB C124 '87 230CE
FSM 126el '95


Na górę
 Tytuł:
Post: pt lut 02, 2007 9:20 pm 
Offline
kombatant
Awatar użytkownika

Rejestracja: śr paź 29, 2003 7:31 pm
Posty: 3225
Lokalizacja: Kraków
Wogole ja gdyby nie to że przeważnie programujac w PHP musisz sie zdać na to co admin ci serwuje na docelowym serwerze (a jest to przewaznie PHP4 z MySQL5) to wogole bym tego gówna jakim jest MySQL nie tykał. Napisałem z kumplem pracę inżynierską nt. porównania MySQL i Postgresa i tak naprawde to PostgreSQL w niczym (no moze dalikatnie poza predkosciom) nie ustepuje MySQL a za to ma prawie wszystkie zabawki które maja "duzi bracia" jak Oracle czy DB2. No choćby to co powyżej to przecież jakaś porażka, co za różnica czy dostanie to w jednym zapytaniu czy w kilku.

_________________
pozdrawiam Andrzej
Mercedes Benz 450 SLC - było
MGB 1965
GMail: anwojcik (at) gmail.com


Na górę
 Tytuł:
Post: sob lut 03, 2007 1:11 am 
Offline
Klubowicz
Awatar użytkownika

Rejestracja: pn kwie 24, 2006 2:13 am
Posty: 355
Lokalizacja: Warszawa/Ostrów Maz.
and6412 pisze:
puszczam do bazy nastepujace zapytanie w transakcji z php:

Kod:
$query_result=mysql_query("
begin;
insert into users (user_id,login, first_name,surname) VALUES (".$wiersz[0].",'".$_POST['login']."','".$_POST['firstname']."','".$_POST['surname']."');
insert into passwords (user_id,pass) VALUES (".$wiersz[0].",md5('".$_POST['pass1']."'));
commit;
");


Zero błędu, zero ostrzeżenia, ale dane się nie wpisują. Transakcja prawdopodobnie zadziałała gdyż w bazie nie pojawia się żaden z 2 rekordów.



Spróbowałbym w ten sposób:

____________________________________________________________
//Przypisanie zmiennych tablicowych do zmiennych zdefiniowanych
$u_id = $wiersz[0]; //INT
$login = $_POST['login']; //VARCHAR(xx) lub TEXT
$f_name = $_POST['firstname']; //VARCHAR(xx) lub TEXT
$s_name = $_POST['surname']; //VARCHAR(xx) lub TEXT
$pass = $_POST['pass1']; //VARCHAR(xx) lub TEXT

//Tam gdzie pole jest INT można pominąć apostrofy ($u_id)
$query="insert into users (user_id, login, first_name, surname) VALUES ($u_id, '$login', '$f_name', '$s_name')";
$result = mysql_query($query);

$query_passwd = "insert into passwords (user_id,pass) VALUES ($u_id, md5('$pass'))";

//lub
$query_passwd = "insert into passwords (user_id,pass) VALUES ($u_id, PASSWORD('$pass'))";


$result_passwd = mysql_query($query_passwd);

_______________________________________________________


W niektórych wersjach PHP zamiast "$_POST['cos_tam']" może być konieczne użycie "$HTTP_POST_VARS['cos_tam']. Osobiście używam tej drugiej opcji.

Przytoczony przez Ciebie sposób mógł nie zadziałać ze względu na użycie apostrofów (') zarówno w definicji kwerendy, jak również w zmiennych sesyjnych oraz POST (tablicowych).

_________________
C123 230C '77 - Puchata
W116 450SEL '79 - Pani Bulgot


Na górę
 Tytuł:
Post: sob lut 03, 2007 9:01 pm 
Offline
kombatant
Awatar użytkownika

Rejestracja: śr paź 29, 2003 7:31 pm
Posty: 3225
Lokalizacja: Kraków
Patro: Szczerze powiedziawszy to nie masz racji w obu kwestiach.
1) Twoj kod oczywiscie dziala tylko że w nim nie używasz transakcji a to o to sie w moim problemie rozchodzilo ;-)
2) Z tego co wiem to ' i " sa zamienne. A z całą pewnoscia powinno sie używać ' w indeksach tablic (choc i bez nich także dziala).

_________________
pozdrawiam Andrzej
Mercedes Benz 450 SLC - było
MGB 1965
GMail: anwojcik (at) gmail.com


Na górę
 Tytuł:
Post: sob lut 03, 2007 11:44 pm 
Offline
wiarus senior
Awatar użytkownika

Rejestracja: pn mar 28, 2005 6:50 pm
Posty: 1596
Lokalizacja: Warszawa
Mike_THE_GR8 pisze:
czy też innych "fjuczerów" zawartych w 5

Z tego co wiem, bo wspomniałeś o bezpieczeństwie, to sie zope'a używa do bezpiecznego skryptowania, albo pythona... a PIEjczPi, to z sendmailem może jeszcze nie wygra, ale sitowie troche jest. ;p
and6412 pisze:
no moze dalikatnie poza predkosciom

Prędkość prędkością, do małych gównianych, nie wymagających zapytań to oczywiście MySQL jest szybszy, ale PostgereSQL, to już jest wyczesana baza z ficzerami... a na dodatek na licencji BSD, a za MySQL'a trzeba płacić jak się go komercyjnie wykorzystuje.
Patro pisze:
W niektórych wersjach PHP zamiast "$_POST['cos_tam']" może być konieczne użycie "$HTTP_POST_VARS['cos_tam'].

To z tego co kiedyś czytałem to kewsja ustawień w php.ini, ale nie dam sobie członków żadnych odkrajać. ;p
and6412 pisze:
Z tego co wiem to ' i " sa zamienne.

.... are you sure? ;p Mi się zawsze wydawało, że text zamkniety w ' jest wrzucany dalej dosłownie, a zamknięty w ", jak zawiera jakieś zmienne, to zmienia je na wartości tych zmiennych.

<i>harrier kiedyś pisał interface do OpenLDAP'a w PHP i wspomina to jako pasjonujące zadanie... ;p</i>

Pozdrawiam,

_________________
Konrad Lapsz / harrier
[ex]: W126 280SE, S210 E320 CDI, X166 GL350 BlueTEC
[in]: S211 E320 CDI, W639 Viano 3.0 CDI


Na górę
 Tytuł:
Post: ndz lut 04, 2007 1:42 pm 
Offline
kombatant
Awatar użytkownika

Rejestracja: śr paź 29, 2003 7:31 pm
Posty: 3225
Lokalizacja: Kraków
harrier pisze:
and6412 napisał:
no moze dalikatnie poza predkosciom

Prędkość prędkością, do małych gównianych, nie wymagających zapytań to oczywiście MySQL jest szybszy, ale PostgereSQL, to już jest wyczesana baza z ficzerami... a na dodatek na licencji BSD, a za MySQL'a trzeba płacić jak się go komercyjnie wykorzystuje.

Tu jestes w błędzie. MySQL jest całkowicie darmowy. Jeśli chcesz mozesz wykupić licencję komercyjną która daje Ci support, ale na 100% nie masz takiego obowiązku w żadnym przypadku.


harrier pisze:
and6412 napisał:
Z tego co wiem to ' i " sa zamienne.

.... are you sure? ;p Mi się zawsze wydawało, że text zamkniety w ' jest wrzucany dalej dosłownie, a zamknięty w ", jak zawiera jakieś zmienne, to zmienia je na wartości tych zmiennych.


Szczerze powiem żeście mnie zastrzelili w tym momencie. Zawsze używałem ich całkowicie zamiennie i mogłem nawet nie zwrócić uwagi na to o czym piszecie. Sprawdze [zlosnik]

_________________
pozdrawiam Andrzej
Mercedes Benz 450 SLC - było
MGB 1965
GMail: anwojcik (at) gmail.com


Na górę
 Tytuł:
Post: ndz lut 04, 2007 2:24 pm 
Offline
wiarus senior
Awatar użytkownika

Rejestracja: czw wrz 13, 2001 2:00 am
Posty: 1561
Lokalizacja: [KR/KWI] Kraków i okolice
and6412 pisze:
harrier pisze:
and6412 napisał:
Z tego co wiem to ' i " sa zamienne.

.... are you sure? ;p Mi się zawsze wydawało, że text zamkniety w ' jest wrzucany dalej dosłownie, a zamknięty w ", jak zawiera jakieś zmienne, to zmienia je na wartości tych zmiennych.


Szczerze powiem żeście mnie zastrzelili w tym momencie. Zawsze używałem ich całkowicie zamiennie i mogłem nawet nie zwrócić uwagi na to o czym piszecie. Sprawdze [zlosnik]

harrier ma rację, jest dokładnie tak jak napisał, dlatego sugerowałem zamianę jednego na drugie :)

_________________
http://pulpecik.pl/" onclick="window.open(this.href);return false; - Co dziś zjesz dobrego?
_________________
Ex MB C123 '80 300CD
Ex MB C124 '87 230CE
FSM 126el '95


Na górę
 Tytuł:
Post: ndz lut 04, 2007 8:49 pm 
Offline
kombatant
Awatar użytkownika

Rejestracja: śr paź 29, 2003 7:31 pm
Posty: 3225
Lokalizacja: Kraków
Czyli takie dwa stringi sa jednoznaczne??

Kod:
$zmienna = 'Mercedes';

echo('Marka '.$zmienna.' jest najlepsza ;-D');
echo("Marka $zmienna jest najlepsza ;-D");

_________________
pozdrawiam Andrzej
Mercedes Benz 450 SLC - było
MGB 1965
GMail: anwojcik (at) gmail.com


Na górę
 Tytuł:
Post: ndz lut 04, 2007 10:34 pm 
Offline
wiarus senior
Awatar użytkownika

Rejestracja: pn mar 28, 2005 6:50 pm
Posty: 1596
Lokalizacja: Warszawa
and6412 pisze:
Czyli takie dwa stringi sa jednoznaczne??

Dokładnie tak. :) Przecież to łatwo sprawdzić, wrzucasz ten kod do pliku *.php zamknięty w <php> (nie wierze, że nie wiesz jak to się robi ;p) wrzucasz na serwer i odpalasz z przeglądarki. Ja u siebie odpaliłem to w terminalu poleceniem:
Cytuj:
[22:26]harrier@bsdtruck:~/public_html/files> php -F test.php

i dostałem wynik:
Cytuj:
Marka Mercedes jest najlepsza ;-DMarka Mercedes jest najlepsza ;-D


Pozdrawiam,

_________________
Konrad Lapsz / harrier
[ex]: W126 280SE, S210 E320 CDI, X166 GL350 BlueTEC
[in]: S211 E320 CDI, W639 Viano 3.0 CDI


Na górę
 Tytuł:
Post: pn lut 05, 2007 10:56 am 
Offline
Klubowicz
Awatar użytkownika

Rejestracja: pn kwie 24, 2006 2:13 am
Posty: 355
Lokalizacja: Warszawa/Ostrów Maz.
and6412 pisze:
Czyli takie dwa stringi sa jednoznaczne??

Kod:

$zmienna = 'Mercedes';

echo('Marka '.$zmienna.' jest najlepsza ;-D');
echo("Marka $zmienna jest najlepsza ;-D");



W pierwszym przykładzie możesz zastosować ' i " zamiennie:
echo('Marka '.$zmienna.' jest najlepsza ;-D');
=
echo("Marka ".$zmienna." jest najlepsza ;-D");

Dodatkowo możesz zastosować coś takiego:
echo("Marka %s jest najlepsza", $zmienna);

Dlaczego???
Mały test.

echo ("Ile procent wolnego czasu poświęcasz swojej Mercedes?");

$zmienna = "99%";
echo ("Swojej Mercedes poświęcam $zmienna wolnego czasu"); //wywali errora
echo ("Swojej Mercedes poświęcam " . $zmienna . " wolnego czasu"); //również wywali errora

echo ("Swojej Mercedes poświęcam %s wolego czasu", $zmienna); //OK

_________________
C123 230C '77 - Puchata

W116 450SEL '79 - Pani Bulgot


Na górę
 Tytuł:
Post: pn lut 05, 2007 11:26 am 
Offline
wiarus senior
Awatar użytkownika

Rejestracja: pn mar 28, 2005 6:50 pm
Posty: 1596
Lokalizacja: Warszawa
Patro: Ale tutaj akurat, o ile dobrze pamiętam, chodzi o użycie znaku '%' w kodzie html generowanym przez PHP. :)

Pozdrawiam,

_________________
Konrad Lapsz / harrier
[ex]: W126 280SE, S210 E320 CDI, X166 GL350 BlueTEC
[in]: S211 E320 CDI, W639 Viano 3.0 CDI


Na górę
 Tytuł:
Post: pn lut 05, 2007 12:42 pm 
Offline
Klubowicz
Awatar użytkownika

Rejestracja: pn kwie 24, 2006 2:13 am
Posty: 355
Lokalizacja: Warszawa/Ostrów Maz.
harrier pisze:
Patro: Ale tutaj akurat, o ile dobrze pamiętam, chodzi o użycie znaku '%' w kodzie html generowanym przez PHP. :)



Dokłdnie tak. Założyłem poprostu, że PHP będzie wykorzystywany w WWW, a niedawno poprawiałem stronkę, w której pierwotnie znaki specjalne były powodem wysypywania się strony.

_________________
C123 230C '77 - Puchata

W116 450SEL '79 - Pani Bulgot


Na górę
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat  Odpowiedz w temacie  [ Posty: 17 ]  Przejdź na stronę 1 2 Następna

Strefa czasowa UTC+02:00


Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 17 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Przejdź do:  
Technologię dostarcza phpBB® Forum Software © phpBB Limited
Polski pakiet językowy dostarcza phpBB.pl