ďťż

Ładny brzuch

Witam!
Za zadanie mam stworzenie skryp(tu\ów) realizujących:

1. Zapis danych odwiedzającego stronę do pliku lub bazy.
2. Losowanie na koniec miesiąca użytkownika z bazy lub pliku oraz wyświetlenie go na stronie.

Moje pytanie: Czy da się uzyskać taki efekt bez użycia bazy mysql, czy lepiej jej użyć? Jak zabezpieczyć dane aby nie były duplikowane?
Do tej pory próbowałem zrobić to na zwykłym pliku txt oto kod:

zapis danych z formularza do pliku
<?php // zmienna $dane, która będzie zapisana // może także pochodzić z formularza np. $dane = $_POST['dane']; $dane = $_POST['imie']; // przypisanie zmniennej $file nazwy pliku $file = "users.txt"; // uchwyt pliku, otwarcie do dopisania $fp = fopen($file, "a"); // blokada pliku do zapisu flock($fp, 2); // zapisanie danych do pliku fwrite($fp, $dane); // odblokowanie pliku flock($fp, 3); // zamknięcie pliku fclose($fp); ?>
Losowanie z pliku
<? $tablica=file("users.txt"); $liczba_wpisow=count($tablica); $los=mt_rand (0,$liczba_wpisow-1); echo $tablica[$los]; ?>

google dużo pomogło w poszukiwaniach , jednak nie wiem jak zmodyfikować te skrypty.
Np do pliku zapisywane są dane obok siebie, skrypt losuje linia po linii,
Czy da się zmienić funkcję zapisu aby zapisywała kolejnych użytkowników w następnej linijce?
Jak zabezpieczyć kod przed ponownym wpisem tej samej osoby?
Jeśli ktoś wie o co mi chodzi proszę o wskazówki pozdrawiam!




Moje pytanie: Czy da się uzyskać taki efekt bez użycia bazy mysql, czy lepiej jej użyć?
Da się, ale jeżeli masz bardzo dużo danych, to lepiej będzie użyć jakąś bazę danych. Wtedy dostęp do danych będzie wydajniejszy. A jak chcesz zrobić to na pliku, to możesz zapisywać dane do pliku xml.


Jak zabezpieczyć dane aby nie były duplikowane?
Jeśli dane zapisujesz do bazy danych to tam gdzie mają być niepowtarzające się dane spróbuj stworzyć pola UNIQUE. Możesz też przed wstawieniem danych wykonać selecta, który sprawdzi czy takie dane są już w bazie np.:
SELECT * FROM tabela_uzytkownikow WHERE (imie_uzytkownika = @imie AND nazwisko_uzytkownika = @nazwisko);
Jeżeli select zwróci jakieś dane to znaczy, że taki użytkownik już jest w bazie, a jeśli nic nie zwróci, to znaczy, że takiego użytkownika jeszcze nie ma.
Jeśli zapisujesz do pliku, to przy zapisie danych do niego musisz sam odczytać dane, które już są w tym pliku i sprawdzić czy nie są takie same jak te które mają być zapisane.


Czy da się zmienić funkcję zapisu aby zapisywała kolejnych użytkowników w następnej linijce?
Da się, ale jak chcesz zapisywać dane do pliku, to lepiej zapisuj do pliku xml. Parser za Ciebie będzie się martwił jak to pozapisywać i później odczytać. Ty tylko będziesz musiał znać strukturę pliku xml.
Użytkownik Geroj edytował ten post 28 marzec 2009, 14:15

Da się, ale jeżeli masz bardzo dużo danych, to lepiej będzie użyć jakąś bazę danych. Wtedy dostęp do danych będzie wydajniejszy. A jak chcesz zrobić to na pliku, to możesz zapisywać dane do pliku xml.

Jeśli dane zapisujesz do bazy danych to tam gdzie mają być niepowtarzające się dane spróbuj stworzyć pola UNIQUE. Możesz też przed wstawieniem danych wykonać selecta, który sprawdzi czy takie dane są już w bazie np.:
SELECT * FROM tabela_uzytkownikow WHERE (imie_uzytkownika = @imie AND nazwisko_uzytkownika = @nazwisko);
Jeżeli select zwróci jakieś dane to znaczy, że taki użytkownik już jest w bazie, a jeśli nic nie zwróci, to znaczy, że takiego użytkownika jeszcze nie ma.
Jeśli zapisujesz do pliku, to przy zapisie danych do niego musisz sam odczytać dane, które już są w tym pliku i sprawdzić czy nie są takie same jak te które mają być zapisane.

Da się, ale jak chcesz zapisywać dane do pliku, to lepiej zapisuj do pliku xml. Parser za Ciebie będzie się martwił jak to pozapisywać i później odczytać. Ty tylko będziesz musiał znać strukturę pliku xml.

Udało mi się stworzyć bazę, formularz i skrypt który zapisuje do niej użytkowników.
Pozostała kwestia sprawdzenia czy dane nie zostały zapisane.
Niestety nie wiem jak to zrobić wcześniej napisane zostało że przez SELECT, ale np jak?
$sprawdz = mysql_query("SELECT * FROM users WHERE ('$imie' = @imie AND '$nazwisko' = @nazwisko)") or die("sprawdzanie nie powiodło się"); echo $sprawdz; if(!$sprawdz == NULL) {echo 'ten user juz jest!'; } else{ $zapis = mysql_query("INSERT INTO users VALUES(NULL, '$imie', '$nazwisko', '$telefon')") or die("Zapytanie niepoprawne");} ...


Niestety nie wiem jak to zrobić wcześniej napisane zostało że przez SELECT, ale np jak?

Na przykład tak:
$sprawdz = mysql_query('SELECT * FROM users WHERE (IMIE = $imie AND NAZWISKO = $nazwisko)') or die("sprawdzanie nie powiodło się");
gdzie $imie i $nazwisko są zmiennymi języka PHP przechowującymi imię i nazwisko podane przez użytkownika, a IMIE i NAZWISKO są nazwami kolumn w tabeli users.


if(!$sprawdz == NULL) {echo 'ten user juz jest!'; }
Nie wiem czy porównywanie z NULL jest dobrym sposobem. Myślę, że lepiej by było użyć funkcji mysql_num_rows, która zwraca ilość wierszy zwróconych przez SELECTa znajdującego się w funkcji mysql_query. Jeśli ilość wierszy zwróconych przez mysql_num_rows wynosi 0, to znaczy, że brak użytkownika o takim imieniu i nazwisku, a jeśli ilość wierszy większa niż 0, to znaczy, że już taki użytkownik jest.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •