13. september 2005 - 15:23
Der er
18 kommentarer og 1 løsning
Stem på artikkel
Jeg har lavet et artikkel system til mit community, hvor brugere kan tilføje artikler, Nu ville jeg gerne have det sådan at man kan stemme på artiklerne, hvor 5 er det højste, altså, 1, 2, 3, 4 eller 5 skal man kunne stemme, Jeg har aldrig være god til det med afstemning, så kan i mon hjælpe ?
Annonceindlæg fra Computerworld
13. september 2005 - 15:45
#1
hmm hvad med at gemme de gamle stemmer i databasen som et ekstra felt ved artiklen som antalstemmer og total "35;22" og så hente de frem næste gang med $stemmer = explode(";", $row[stemmer]); $gennemsnit = $stemmer[0]/$stemmer[1]; $antalstemmer = $stemmer[1]; og når der så er en der stemmer: $stemme = $nystemme+$stemmer[0]; INSERT INTO tabel (stem) VALUES ($stemme.";".$stemmer[1]+1;) hmm sært skodskrevet men håber du forstår heh
13. september 2005 - 16:08
#2
hehe forstod jeg ikke, skal jeg oprette en ny tabel ikke hvad ? CREATE TABLE `artikler` ( `id` int(11) NOT NULL auto_increment, `user_id` int(11) NOT NULL default '0', `kategori` varchar(255) NOT NULL default '', `overskrift` varchar(255) NOT NULL default '', `besked` longtext NOT NULL, `date` longtext NOT NULL, `bnavn` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ); Sådan ser min artikel tabel ud.
13. september 2005 - 16:28
#3
så tilføj et felt der hedder afstemning eller sådan noget lign. og når så man stemmer skal den smide hvad de nu stemte (1, 2, 3, 4, 5) i det felt sammen med hvor mange gange der er stemt eks: første gang der stemmes og der bliver stemt 4 skal den se sådan her ud 4;1
13. september 2005 - 16:28
#4
du kan lave en default på 0;0
13. september 2005 - 16:32
#5
Puha jeg forstår ikke hvad du mener med noget af det :-(
13. september 2005 - 19:44
#6
Jeg ville nok vælge at implementere det som en ny tabel, lad os kalde den for artikelStemmer, med 3 felter i: ID - id'et på den pågældende stemme ArtikelID - id'et på den artikel som der stemmes på Stemme - selve stemmen 1-5 Måske ville jeg også have et felt med som angav hvem der havde stemt: BrugerID - id'et på brugeren Hvis bruger 42 stemmer på artikelen med id'et 12 og giver den karakteren 3, ville jeg indsætte med denne SQL: INSERT INTO artikelStemmer (ArtikelID, BrugerID, Stemme) VALUES (12, 42, 3) Når jeg skulle udregne den samlede karakter for artikel 12, så ville SQL-sætningen til dette se sådan her ud: SELECT AVG(Stemme) AS Gennemsnit FROM artikelStemmer WHERE ArtikelID=12
13. september 2005 - 21:18
#7
Okey (: vil jeg prøve, Men hvad så når man skal stemme Så skal man vælge 1,2,3,4 eller 5, de skal være input knapper, altså: <?=$rs["overskrift"];?> - <?=$rs["date"];?> - Stem: ????? <? echo nl2br($rs["besked"]); ?>
13. september 2005 - 21:24
#8
Jeg ville lave stemmerne som enten et sæt radiobuttons: <input type="radio" name="stemme" value="1">1 <input type="radio" name="stemme" value="2">2 <input type="radio" name="stemme" value="3">3 <input type="radio" name="stemme" value="4">4 <input type="radio" name="stemme" value="5">5 - eller som en select: <select name="stemme"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select> Jeg tror nu nok at jeg ville vælge radiobuttons i dette tilfælde.
13. september 2005 - 23:10
#9
Nå ja (: Men når det postes skal det ikke se sådan ud i inset: INSERT INTO artikelStemmer (ArtikelID, BrugerID, Stemme) VALUES ('".$_GET["id"]."', '".$rs["id"]."', '".$_POST["stemme"]."') Evt ?
13. september 2005 - 23:16
#10
Du skal lige bestemme dig til om du vil bruge $_GET eller $_POST. Jeg ville nok selv vælge post... Alle værdierne komme fra formen, så det er ikke noget med $rs. Endeligt er alle id'erne tal, så der skal ikke '-tegn rundt om dem: $sql = "INSERT INTO artikelStemmer (ArtikelID, BrugerID, Stemme) VALUES (" . $_POST["ArtikelID"] . ", " . $_POST["BrugerID"] . ", " . $_POST["stemme"] . ")";
14. september 2005 - 09:32
#11
Hehe ok :-) Og når jeg skal udskrive er det vel SELECT AVG(Stemme) AS Gennemsnit FROM artikelStemmer WHERE ArtikelID=12 Som du sagde, men hvad for den til at udskrive tallet ? <?=$Gennemsnit;?> ?
14. september 2005 - 14:03
#12
$sql = "SELECT AVG(Stemme) AS Gennemsnit FROM artikelStemmer WHERE ArtikelID=12"; $result = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($result) or die(mysql_error()); echo $row["Gennemsnit"];
14. september 2005 - 16:07
#13
Fedt :D det virker, men tallet udskrives eks: 3.4000 Skal det være muligt det bare udskrives 3.4 ?
14. september 2005 - 18:12
#15
Tak :) Er der en sidste ting du vil hjælpe mig med ? At udskrive de 20 artikler der er højst rated ? Eller vil du bare have dine points :)?
14. september 2005 - 18:21
#16
Prøv med denne: SELECT ArtikelID, Avg(Stemme) AS Gennemsnit FROM artikelStemmer GROUP BY ArtikelID ORDER BY Gennemsnit DESC LIMIT 0, 20
14. september 2005 - 19:03
#17
Det skal helst være sådan at man kan se overskriften på artiklen, altså så på en eller anden måde tabellen artikler også bliver indblandet. :-o
14. september 2005 - 19:10
#18
<?php include("includes/top.php"); $conn = mysql_query("SELECT artikel_id, Avg(stemme) AS Gennemsnit FROM artikelStemmer GROUP BY artikel_id ORDER BY Gennemsnit DESC LIMIT 0, 20"); while($rs = mysql_fetch_assoc($conn)) { $conn2 = mysql_query("SELECT * FROM artikler WHERE id = '$rs[artikel_id]'"); $rs2 = mysql_fetch_assoc($conn2); ?> <?=$rs2["overskrift"];?> - <? echo round($rs["Gennemsnit"], 1); ?><br /> <?php } include("includes/bund.php"); ?> Ordnet det selv (: Smid et svar, og tak for det hele :D
14. september 2005 - 19:16
#19
Svar :^)
Vi tilbyder markedets bedste kurser inden for webudvikling