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 (IMG:style_emoticons/default/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)."' (IMG:style_emoticons/default/questionmark.gif)

3 skoro wiem że zmienna którą dodaje edytuje jest liczbą muszę używać mysql_real_escape_string (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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.. (IMG:style_emoticons/default/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.
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ś (IMG:style_emoticons/default/smile.gif) .

3) no tak ale jeśli zmienna jest z sesji pobierana (IMG:style_emoticons/default/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ć(IMG:style_emoticons/default/questionmark.gif)

jest jakaś różnica pomiędzy abs a intval (IMG:style_emoticons/default/questionmark.gif) oprócz tego że abs zamienia z ujemnych na dodatnie (IMG:style_emoticons/default/questionmark.gif)

nowe pytanie

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

to błąd że nie używam session_register (IMG:style_emoticons/default/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 ? (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 ;)
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
(IMG:style_emoticons/default/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 ? (IMG:style_emoticons/default/smile.gif)

A stworzyłeś modele? (IMG:style_emoticons/default/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.
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 (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 13:09