Avatar billede unsafe Nybegynder
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 ?
Avatar billede dmdisco Nybegynder
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
Avatar billede unsafe Nybegynder
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.
Avatar billede dmdisco Nybegynder
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
Avatar billede dmdisco Nybegynder
13. september 2005 - 16:28 #4
du kan lave en default på 0;0
Avatar billede unsafe Nybegynder
13. september 2005 - 16:32 #5
Puha jeg forstår ikke hvad du mener med noget af det :-(
Avatar billede nielle Nybegynder
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
Avatar billede unsafe Nybegynder
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"]); ?>
Avatar billede nielle Nybegynder
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.
Avatar billede unsafe Nybegynder
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 ?
Avatar billede nielle Nybegynder
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"] . ")";
Avatar billede unsafe Nybegynder
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;?> ?
Avatar billede nielle Nybegynder
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"];
Avatar billede unsafe Nybegynder
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 ?
Avatar billede nielle Nybegynder
14. september 2005 - 17:13 #14
Sådan her:

echo round($row["Gennemsnit"], 1);

Mere om round() på:

http://dk2.php.net/round
Avatar billede unsafe Nybegynder
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 :)?
Avatar billede nielle Nybegynder
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
Avatar billede unsafe Nybegynder
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
Avatar billede unsafe Nybegynder
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
Avatar billede nielle Nybegynder
14. september 2005 - 19:16 #19
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester