Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pomysł na mechanizm oceniania
Forum PHP.pl > Forum > PHP
jarmiar
witam,

nie mam pomysłu w jaki sposób wykonać ocenianie artykułów.
dodam, że piszę cmsa na plikach tekstowych i tworzenie artykułów ma się odbywać na zasadzie tworzenie pliku tekstowego -> zapis do pliku potrzebnych danych ->zapis do pliku z menu hiperłącza do tego artykułu.
mam tylko problem z tym ocenianiem artu.

może ma ktoś jakieś pomysły??
1010
tworzysz plik w którym zapisujesz oceny użytkowników...
Balon
Przykład:

ocena_art_36.txt
Kod
200|50

200 - suma głosów
50 - ilość głosów
jarmiar
Cytat(Balon @ 19.05.2007, 17:13:29 ) *
Przykład:

ocena_art_36.txt
Kod
200|50

200 - suma głosów
50 - ilość głosów



a jak to teraz zaimplementować w skrypcie który tworzy pliki tekstowe i dopisuje to co kto chce?
Balon
To wykonujesz kiedy ktoś da ocenę:
  1. <?php
  2. // Ładujesz sobie plik z oceną do zmiennej $file
  3. $votes = explode( '|', $file );
  4. // i zapisujesz coś takiego do pliku z powrotem
  5. implode( '|', array( $votes[0]+$_POST['ocena'], $votes[1]++ ) );
  6. ?>


A jak chcesz wyświetlić głosy to:
  1. <?php
  2. // Ładujesz sobie plik z oceną do zmiennej $file
  3. $votes = explode( '|', $file );
  4. // średnia ocen
  5. echo $votes[0]/$votes[1];
  6. ?>
jarmiar
no ale to wiem jak zrobić gorzej tylko jak wykonać to, by skrypt wiedział, który artykuł ocenić?

np. wygeneruje mi się plik 65.php i mam w tym pliku wstawić formularz oceniania?

proszę mi to wyjaśnic
domis86
hmm to widze ze porwałeś się z motyką na słońce...
Nie lepiej było użyć mysql?

Na plikach tekstowych będzie to o wiele trudniejsze do zrobienia i nieskalowalne.
Np jak chcesz zrobić zapisywanie który uzytkownik już glosowal, zeby nie mozna bylo wiele razy glosowac na artykul?
jarmiar
wyslę mu ciastko
Balon
A jaki problem nazwać plik z głosami votes_article_31 gdzie 31 to id artykułu ?
domis86
Cytat(jarmiar @ 19.05.2007, 20:12:26 ) *
wyslę mu ciastko

a jak se skasuje ciastko ? smile.gif
jarmiar
Cytat(domis86 @ 19.05.2007, 22:26:11 ) *
a jak se skasuje ciastko ? smile.gif


nie wiem... może ban na IP?
Sedziwoj
domis86 nie można zabezpieczyć skrypt aby ktoś wielokrotnie nie zagłosował, bez logowania można użyć tylko ciasteczek, dlaczego? bo może wiele osób mieć to samo IP.
Można wprowadzić logowanie i głosowanie po zalogowaniu (rejestracja z potwierdzeniem adresu e-mail), ale wiadomo że można mieć tyle kont e-mail ile dusza zapragnie.
Co do skryptu, to jednak też bym polecał użycie bazy danych jak to możliwe. Jeśli nie to aby to było wydajne, no cóż bazy danych są też programem, ale chyba dobrym rozwiązaniem przy małej liczbie artykułów, jest stworzenie folderu z ocenami i tam pliki "<numer artykułu>.php" (czy dowolne rozszerzenie), bo wtedy wyszukanie odpowiedniej pozycji zwalamy na system plików.
domis86
dobra kurde, jak się uparłeś na pliki aarambo.gif to nie kombinuj, tylko w plikach za[isuj zserializowane dane (wlasciwosci artykulu). Te dane mogą zawierać wszystko, co dotyczy danego artykulu - nawet tresc.

Czyli robisz pliki np:
article_[nr_artykulu].dat

i w nim sa zapisane dane dotyczace tego artykulu.
Np:

  1. <?php
  2. function load_article($nr)
  3. {
  4. $file_name = '/articles/article_'.$nr.'.dat';
  5. $data = file_get_contents($file_name);
  6. $data = unserialize($data);
  7. return $data;
  8. }
  9.  
  10. function save_article($nr, $data)
  11.  {
  12.  $file_name = '/articles/article_'.$nr.'.dat';
  13. $data = serialize($data);
  14.  file_put_contents($file_name, $data);
  15.  }
  16. ?>



i teraz przykladowe uzycie :

  1. <?php
  2. //robienie nowego artykulu
  3.  
  4. $nr = ...; //tu ustalasz numer nowego arta - np wczytujesz pliki z /articles/ i bierzesz najwiekszy_numer+1
  5.  
  6. $data = array();
  7. $data['title'] = 'Untitled';
  8. $data['content'] = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec nisl purus, aliq
    uet vel, fermentum vulputate, pretium vitae, arcu. Morbi rhoncus.'
    ;
  9. $data['author_id'] = $id_autora;
  10. $data['votes_number'] = 0;
  11.  
  12. save_article($nr);
  13. ?>


  1. <?php
  2. //dodawanie glosu
  3. $data = load_article($nr);
  4. $data['votes_number'] += 1;
  5. save_article($nr);
  6. ?>



mozesz analogicznie zrobic edycje, itp.
Trzeba tez dopisac funkcje wczytujaca liste artykulow z katalogu /articles/, kasujacą artykuł itp
No i oczywiscie jakoś zadbać o nie blokowanie się dostepu do plikow - jak to zawsze przy pracy z plikami bywa. aarambo.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.