Gå til innhold

Toppliste script


Anbefalte innlegg

Ønsker ett skript som gjør det mulig for (anonyme) brukere å stemme på en artist/band. Resultatet viser den med flest stemmer øverst, osv nedover.

Ett veldig enkelt skript altså, problemet er bare at jeg har veldig basic php kunnskaper.

Håper på litt hjelp her ifra ! :)

 

 

PS:

En sperre for juks hadde også vært fint (IP-logging kansje?).

Lenke til kommentar
Videoannonse
Annonse

Du må jo da enten bruke en database eller en fil for å lagre resultater.

Database er jo absolutt å annbefale.

MySQL er vell det som de fleste bruker med php. Hver gang linken klikkes legg til stemmen og ip'en i databasen. Eller filen om du må bruke det.

Ved IP logging vær oppmerksom på at de fleste ikke har statisk ip, dvs hver gang de kobler til på nytt vil de bli tildelt ny IP.

For å da blokkere de må du istedenfor å blokke f.eks 111.111.111.111 blokke noe som 111.111.***.*** som kan være ISP'ens nett, du vil da blokke alle som bruker IP som begynner med dette.

 

Så hvor smart IP logging er for å forhindre juks kan diskuteres. Du kan jo også se på cookies, men det er jo lett ungå ved å ikke tillate cookies, eller manuelt slette.

IP logging + cookies kan jo kanskje kombineres, og satse på at man da får logget de fleste.

 

Håper det har satt litt mer fart på tankene dine :)

Er alt for sent på kvelden(morran) til å komme med noe faktisk kode forslag for meg.

Lenke til kommentar

Jeg har mySQL med phpMyadmin tilgjengelig.

IP- eller cookie-sperren kan jeg se på senere evt, det viktigste er å få opp ett script som kan gjøre det jeg beskrev i første post.

 

Noen kodetips?

Lenke til kommentar

Jeg har lett en god del rundt, uten gode resultater.

Problemet er å få til en løsning der man per alternativ har

- tittel

- bilde

- beskrivelse

 

Må også kunne vise resultatet direkte hele tiden, på siden av alternativet. En VOTE knapp må også høre med per alternativ. Har laget en liten skisse, litt enklere å se hva jeg mener da: Skisse #1

Lenke til kommentar
Ingen som kan komme med et godt tips?

Alle bidrag belønnes med navnet sitt på siden :)

 

Lag denne tabellen:


CREATE TABLE `vote` (

 `ID` int(11) NOT NULL auto_increment,

 `bilde` varchar(50) NOT NULL default '',

 `beskrivelse` varchar(255) NOT NULL default '',

 `stemmer` int(11) NOT NULL default '0',

 PRIMARY KEY  (`ID`)

) TYPE=MyISAM AUTO_INCREMENT=1;

 

index.php:


<?php

/*  Skriv inn dine ting under */

$dbhost = '127.0.0.1';

$dbusername = 'root';

$dbpasswd = 'root';

$database_name = 'vote';



$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd") 

       or die ("Couldn't connect to server.");

       

$db = mysql_select_db("$database_name", $connection)

       or die("Couldn't select database.");

       

       

$query = "SELECT * FROM vote LIMIT 0,50";

$result = mysql_query($query) or die("<br>Query failed:<br> $query");

$num=mysql_numrows($result);



echo "<table width=500px>";

$i=0;

       while ($i < $num) {

       $ID=mysql_result($result,$i,"ID");

       $bilde=mysql_result($result,$i,"bilde");

       $beskrivelse=mysql_result($result,$i,"beskrivelse");

       $stemmer=mysql_result($result,$i,"stemmer");



       echo "<tr><td>$ID</td> <td><img src=kildekatalog/$bilde</td> <td>$beskrivelse</td> <td>$stemmer</td> <td><a href=vote.php?ID=$ID>Stem</a></td></tr>";

       

++$i;

}





echo "<br><br><br><br><center><font size=1 face=verdana>Laget av Sven-Ove Bjerkan</center></font>";        

?>

 

vote.php:


<?php

/*  Skriv inn dine ting under */

$dbhost = '127.0.0.1';

$dbusername = 'root';

$dbpasswd = 'root';

$database_name = 'vote';



$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd") 

       or die ("Couldn't connect to server.");

       

$db = mysql_select_db("$database_name", $connection)

       or die("Couldn't select database.");

       

       

$query = "SELECT stemmer FROM vote WHERE ID='$_REQUEST[ID]' LIMIT 1";

$result = mysql_query($query) or die("<br>Query failed:<br> $query");

$num=mysql_numrows($result);



$stemmer=mysql_result($result,0,"stemmer");

$ny_stemmer=$stemmer+1;



$query = "UPDATE vote SET stemmer = $ny_stemmer WHERE ID = '$_REQUEST[ID]' LIMIT 1";

$result = mysql_query($query) or die("<br>Query failed:<br> $query");



include 'index.php';



?>

 

 

:)

Lenke til kommentar

Hei igjen!

 

Har laget tabellen, index.php og vote.php

 

Men får følgende feil når jeg prøver å aksessere vote.php på serveren;'

Warning: Unable to jump to row 0 on MySQL result index 2 in /usr/local/psa/home/vhosts/serverenmin/httpdocs/hipoghop/toppliste/vote.php on line 19

Laget av Sven-Ove Bjerkan 

 

Fant ut at det var denne linjen:

$stemmer=mysql_result($result,0,"stemmer");

Lenke til kommentar
Hehe  :)  

Da må jeg inn i vote.php og sette inn valg der altså?

Er litt grønn på området så du får ha meg unnskyldt ..

 

Nei... du trenger ikke å endre annet en hvilken katalog bildene ligger i samt IP, og login-info til MySQL i .php filene...

 

Du bruker phpMyAdmin til å legge inn....

Du trenger ikke å fylle inn ID og stemmer.

Bilde skrives slik: bildenavn.jpg

Beskrivelse må fylles inn... :)

Lenke til kommentar
Flott! Skal teste det ut nå .. 8)

 

Edit:

Ser ut til  å funke bra nå! Takk skal du ha!

PS: Håper det er OK jeg setter navnet ditt _under_ tabellen slik jeg får plass til en heading :)

 

:)

Trodde da jeg satte den under tabellen jeg? hum...

jaja... bare flytt navnet mitt du... :)

Lenke til kommentar

Hei igjen!

Du hadde flyttet navnet ditt under tabellen, men det kommer ovenfor uansett. Dette fikser jeg nok selv.

 

Ser at jeg mangler to småting:

 

- "Tittel" på band

- En automatisk oppdatering som setter band med flest stemem som nummer 1 på lista.

 

Tittel er forsåvidt grei, den skal jeg nok klare. Men, hvordan må jeg gå fram for å få til sistnevnte?

Lenke til kommentar

Har nå gjort et par endringer:

Den sorterer på beskrivelse

Den nekter å ta i mot stemmer fra samme IP

Navnet mitt havner nederst

 

Her er koden:

 

SQL:


# phpMyAdmin MySQL-Dump

# version 2.5.0-rc1

# http://www.phpmyadmin.net/ (download page)

#

# Vert: localhost

# Generert den: 05. Jun, 2003 klokka 12:20 PM

# Tjenerversjon: 4.0.12

# PHP-Versjon: 4.3.1

# Database : `vote`

# --------------------------------------------------------



#

# Tabellstruktur for tabell `vote`

#

# Opprettet: 02. Jun, 2003 klokka 15:01 PM

# Sist oppdatert: 05. Jun, 2003 klokka 12:01 PM

#



CREATE TABLE `vote` (

 `ID` int(11) NOT NULL auto_increment,

 `bilde` varchar(50) NOT NULL default '',

 `beskrivelse` varchar(255) NOT NULL default '',

 `stemmer` int(11) NOT NULL default '0',

 PRIMARY KEY  (`ID`)

) TYPE=MyISAM AUTO_INCREMENT=1;

# --------------------------------------------------------



#

# Tabellstruktur for tabell `voted`

#

# Opprettet: 05. Jun, 2003 klokka 12:19 PM

# Sist oppdatert: 05. Jun, 2003 klokka 12:19 PM

#



CREATE TABLE `voted` (

 `ID` int(11) NOT NULL auto_increment,

 `IP` varchar(12) NOT NULL default '0',

 `date` varchar(20) NOT NULL default '',

 PRIMARY KEY  (`ID`)

) TYPE=MyISAM AUTO_INCREMENT=1;

 

index.php:


<?php

/*  Database Information - Required!!  */

/* -- Configure the Variables Below --*/

$dbhost = '127.0.0.1';

$dbusername = 'root';

$dbpasswd = 'root';

$database_name = 'vote';



/* Database Stuff, do not modify below this line */



$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd") 

       or die ("Couldn't connect to server.");

       

$db = mysql_select_db("$database_name", $connection)

       or die("Couldn't select database.");

       

       

$query = "SELECT * FROM vote ORDER BY 'beskrivelse'";

$result = mysql_query($query) or die("<br>Query failed:<br> $query");

$num=mysql_numrows($result);



echo "<table>";

$i=0;

       while ($i < $num) {

       $ID=mysql_result($result,$i,"ID");

       $bilde=mysql_result($result,$i,"bilde");

       $beskrivelse=mysql_result($result,$i,"beskrivelse");

       $stemmer=mysql_result($result,$i,"stemmer");

   $nummer = $i + 1;

       echo "<tr><td width=20px>$nummer</td> <td width=150px><img src=kildekatalog/$bilde</td> <td width=100px>$beskrivelse</td> <td width=20px>$stemmer</td>";



//Hvis de allerede har votet vises ikke linken "Stem"...

if (!isset($_REQUEST[ID])) {

echo "<td width=40px><a href=vote.php?ID=$ID>Stem</a></td></tr>";

}

       

++$i;

}



echo "</table><br><br><br><br><center><font size=1 face=verdana>Laget av Sven-Ove Bjerkan</center></font>"; 

       

?>

 

vote.php:


<?php



if (!isset($_REQUEST[ID])) {

include 'index.php';

exit();

}



/*  Database Information - Required!!  */

/* -- Configure the Variables Below --*/

$dbhost = '127.0.0.1';

$dbusername = 'root';

$dbpasswd = 'root';

$database_name = 'vote';



/* Database Stuff, do not modify below this line */



$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd") 

       or die ("Couldn't connect to server.");

       

$db = mysql_select_db("$database_name", $connection)

       or die("Couldn't select database.");

       

include 'check_ip.php';

check_ip();

   

$query = "SELECT stemmer FROM vote WHERE ID='$_REQUEST[ID]' LIMIT 1";

$result = mysql_query($query) or die("<br>Query failed:<br> $query");

$num=mysql_numrows($result);



$stemmer=mysql_result($result,0,"stemmer");

$ny_stemmer=$stemmer+1;



$query = "UPDATE vote SET stemmer = $ny_stemmer WHERE ID = '$_REQUEST[ID]' LIMIT 1";

$result = mysql_query($query) or die("<br>Query failed:<br> $query");



$dato=DATE('m.d.y H:i');

//INSERT  INTO  `voted` (  `ID` ,  `IP` ,  `date`  ) VALUES (  '',  '127.0.0.1',  '05.06.03 12:00' );

$query = "INSERT INTO voted VALUES ('','$ip','$dato')";

$result = mysql_query($query) or die("<br>Query failed:<br> $query");



include 'index.php';



?>

 

check_ip.php:


<?php

function check_ip() {

$ip = $_SERVER['REMOTE_ADDR'];



/*  Database Information - Required!!  */

/* -- Configure the Variables Below --*/

$dbhost = '127.0.0.1';

$dbusername = 'root';

$dbpasswd = 'root';

$database_name = 'vote';



/* Database Stuff, do not modify below this line */



$connection = mysql_pconnect("$dbhost","$dbusername","$dbpasswd") 

       or die ("Couldn't connect to server.");

       

$db = mysql_select_db("$database_name", $connection)

       or die("Couldn't select database.");





$query = "SELECT * FROM voted WHERE ID=1";

$result = mysql_query($query) or die("<br>Query failed:<br> $query");

$num=mysql_numrows($result);



if ($num>0) {

$date=mysql_result($result,0,"date");

echo "Beklager, noen med IP adressen <b>$ip</b> avga stemme <b>$date</b>.<br>For å unngå manipulering av resultatet tillater vi ikke flere stemmer fra samme IP.<br><br><a href=index.php?ID>Tilbake</a>";

exit();

}

}

?>

 

:)

Lenke til kommentar
Hei!

Veldig bra! Nå begynner det å likne noe ja!

Men er det noen mulighet for at jeg kan resette stemmene, f. eks en hver måned eller hver 2. måned?

 

Takk skal du ha.

 

Da kommer det vel mer an på serveren, tror jeg... iom at PHP-kommandoer ikke blir kjørt på et gitt tidspunkt, men når siden åpnes...

 

Du kan sikkert legge noe inn i serveren som kjører en gang i måneden som utfører "tømme-kommandoen". Hvilket OS er serveren? Har du admin-tilgang?

 

Ellers kan du jo gjøre det manuelt ved å bruke "Tøm"i phpMyAdmin...

 

Mulig noen andre vet om en bedre løsning på dette? :)

 

Edit:

Litt dumt å tømme hele tabellen da... mister jo de forskjellige valgene oxo da... :) er vel mulig å kjøre en SQL kommando som nullstiller kollonen "stemmer"... har ikke manualen her... sjekker det i morgen... (eller, i dag heter det vel :p)

Lenke til kommentar

Har ikke admin rettigheter på serveren, og ikke noen SSH mulighet.

 

Kodesnutten som sletter stemmene kjøres i phpMyadmin forsto jeg rett?

Har sett mange toppliste (til web-sider) script som resettes f.eks en gang i måneden; kanskje jeg kan låne litt kode fra disse?

 

Ellers så får jeg ikke gitt min stemme uansett om jeg skifter IP (kobler av og på adsl-modem), og jeg har faktisk aldri sett "0" bli til "1" på det første band'et jeg prøvde etter du mekket den nye koden. Du kan sjekke siden her, og teste selv.

 

Det er mulig modemet må være avslått i et par minutter for så å slås på igjen, men dette er vel egentlig et teknisk spm.

 

Takk!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...