Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl


Brick
Napisane: 31.10.2017, 10:24:32





Grupa: Zarejestrowani
Postów: 107
Dołączył: 16.02.2004
Skąd: Kraków

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

A gdzie uruchamiasz ten skrypt?
Jak skrypt znajduje się na serwerze to będzie zapisywał plik csv na serwerze (we skazanej lokalizacji $nazwaPliku)
Jak skrypt uruchomisz na swoim komputerze to będzie zapisywał na komputerze.
Oczywiście możesz plik zapisać na serwerze i go pobrać z serwera ale to już chyba oczywista oczywistość.

Poza tym po pierwsze: zamiast robić fopen, fwrite, fclose - można użyć jednej funkcji:
  1. file_put_contents($nazwaPliku, $ciag_wyjsciowy)

Po drugie: używaj jednolitego nazewnictwa zmiennych. Albo $nazwa_zmiennej albo $nazwaZmiennej. Jest taki standard PSR który mówi żeby używać tego albo tego ale nie obydwu na raz. Ja preferuję $nazwa_zmiennej a styl camelCase używam do nazw metod.
  Forum: PHP · Podgląd postu: #1223814 · Odpowiedzi: 4 · Wyświetleń: 568

Brick
Napisane: 26.06.2014, 08:33:05





Grupa: Zarejestrowani
Postów: 107
Dołączył: 16.02.2004
Skąd: Kraków

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

Opcja "zapamiętaj mnie" polega na tym że w pliku cookie zapisujesz dłuższy czas jego ważności, np 3 miesiące lub rok
  1. if ($remember==1) //użytkownik zaznaczył "zapamiętaj mnie"
  2. $time = time() + 60*60*24*30*12; //cookie ważne rok
  3. else
  4. $time = 0; //cookie jest usuwane po zamknięciu przeglądarki
  5.  
  6. setcookie("user_id",1,$time,"/");
Oczywiście nazwa i wartość cookie są przykładowe.

Za to samo logowanie można zrealizować w ten sposób, że zapisujesz dwa pliki cookie. Pierwszy to ID użytkownika z bazy, drugi to zaszyfrowana za pomocą algorytmu md5 kombinacja hasła+ID+jakiś ciąg znaków
  1. $user_id = 1; //unikalny ID użytkownika z bazy
  2. 1. setcookie("user_id",$user_id,$time,"/");
  3.  
  4. $string = "jakis_tekst"; //dowolny ciąg znaków
  5. $uniq = md5($user_id.$haslo.$string);
  6. 2. setcookie("uniq",$uniq,$time,"/");
Po każdym wyświetleniu strony pobierasz dane z bazy dla użytkownika $user_id i porównujesz hasło z tym co ma w cookie (przeprowadzając oczywiście operacje jak wyżej czyli md5 itd)

Do kontroli całego mechanizmu logowania zaleca się korzystanie z sesji PHP http://pl1.php.net/manual/en/book.session.php, które są bezpieczniejsze niż własne pliki cookie.
  Forum: PHP · Podgląd postu: #1112503 · Odpowiedzi: 17 · Wyświetleń: 2 383

Brick
Napisane: 8.01.2010, 12:43:44





Grupa: Zarejestrowani
Postów: 107
Dołączył: 16.02.2004
Skąd: Kraków

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

Ja bym nie odsyłał kolegi do studiowania jakiś skryptów, bo nie doświadczonej osobie ciężko będzie czasem w nich się połapać. Zwłaszcza że często są mocno rozbudowane, korzystają z różnych oddzielnych funkcji itd.

Może przyda się krótkie objaśnienie:
Uruchomienie sesji w PHP powoduje zapisanie pliku cookie z identyfikatorem sesji PHPSESSID.
Istotne są tutaj dwa parametry:
1. czas życia sesji
2. czas ważności cookie

Wbrew pozorom nie oznaczają tego samego.

1. Czas życia sesji domyślnie jest ustawiony w PHP na 1440 sekund (czyli 24 minuty). Po 24 minutach bezczynności użytkownika ważność sesji wygasa, co w praktyce ma przełożenie na wylogowanie. NIE oznacza to, że sesja jest ważna 24 minuty od zapisania cookie czyli od zalogowania się, bez względu na poczynania użytkownika! Po każdym uruchomieniu session_start() czyli w praktyce kliknięciu czegokolwiek na stronie, czas liczy się od nowa.

2. Czas ważności cookie domyślnie jest ustawiony na zero. Gdy jest równy zero zamknięcie przeglądarki powoduje skasowanie pliku cookie, co w praktyce ma przełożenie na wylogowanie. Dopóki użytkownik jest na stronie - cookie jest ważne cały czas, bez limitu. Jeżeli ustawimy czas ważności cookie na np. 3 godziny to po zamknięciu przeglądarki i ponownym otwarciu strony będzie on dalej zalogowany. Ale na drugi dzień już nie.
Ten parametr warto ustawiać np na miesiąc jeżeli użytkownik zaznaczy opcję "zapamiętaj mnie" podczas logowania.
Uwaga!
Zamknięcie przeglądarki kasuje cookie, ale nie robi tego zamknięcie panelu w przeglądarce.

Oba parametry możemy zmienić za pomocą funkcji ini_set(). Odpowiednio:
Kod
1. ini_set('session.gc_maxlifetime', 3600); //czas trwania sesji ustawiamy na 1 godzinę
2. ini_set('session.cookie_lifetime',3600); //ważność cookie ustawiamy na 1 godzinę


Niestety, są serwery na których funkcja ini_set nie działa (została wyłączona przez administratora). W takim wypadku nic nie można poradzić na krótki czas życia sesji

Czym skutkuje krótki czas życia sesji?
Zależy od tego co robić może użytkownik. Np. mamy na stronie forum. Użytkownik zalogował się, zaczyna pisać bardzo długi post. Po 20 minutach odchodzi od komputera i wraca za godzinę. Kończy post i klika "zapisz". Wtedy pojawia się komunikat "nie jesteś zalogowany". Użytkownik rozbija monitor lub dzwoni do nas (wykonawcy) z epitetami.
Trzeba zatem przewidzieć taką sytuację i odpowiednio napisac skrypty żeby wyłapały taki tekst i go przywróciły. Tak jest, o ile się nie mylę, na tym forum.

Podsumowując:
Sesje są zalecane jako bezpieczniejsze, ale jeżeli chcesz mieć uniwersalny kod działający płynnie na każdym serwerze, z możliwością regulowania czasu zalogowania, to lepiej jest skorzystać z cookie.

Korzystanie z obydwu rozwiązań najlepiej zgłębić na php.net. W skrócie:
Wartości zmiennych odczytujemy z:
1. $_SESSION['zmienna'];
2. $_COOKIE['zmienna'];

a zapisujemy:
1. $_SESSION['zmienna'] = "moja wartosc";
2. setcookie("zmienna","moja wartosc",0); //czas ważności cookie to zero
  Forum: Przedszkole · Podgląd postu: #699140 · Odpowiedzi: 9 · Wyświetleń: 3 364

Brick
Napisane: 11.11.2009, 18:26:24





Grupa: Zarejestrowani
Postów: 107
Dołączył: 16.02.2004
Skąd: Kraków

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

LIKE %piwo% oznacza: znajdź frazę "piwo" w podanym polu w tabeli, bez względu na to czy występuje na początku, na końcu czy w środku ciągu znaków.

W podanym przypadku zamiast "piwo" jest zapewne wynik jakiegoś innego zapytania: $r['grupa'].
Dodatkowo przed słowem jest wstawiony przecinek czyli MySQL zwróci wszystkie wyniki które mają w tekście poszukiwane słowo ale z przecinkiem na początku. Myślę że ten przecinek jest niepotrzebny i zapytanie powinno być takie:
  1. SELECT * FROM `e_user` WHERE `user_class` LIKE '%".$r['grupa']."%' COLLATE latin2_general_ci


W związku z tym że do zapytania jest wstawiony element tablicy $r['grupa'] to wstawienie go do kodu wymagało dodania kropek.
Dla czytelności kodu można to zrobić tak:
$zmienna = $r['grupa'];
  1. SELECT * FROM `e_user` WHERE `user_class` LIKE '%$zmienna%' COLLATE latin2_general_ci
  Forum: Przedszkole · Podgląd postu: #679230 · Odpowiedzi: 4 · Wyświetleń: 529

Brick
Napisane: 31.10.2009, 17:52:12





Grupa: Zarejestrowani
Postów: 107
Dołączył: 16.02.2004
Skąd: Kraków

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

Nie, wstawienie $_GET['imie'] nic nie da. Zrób sobie testowy skrypt i sprawdź co się dzieje. Niekoniecznie musisz wykonywać zapytanie do bazy, możesz je po prostu printować.

Sprawdź jakie wykona się zapytanie do bazy gdy ktoś da taki url:
index.php?imie=Stefan'%20or%20imie!='&wiek=1000

Zrób stripslashes dla obydwu zmiennych.
  Forum: PHP · Podgląd postu: #675770 · Odpowiedzi: 9 · Wyświetleń: 10 856

Brick
Napisane: 29.10.2009, 19:29:00





Grupa: Zarejestrowani
Postów: 107
Dołączył: 16.02.2004
Skąd: Kraków

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

Bardzo to skomplikowane, a można zrobić prosto w jednym pliku.
Zasada jest taka:
1. Jeżeli wysłano formularz - sprawdzamy pola
2. Jeżeli nie wysłano formularza - pokaż formularz
3. Jeżeli wysłano formularz i są błędy - pokaż błędy i poniżej formularz
4. Jeżeli wysłano formularz i NIE ma błędów - zapisz dane i pokaż podziękowanie

Tutaj przykładowy kod:
  1. if($send==1)
  2. {
  3. //sprawdzamy poprawność wypełnienia pól
  4. if (empty($pole))
  5. {
  6. $error = "Wypełnij pole X!"; //komunikaty o błędach zapisujemy do zmiennej $error
  7. }
  8. }
  9.  
  10. if ($send==0 or $error) //formularz nie był wysłany lub są błędy
  11. {
  12. if ($error) print "<h3>$error</h3>"; //jeżeli są błędy to pokaż je
  13.  
  14. print "Tutaj formularz<br />
  15. <form method=get>
  16. <input type=text name='pole' value='$pole'>
  17. <input type=submit value='Zapisz'>
  18. <input type=hidden name=send value=1>
  19. </form>";
  20. }
  21.  
  22. if ($send==1 and !$error) //nie ma błędów - zapisz dane z formularza
  23. {
  24. //zapisujemy formularz
  25. print "<h3>Dziękujemy za wysłanie formularza</h3><a href='formularz.php'>Wróć do formularza</a>";
  26. }

Oczywiście to tylko przykład, musisz dostosować swój kod do tego schematu.
Do zmiennej $error można zapisywać wiele komunikatów o błędach, np gdy trzeba sprawdzić wiele pól lub różne warianty poprawności.
Nie wiem gdzie dane mają trafić ale nie zapomnij o bezpieczeństwie - użytkownik może wysyłać z formularza różne śmieci, kod html, lub jakieś inne sztuczki "hackerskie".

Tutaj jest przykład działający
  Forum: PHP · Podgląd postu: #675246 · Odpowiedzi: 9 · Wyświetleń: 10 856

Brick
Napisane: 27.10.2009, 19:10:43





Grupa: Zarejestrowani
Postów: 107
Dołączył: 16.02.2004
Skąd: Kraków

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

Utworzyłem stronę z podanego kodu:
TUTAJ
Nie ma obrazków więc trochę trudno się zorientować jak to ma oryginalnie wyglądać.

1. Linki działają normalnie. Wniosek: kod javascript xaramenu.js lub egypta.js zapewne powodują ten błąd. Nie ma ich na mojej kopii strony i nie ma błędu. Co dokładnie robią te skrypty można się tylko domyślać. Zapewne jakieś super efektowne cuda z menu.

2. Stosując elementy H3 pamiętaj, że przeglądarki różnie wyświetlają wielkość nagłówków. IE wyświetla większy nagłówek H3 niż FF. Dlatego wszyscy zalecają stosowanie CSS.
  1. Zamiast: <h3><a href="infodwa.html">Andrzejki</a></h3>
  2. Powinno być: <a href="infodwa.html" style="font-size:15px; font-weight:bold;">Andrzejki</a>


3. Element <center> nie jest właściwym elementem dla dokumentu XHTML dlatego validator wyrzuca błąd

4. Nie dbasz o estetykę kodu, przez to trudno jest zorientować się, który element jest nadrzędny. Np elementy DIV i zawarty w nich kod nie mają odpowiednich wcięć.

5. Validator pokazuje błąd z elementem DIV nie dlatego że nie ma tam spacji (i nie ma być) tylko dlatego że masz o jedno zamknięcie DIV za dużo. Na samym dole strony przed zamknięciem </BODY> masz zamknięte dwa DIV'y a powinien być jeden (dotyczący <div id=wrapper>)

Tutaj jest poprawiony kod przy którym validator nie pokazuje blędów.

Porządek w kodzie to podstawa. Pozorna oszczędność czasu przy pisaniu "na szybko" mści się potem stratą czasu na szukaniu błędów.
  Forum: CSS · Podgląd postu: #674630 · Odpowiedzi: 12 · Wyświetleń: 1 275

Brick
Napisane: 22.05.2009, 10:00:44





Grupa: Zarejestrowani
Postów: 107
Dołączył: 16.02.2004
Skąd: Kraków

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

1. Programowanie: VIM
2. Projektowanie: Kartka papieru / Corel Draw
3. Zarządzanie MySQL: phpMyAdmin
4. Zarządzanie plikami: Total Commander / WinSCP

Najwyraźniej nie jestem profesjonalistą winksmiley.jpg
  Forum: Komputery i oprogramowanie · Podgląd postu: #610597 · Odpowiedzi: 9 · Wyświetleń: 1 414

Brick
Napisane: 22.05.2009, 08:44:40





Grupa: Zarejestrowani
Postów: 107
Dołączył: 16.02.2004
Skąd: Kraków

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

Musisz poczytać więcej na temat sesji (php.net)
Jaki błąd wywala? headers already sent...?
session_start() musi być wywołane zanim cokolwiek będzie printowane. Sesje odczytujesz z tablicy $_SESSION.
Czyli ogólny schemat:
Cytat
1. Formularz do logowania
2. Sprawdzenie poprawności hasła
3. Niepoprawne hasło: komunikat i powrót do formularza logującego
4. Poprawne hasło: zapisanie sesji i pokazanie formularza do wgrywania plików
5. Przed każdym wykonaniem skryptu odpowiedzialnego za upload sprawdzasz czy jest zapisana poprawna sesja. Jeżeli nie to -> formularz do logowania

Plik php.ini to plik konfiguracyjny dla PHP. Jeżeli masz zainstalowane php pod Windows to ten plik jest w katalogu PHP. W tym pliku modyfikujesz wszystkie ustawienia dla php.
W Twoim przypadku: upload_max_filesize = 64M
oznacza że maksymalny rozmiar to 64 MB

Ale jeżeli chcesz ten skrypt uruchomić na jakimś zewnętrznym serwerze to niestety najczęściej nie możesz tej wartości zmodyfikować. Także upload plików przez php jest na ogół ograniczony "odgórnie" przez administratora serwera.
  Forum: Przedszkole · Podgląd postu: #610577 · Odpowiedzi: 17 · Wyświetleń: 1 698


New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 14:55