ďťż

[php] system oceniania

       

Podstrony


telcocafe

if(isset($_POST['ocenaok'])) { // zapisujemy ocenę do zmiennej jako liczbę $ocena = (int)$_POST['ocena']; // sprawdzamy czy artykuł był już oceniany przez tą osobę if(isset($_COOKIE['ocena'.$id])) $komunikat = 'Już oceniałes ten artykuł!'; else { // wysyłamy ciasteczko informujące o ocenieniu setcookie('ocena'.$id, 'oceniono',time()+2592000); // tworzymy zapytanie $query = "UPDATE articles SET suma=suma+$ocena, ocen=ocen+1 WHERE id=$id"; // jeśli zapytanie zostanie poprawnie wykonane to wyświetlamy komunikat if(mysql_query($query)) $komunikat = 'Pomyslnie oceniono artykuł!'; } } // tworzymy zapytanie na artykuł $result = mysql_query("SELECT * FROM articles WHERE id='$id'"); // przerabiamy na tablicę $row = mysql_fetch_array($result); // wyświetlamy nagłówek echo '<h2>'.stripslashes($row['tytul']).'</h2>' ; // i tresc artykułu echo '<p>'.stripslashes($row['tresc']).'</p>' ; // wyświetlenie komunikatów echo $komunikat; // wyświetlanie oceny echo '<h3>Ocena: '; // jeśli nie było jeszcze żadnej oceny to wyświetla 0, w przeciwnym wypadku zaokrąglamy do 2 miejsc po przecinku dzielenie sumy/ilość ocen echo ($row['ocen']==0) ? 0 : round(($row['suma']/$row['ocen']),2); echo '</h3>'; // formularz do oceniania echo 'Oceń ten artykuł:'; echo '<form action="" method="POST"> <input type="radio" name="ocena" value="1">1 <input type="radio" name="ocena" value="2">2 <input type="radio" name="ocena" value="3">3 <input type="radio" name="ocena" value="4">4 <input type="radio" name="ocena" value="5">5 <input type="radio" name="ocena" value="6">6 <input type="submit" name="ocenaok" value="Oceń"> </form>';

jak przerobic taki skrypt zeby zmiast w inputy klikac w odnosniki, to wyeliminiowaloby przycisk "ocen"



Możesz to zrobić w JavaScripcie. Jakiś ukryty input, do którego po kliknięciu na link będzie przypisywana wartość, a następnie metodą document.forms['forma'].submit() będzie wysyłany formularz.

tez myslalem wlasnie o tym ukrytym inpucie ale nie wiem jak to polaczyc, JS to moja slaba strona

A może przez zwykłe linki przekazywać id a odbierać GET'em?



Głosowanie najlepiej zabezpieczać :) Linki nie są dobrą propozycją.
@time-bandit: Robisz to w ten sposób:<form action="strona" method="post" id="formularz"> <input id="glos" name="glos" value="brak" /> <a href="java script:void(0)" onclick="document.getElementById('glos').value = '1'; document.getElementById('formularz').submit()">1</a> <a href="java script:void(0)" onclick="document.getElementById('glos').value = '2'; document.getElementById('formularz').submit()">2</a> <a href="java script:void(0)" onclick="document.getElementById('glos').value = '3'; document.getElementById('formularz').submit()">3</a> </form>
Użytkownik andrzej_aa edytował ten post 21 sierpień 2009, 19:25
nie dziala mi cos, chyba musze przebrnac przez jakis kurs js

Więc może przykład w PHP (z ukrytym polem, bo zapomniałem o tym):<?php print_r($_POST); ?> <form action="?" method="post" id="formularz"> <input id="glos" name="glos" value="brak" type="hidden" /> <a href="java script:void(0)" onclick="document.getElementById('glos').value = '1'; document.getElementById('formularz').submit()">1</a> <a href="java script:void(0)" onclick="document.getElementById('glos').value = '2'; document.getElementById('formularz').submit()">2</a> <a href="java script:void(0)" onclick="document.getElementById('glos').value = '3'; document.getElementById('formularz').submit()">3</a> </form>

nie mam pojecia jak mam to razem polaczyc zeby dzialalo

Przerobiony:if(isset($_POST['ocenaok'])) { // zapisujemy ocenę do zmiennej jako liczbę $ocena = (int)$_POST['ocena']; // sprawdzamy czy artykuł był już oceniany przez tą osobę if(isset($_COOKIE['ocena'.$id])) $komunikat = 'Już oceniałes ten artykuł!'; else { // wysyłamy ciasteczko informujące o ocenieniu setcookie('ocena'.$id, 'oceniono',time()+2592000); // tworzymy zapytanie $query = "UPDATE articles SET suma=suma+$ocena, ocen=ocen+1 WHERE id=$id"; // jeśli zapytanie zostanie poprawnie wykonane to wyświetlamy komunikat if(mysql_query($query)) $komunikat = 'Pomyslnie oceniono artykuł!'; } } // tworzymy zapytanie na artykuł $result = mysql_query("SELECT * FROM articles WHERE id='$id'"); // przerabiamy na tablicę $row = mysql_fetch_array($result); // wyświetlamy nagłówek echo '<h2>'.stripslashes($row['tytul']).'</h2>' ; // i tresc artykułu echo '<p>'.stripslashes($row['tresc']).'</p>' ; // wyświetlenie komunikatów echo $komunikat; // wyświetlanie oceny echo '<h3>Ocena: '; // jeśli nie było jeszcze żadnej oceny to wyświetla 0, w przeciwnym wypadku zaokrąglamy do 2 miejsc po przecinku dzielenie sumy/ilość ocen echo ($row['ocen']==0) ? 0 : round(($row['suma']/$row['ocen']),2); echo '</h3>'; // formularz do oceniania echo 'Oceń ten artykuł:'; echo '<form action="" method="POST" id="formularz"> <input type="hidden" name="ocena" id="ocena" value=""> <input type="hidden" name="ocenaok" value="Oceń"> <a href="java script:void(0)" onclick="document.getElementById('ocena').value = '1'; document.getElementById('formularz').submit()">1</a> <a href="java script:void(0)" onclick="document.getElementById('ocena').value = '2'; document.getElementById('formularz').submit()">2</a> <a href="java script:void(0)" onclick="document.getElementById('ocena').value = '3'; document.getElementById('formularz').submit()">3</a> <a href="java script:void(0)" onclick="document.getElementById('ocena').value = '4'; document.getElementById('formularz').submit()">4</a> <a href="java script:void(0)" onclick="document.getElementById('ocena').value = '5'; document.getElementById('formularz').submit()">5</a> </form>';

no i [ciach!] :P nie dziala

w ogole nie dziala nawet -> href="java script:void(0) , zamiast przeladowywac to probuje przekierowac a skutki sa takie ze:


http://localhost/www...0script:void(0)

Zabroniony dostęp!

Nie masz dostępu do żądanego obiektu. Jest on zabezpieczony przed odczytem lub nie może być odczytany przez serwer.

Jeśli myślisz, że jest to błąd tego serwera, skontaktuj się z administratorem.
Error 403
localhost
08/22/09 20:42:37
Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8h mod_autoindex_color PHP/5.2.6


Ech. Zabezpieczenie IPB. javascript powinien być pisany łącznie.

:-) bledow nie ma ale skrpyt dalej nie przekazuje wartosci do bazy danych

Ech... Poducz się PHP i wtedy zacznij działać. Sprawdź linijka po linijce co jest nie tak (var_dump czy print_r), bo trudno jest zgadnąć co jest nie tak. Jak na moje oko, w skrypcie brakuje $id oraz pusty jest action formularza, ale to pewnie tylko dla przykładu usunąłeś, więc mogę się mylić.

skrypt z inputami dziala prawidlowo wiec musi cos byc z tym js, pokombinuje jeszcze ale nie wiem czy w ogole cos z tego bedzie

$id jest na 100%
Użytkownik time-bandit edytował ten post 23 sierpień 2009, 10:37
W takim razie sprawdź coś takiego:<?php if(isset($_POST['ocenaok'])) { echo '#przesłano formularz<br />'; // zapisujemy ocenę do zmiennej jako liczbę $ocena = (int)$_POST['ocena']; echo '#ocena: '.$ocena.'<br />'; // sprawdzamy czy artykuł był już oceniany przez tą osobę echo '#oceniony: '.(isset($_COOKIE['ocena'.$id]) ? 'tak' : 'nie').'<br />'; if(isset($_COOKIE['ocena'.$id])) $komunikat = 'Już oceniałes ten artykuł!'; else { // wysyłamy ciasteczko informujące o ocenieniu setcookie('ocena'.$id, 'oceniono',time()+2592000); // tworzymy zapytanie $query = "UPDATE articles SET suma=suma+$ocena, ocen=ocen+1 WHERE id=$id"; // jeśli zapytanie zostanie poprawnie wykonane to wyświetlamy komunikat if(mysql_query($query)) $komunikat = 'Pomyslnie oceniono artykuł!'; } } // tworzymy zapytanie na artykuł $result = mysql_query("SELECT * FROM articles WHERE id='$id'"); // przerabiamy na tablicę $row = mysql_fetch_array($result); // wyświetlamy nagłówek echo '<h2>'.stripslashes($row['tytul']).'</h2>' ; // i tresc artykułu echo '<p>'.stripslashes($row['tresc']).'</p>' ; // wyświetlenie komunikatów echo $komunikat; // wyświetlanie oceny echo '<h3>Ocena: '; // jeśli nie było jeszcze żadnej oceny to wyświetla 0, w przeciwnym wypadku zaokrąglamy do 2 miejsc po przecinku dzielenie sumy/ilość ocen echo ($row['ocen']==0) ? 0 : round(($row['suma']/$row['ocen']),2); echo '</h3>'; // formularz do oceniania echo 'Oceń ten artykuł:'; echo '<form action="" method="POST" id="formularz"> <input type="hidden" name="ocena" id="ocena" value=""> <input type="hidden" name="ocenaok" value="Oceń"> <a href="java script:void(0)" onclick="document.getElementById(\'ocena\').value = \'1\'; document.getElementById(\'formularz\').submit()">1</a> <a href="java script:void(0)" onclick="document.getElementById(\'ocena\').value = \'2\'; document.getElementById(\'formularz\').submit()">2</a> <a href="java script:void(0)" onclick="document.getElementById(\'ocena\').value = \'3\'; document.getElementById(\'formularz\').submit()">3</a> <a href="java script:void(0)" onclick="document.getElementById(\'ocena\').value = \'4\'; document.getElementById(\'formularz\').submit()">4</a> <a href="java script:void(0)" onclick="document.getElementById(\'ocena\').value = \'5\'; document.getElementById(\'formularz\').submit()">5</a> </form>';

dziala :D dziekie wielki, stawiam piwo :PP

#przesłano formularz
#ocena: 5
#oceniony: nie <--- tylko to budzi zastrzezenia ale sadze ze cos wymysle
Użytkownik time-bandit edytował ten post 23 sierpień 2009, 17:45
mam jeszcze jeden problem bo jezeli mam kilka artykulow na stronie to przy ocenieniu jednego automatycznie ocenia reszte, da sie to jakos krotko i zgrabnie napisac czy trzeba implementowac funkcje ktora bedzie sprawdzac ktory artykul jest obecnie ocenianiany ?

$query = "UPDATE articles SET suma=suma+$ocena, ocen=ocen+1 WHERE id=$id";
Przecież skoro podajesz $id, to oceniany będzie tylko jeden artykuł, więc nie wiem jakim cudem oceniasz wszystkie.

skrypt jest w pentli wiec wykonuje sie wiele razy dla roznych $id, JS wysyla ta sama wartosc dla kazdego $id

wysylam na PW link jak to wyglada
Użytkownik time-bandit edytował ten post 24 sierpień 2009, 19:02
To może pokaż kod PHP, bo z samego HTML-a niewiele można powiedzieć. Mógłbyś przekazywać jeszcze ID podczas oceniania i nie byłoby problemu.

moglbys cos wiecej napisac o tym przekazywaniu ID ? jak to ma wygladac ?
Użytkownik time-bandit edytował ten post 25 sierpień 2009, 17:49
Po prostu w formularzu robisz ukryte pole z identyfikatorem. Już pokazywać Ci chyba nie trzeba, a jeśli nie, to kurs HTML i manual PHP.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.