Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ocenianie pozycji - jak ?
Forum PHP.pl > Forum > Przedszkole
GreenGo
Witam.
Napisałem sobie prosty skrypcik który wysyła linki z opisem do bazy danych a następnie je wyświetla. Niestety nie moge sobie poradzić z dodaniem opcji oceniania "fajny" i "niefajny".
Gdyby ktoś mi napisał jak tego moge dokonać to byłbym wdzięczny smile.gif

Pozdrawiam.
hwao
dodajesz +1 (fajny) -1 nie fajny (albo 2 pola osobne w bazie fany, niefajny)
jak jest na minusie to jest niefajny jak na plusie to fajny.. tyle:P
GreenGo
Cytat
dodajesz +1 (fajny) -1 nie fajny (albo 2 pola osobne w bazie fany, niefajny)
jak jest na minusie to jest niefajny jak na plusie to fajny.. tyle:P

Tyle to i ja wiem winksmiley.jpg w bazie mam dwa pola na TAK i NIE. Niestety nie wiem jak napisać skrypt który by mi wysyłał punkt do odpowiedniego pola winksmiley.jpg
Mar3k
Najprościej przypisać wartości dla ,np. :TAK=1 NIE=0
i zliczasz w bazie punkty .....

  1. <?php
  2. if (isset($tak)){
  3. $query="INSERT INTO `TUTAJ_NAZWA_BAZY` ( `tak` , `nie` ) 
  4. VALUES ('1', '0')";
  5. {
  6. else
  7. {
  8.  $query="INSERT INTO `TUTAJ_NAZWA_BAZY` ( `tak` , `nie` ) 
  9. VALUES ('0', '1')";
  10. }
  11. // tutaj dalsza czesc kodu
  12. ?>


Nie iwem czy Ci o to chodziło ..
Kas
Daj poprostu dwie kolumny:
- fajny
- niefajny

Ustawiasz na począteku na 0 oraz 0.
Potem robisz +1 dla odpowiedniego pola.
Pamiętaj o zabezpieczeniu przed wielokrotnym głosowaniem (sesje lub cookies).
GreenGo
@Kas - ja teorie znam ale nie wiem jak to przerzuciś na kod php :/

@Mar3k - troche nie kumam jak Ty chcesz to zrobić tongue.gif trzeba jakoś przyciski dodać żeby wysłać i jak to przyporządkować odpowiedniemu linkowi ?

Moje osiągnięcia stanęły na tym etapie :
Kod
$rezult = mysql_query('SELECT * FROM links LIMIT 0, 5');

if ($rezult){
    while ($w = mysql_fetch_array($rezult)) {
        $ID = $w['ID'];
        $USER = $w['USER'];
        $LINK = $w['LINK'];
        $OPIS = $w['OPIS'];

        echo " $ID | <a href=\"$LINK\">$OPIS</a> | Dodał: $USER";

}

}

A tabela w bazie wygląda tak:
Kod
| ID | USER | LINK | OPIS | TAK | NIE |

Pozdrawiam.
stefan_precz
to zrob selecta

  1. <form action="blahhh.php" method="post" />
  2. <select size="1" name="ocena"><option value="">--Wybierz--</option><option value="1" >Fajny</option><option value="2" >Glupi</option></select><input type="submit" value="ocen" /></form>


potem

  1. <?php
  2.  
  3. $ocena = $_POST['ocena'];
  4.  
  5. if ($ocena == '1')
  6. {
  7. UPDATE tak
  8. }
  9. elseif ($ocena =='0')
  10. {
  11. UPDATE nie
  12. }
  13.  
  14. ?>
GreenGo
Ok, rozumiem, że ten select mam wstawić do mojego echo. Ale potem jak mam updatować ? To znaczy jak zrobić zaby updatowało sie pole które chce ?
ebe
Wystarczy jedno pole np `FAJNE_TO_DOBRE_TO_JEST` i w zależności czy tak czy nie daje 1 lub 0
stefan_precz
no tak mniej więcej tak

  1. <?php
  2. mysql_query("UPDATE tabela SET tak='$ocena'") or die...
  3. ?>
GreenGo
@stefan_precz - no ale wtedy uaktualni się całe pole czyli wszystkie pozycje w bazie danych dostaną po 1`dnym głosie a nie tylko jedna komórka tabeli sad.gif
stefan_precz
myslałem ze to ma być jenorazowe jeśli tak to zrób

  1. <?php
  2. UPDATE tabela SET tak = ocena+$ocena
  3. ?>
GreenGo
No ale wtedy też się wszystko uaktualni sad.gif Trzeba by podać jakiś warunek chyba ale nie wiem jaki :/
stefan_precz
no więc do
  1. <form action="blahhh.php" method="post" />
dodaj na
  1. <form action="blahhh.php?id="id" " method="post" />


wtedy zmienna $id będzie przenosić ID kazdego wpisu no i w zapytaniu robisz tak


  1. <?php
  2. UPDATE tabela SET tak = ocena+$ocena WHERE id='$id'
  3. ?>
ebe
Cytat
<?php
mysql_query("UPDATE tabela SET tak=tak+1 where id=$id_wiersza'")
?>


Już rozumiem co Ci chodzi, natomiast jeśli głos jest na nie

Cytat
<?php
mysql_query("UPDATE tabela SET nie=nie+1 where id=$id_wiersza'")
?>



$id_wiersza to numer id linku który chcesz ocenić (możesz przekazać go w adresie lub w $_POST)
GreenGo
OK więc moje dwa pliki wyglądają tak :

  1. <?php
  2.  
  3. $rezult = mysql_query('SELECT * FROM links LIMIT 0, 5');
  4.  
  5. if ($rezult){
  6. while ($w = mysql_fetch_array($rezult)) {
  7. $ID = $w['ID'];
  8. $USER = $w['USER'];
  9. $LINK = $w['LINK'];
  10. $OPIS = $w['OPIS'];
  11.  
  12. echo " $ID | <a href="$LINK">$OPIS</a> | Dodał: $USER |<form action="wys3.php?id="id" method="post" />
  13. <select size="1" name="ocena"><option value="">--Wybierz--</option><option value="1" >Fajny</option><option value="2" >Glupi</option></select><input type="submit" value="ocen" /></form> |<br>";
  14.  
  15.  
  16. }
  17.  
  18. }
  19.  
  20. ?>

oraz
  1. <?php
  2.  
  3.  
  4. if ($ocena == '1')
  5. {
  6. mysql_query("UPDATE links SET TAK=TAK+1 where id=$id'");
  7. }
  8. elseif ($ocena =='0')
  9. {
  10. mysql_query("UPDATE links SET NIE=NIE+1 where id=$id'");
  11. }
  12.  
  13. ?>


Niestety coś źle zrobiłem bo ciągle nie działa sad.gif
ebe
blink.gif primo jak już chcesz wysłać ID w adresie to trzeba go tam umieścić ty dałęś coś takiego:

action=\"wys3.php?id=\"id\"

a powinno być action=\"wys3.php?id=\"$ID\"

po drugie primo jeśli chcesz się dobierać do parametrów formularza to robisz to przez $_GET lub $_POST

czyli

  1. <?php
  2. mysql_query("UPDATE links SET TAK=TAK+1 where id=$_GET['id']");
  3. ?>


sugeruję, poczytać jeszcze o php i uważniej przypatrywać sie temu co się napisało, tak samo robisz z $ocena w warunkach czyli zamiast $ocena == 0, to $_POST['ocena'] aha i nie rozumiem jednej głupoty. SKoro w formularzu dałeś value=1 i value=2 to skąd się wzięło to $ocena==0 i $ocena==1 ?!?
GreenGo
Oto poprawiona wersja smile.gif (ale ciągle niedziała ;( )
  1. <?php
  2.  
  3. $rezult = mysql_query('SELECT * FROM links LIMIT 0, 5');
  4.  
  5. if ($rezult){
  6. while ($w = mysql_fetch_array($rezult)) {
  7. $ID = $w['ID'];
  8. $USER = $w['USER'];
  9. $LINK = $w['LINK'];
  10. $OPIS = $w['OPIS'];
  11.  
  12. echo " $ID | <a href="$LINK">$OPIS</a> | Dodał: $USER |<form action="wys3.php?id="$ID" method="post" />
  13. <select size="1" name="ocena"><option value="">--Wybierz--</option><option value="1" >Fajny</option><option value="2" >Glupi</option></select><input type="submit" value="ocen" /></form> |<br>";
  14.  
  15.  
  16. }
  17.  
  18. }
  19.  
  20. ?>

i
  1. <?php
  2.  
  3. if ($_POST['ocena'] == '1')
  4. {
  5. mysql_query("UPDATE links SET TAK=TAK+1 where id=$_GET['id']");
  6. }
  7. elseif ($_POST['ocena'] =='2')
  8. {
  9. mysql_query("UPDATE links SET NIE=NIE+1 where id=$_GET['id']");
  10. }
  11.  
  12. ?>

Pewnie znowu jakiś głupi błąd tongue.gif

Sory, że jestem taki upierdliwy winksmiley.jpg
Pietras
Pokaż linijki w których łączysz się z bazą i wybierasz tabelę. No i oczywiście rozumiem że pierwszy kod to jakiś plik, a drugi to oddzielny plik nazywający się wys3.php ?
ebe
Nieporadny misiu ale wyrzuca jakiś błąd sql, php? Może łaskawie podałbyś strukturę tej tabeli (raz używasz nazw kolumn z wielkiej litery, raz z małej)...
GreenGo
Nie wyrzuca żednego błędu... Po wybraniu opcji fajne lub nie i wysłaniu w przeglądarce wyświetla się adres
Kod
wys3.php?id=


I nic się nie dzieje sad.gif
Struktura tabali :

Kod
| ID | USER | LINK | OPIS | TAK | NIE |


smile.gif
ebe
Cytat
action=\"wys3.php?id=\"$ID\"


na

Cytat
action=\"wys3.php?id=$ID\"


ten " przed $ID obcinał
GreenGo
Ok już ładnie sie wyświetla w polu adresu smile.gif
Teraz tylko nie chce sie punk do bazy wysłać sad.gif
ebe
zmień where id=$_GET['id'] na where ID=$_GET['id'] oczywiście jeśli nazwy kolumn podałeś z wielkiej litery. 2 sprawdź czy pola TAK i NIE są typu INT, INTEGER
GreenGo
Zmieniłem ID (dużymi literami też mam w bazie) pola TAK i NIE są typu TINYINT.

Po zmianie ciągle nic sie nie dzije sad.gif


EDIT:
OK może mi ktoś teraz powiedzieć w jaki sposób mam to podpiąć pod sesje żeby nie można było głosować więcej niż 1 raz ?
smile.gif
Kas
Robisz tak

1) Podczas głosowania

  1. <?php
  2. session_register("glosowano");
  3. ?>


2) Potem sprawdzasz za każdym razem

  1. <?php
  2. if (session_is_registered(glosowano));
  3. ?>


lub (bezpieczniej)

  1. <?php
  2. if(isset($_SESSION['glosowano']))
  3. ?>



Powinno działać.
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.