Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Parę pytań odnośnie php/mysql
Ulysess
post
Post #1





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


witam mam parę pytań a nie chciałem kilku tematu zakładać.

1. chciałbym na swojej stronie zrobić liste online osób pytanie jak..
wpadłem na pomysł aby w tabeli gdzie mam dane o koncie dodać pole w którym była by data unix ost odświeżenia przez tego użytkownika strony i np w podstronie online.php wyświetlał bym uzytkowników którzy odwiedzili jaką kolwiek stronę w ciągu np ost 15min.
wpadłem też na pomysł aby w oddzielnej tabeli przetrzymywać użytkoników online (tak abym nie musiał wyszukiwać rekordów w tabeli gdzie może być np kilka , kilkanaście tysięcy użytkowników, na chwile obecną mam 150) ALE.. to by si wiązało z tym że przy każdym odswieżeniu witryny musiał by sprawdzać czy już jest w tek tabeli a jeśli nie to dodawać rekord jeśli tak update czyli wiąże się to z 2 zapytaniami . które rozwiązanie jest lepsze , wydajniejsze questionmark.gif

2 sprawa do tej pory gdy chciałem edytować jakieś dane użytkownika np coś dodać odjąć wpierw pobierałem jego dane poprzez select następnie dodawałem /odejmowałem i robiłem update to jest lepsze rozwiązanie czy może bez selecta od razu np `gold`+'".$nagroda."' lub `gold`+'".mysql_real_escape_string($nagroda)."' questionmark.gif

3 skoro wiem że zmienna którą dodaje edytuje jest liczbą muszę używać mysql_real_escape_string questionmark.gif

4. Na wielu podstronach normalnie wyświetlały by się NOTICE ale że mam wył ich wyświetlanie nie pojawiaja się to bład questionmark.gif mogę je zlekceważyć czy najlepiej się ich pozbyć ?

5. chciałbym zrobić wyszukiwanie użytkownika po przez wpisanie w formularzu jego nicka jak zrobić to najlepiej , bezpiecznie questionmark.gif

to chyba tyle , jeśli będę miał jakieś pytania dodam jeszcze w tym temacie . z góry dziękuje za pomoc i o ile to możliwe proszę nie odsyłać mnie na angielskie strony.. smile.gif

Go to the top of the page
+Quote Post
#luq
post
Post #2





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


1. Session Handler na bazię - gdzieś na wortalu jest chyba tego opis.
2. No tak, możesz robić zapytanie:
  1. UPDATE foo SET bar = bar + 5 WHERE fooId = 1

3. No właśnie, chodzi o to, że stosuje się mysql_real_escape_string bo to user wprowadza te dane do zapytania i to on jest tym który może zmienić tą zmienną
  1. SELECT * FROM foo WHERE userId = %zmienna_php%


Możesz w %zmienna_php% dać np.
Kod
1 OR 1=1


Możesz także dać
Kod
1 OR 1=2 UNION SELECT * FROM foo WHERE userLogin = 'luq'


Tak więc ja bym filtrował takie zmienne poprzez:
  1. intval( $foo )


4. Dobry programista nie chowa, warningów/noticów etc. tylko się ich pozbywa.

5. Filtrować wejście i wstawiać do zapytania no nic innego nie wymyślisz.


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
Ulysess
post
Post #3





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


hmm session handler wygląda mi na skomplikowane :|.. zapewne chodzi ci o linka -> http://wortal.php.pl/wortal/artykuly/php/a...handler_czesc_i sam go znalazłem no i jeszcze na innym forum gdzie też umieściłeś smile.gif.

3) no tak ale jeśli zmienna jest z sesji pobierana questionmark.gif np id usera albo zmienna pochodzi z innej tabeli i na jej zawartośc nie miał user podglądu/edycji to też mam używaćquestionmark.gif

jest jakaś różnica pomiędzy abs a intval questionmark.gif oprócz tego że abs zamienia z ujemnych na dodatnie questionmark.gif

nowe pytanie

po zalogowaniu ustawiam np SESSION['zalogowany'] = 1 , SESSION['uzytkownik'] = $id;

to błąd że nie używam session_register questionmark.gif

i pytanie trochę z innej beczki .. parę dni temu szukając łamacza tokenów trafiłem na Twoją strone , skrypt jest super i działa ale mam pewien problem.. token zamieniany jest na literki (X,Y) ale nie wyświetla mi poniżej w 'normalnej' postaci np xxxxsdfsd , czym to jest spowodowane ? smile.gif
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




ad1) INSERT INTO tabela (id_usera, czas) VALUES ($id_usera, $czas) ON DUPLICATE KEY UPDATE czas = $time
ad2) UPDATE tabela SET pole = pole + $ileś WHERE id = $jakis
Przy czym najlepiej jednak pobierać, jesli masz warunki na pola ustawione w stylu "wartość pola nie może zejść poniżej 0"
ad3) Dla pewności zawsze warto. Używanie przykładowo ctype lub filter_var dobrze już chronią, ale wszystko co dostajesz od usera należy traktować z nieufnością.
ad4) Dobry programista stara się wykluczać wszelkie niedoskonałości zamiast je maskować. Choćby dlatego, że zamaskowane w jednym miejscu mogą wpłynąć na działanie w innym miejscu skryptu w sposób jakiego nie przewidzieliśmy.
ad5) Aby zrobić to bezpiecznie musisz: po pierwsze - walidować zmienne z formularza, po drugie - walidować zmienne z formularza i po trzecie, choć wcale nie najmniej ważne - walidować zmienne z formularza smile.gif

ad3) Nigdy nie masz pewności CO i w jakiej postaci jest trzymane w bazie lub sesji i w jakiej formie te dane dostaniesz. Dlatego to także powinno być w jakiś sposób kontrolowane.

abs - wartość absolutna liczby
intval - konwersja zmiennej do postaci liczbowej
Różnica jest taka, że abs "usuwa" znak z liczb jeśli są ujemne, ale nie poradzi sobie w sytuacji, gdy ktoś mu za liczbę walnie "Ala ma kota". Zobacz co zrobi winksmiley.jpg A intval będzie starał w tym ostatnim przypadku skonwertować zmienną do liczby.

Co do session_register, to funkcja ta jest już od wersji PHP 5.3 uznana za przestarzałą. Nie powinno się jej używać. Twoja wersja jest prawidłowa.
Powód edycji: [thek]: Nowe pytania się pojawiły ;)


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Ulysess
post
Post #5





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


hmm wielkie dzięki za pomoc ale co do tego abs się nie zgodzę.
  1. $a = intval('ala ma kota');
  2. $b = abs('ala ma kota');
  3. echo $a,$b;

wynik: 00
smile.gif

aha i zapomniałem ..

co do ad2 - wszystkie pola liczbowe mam ustawione na UNSIGNED , czyli rozumiem że pozostawić tak jak do tej pory miałem czyli wpierw selecy następnie operacji i update ?
Go to the top of the page
+Quote Post
#luq
post
Post #6





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Cytat(Ulysess @ 8.07.2010, 13:55:32 ) *
i pytanie trochę z innej beczki .. parę dni temu szukając łamacza tokenów trafiłem na Twoją strone , skrypt jest super i działa ale mam pewien problem.. token zamieniany jest na literki (X,Y) ale nie wyświetla mi poniżej w 'normalnej' postaci np xxxxsdfsd , czym to jest spowodowane ? smile.gif

A stworzyłeś modele? winksmiley.jpg Wszystko jest opisane na blogu, jeśli dalej będziesz miał jakiś problem to pisz na PW or email.

Cytat
co do ad2 - wszystkie pola liczbowe mam ustawione na UNSIGNED , czyli rozumiem że pozostawić tak jak do tej pory miałem czyli wpierw selecy następnie operacji i update ?


A co niby zmienia pole typu UNSIGNET INT? Od razu UPDATE`a wal.


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
Ulysess
post
Post #7





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


ok poczytam ale później. wracając do tematu czy do filatracji nazwy użytkownika wystarczą te 2 funkcje - htmlspecialchars oraz addslashes questionmark.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:50