Gå til innhold

Toppliste script


Anbefalte innlegg

Fant et par bugs.. har rettet det nå:

 

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');

$ip = $_SERVER['REMOTE_ADDR'];

$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 IP='$ip'";

$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();

}

}

?>

 

Koden kjører du i phpMyAdmin jah... :)

Lenke til kommentar
Videoannonse
Annonse
Hmm .. Nå er plutselig sperren HELT borte. Sjekk her.

 

Er nok enda en bug her et sted ..

 

Fortsatt takk for hjelpen !

 

Det var merkelig...

Det virker her...

 

Paster inn koden på nytt, i tillfelle det er noen endringer du ikke har fått med:

 

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' );

$ip = $_SERVER['REMOTE_ADDR'];

$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 IP='$ip'";

$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 igjen!

 

En liten merknad i koden i index.php;

<td width=150px><img src=band/$bilde</td>

.. etter band/$bilde hører det med en ">", sånn du har det feilfritt i tilfelle skriptet skal brukes til andre foremål :)

 

Har lagt inn koden, og nå funker iallefall sperren din. :)

Men det brurde ha vært mulig å stemme 1 gang til dagen .. fikser du det?

 

EDIT:

 

nå er det samme problem som tidligere, sperren funker ikke lengre. Hva kan være galt? Gidder du sjekke siden og se selv? Takk!

Lenke til kommentar

Obs! Dersom du skal registrere en stemme, trenger du ikke hente ut antall stemmer fra databasen før du legger til "en stemme" og oppdaterer posten. Det kan fint utføres med en enkelt linje sql, slik:

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

Lenke til kommentar

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

 

Takk for tipset... skal endre det... :)

 

<td width=150px><img src=band/$bilde</td>

.. etter band/$bilde hører det med en ">", sånn du har det feilfritt i tilfelle skriptet skal brukes til andre foremål

 

Skal fikse det også... takk! :)

 

nå er det samme problem som tidligere, sperren funker ikke lengre. Hva kan være galt? Gidder du sjekke siden og se selv? Takk!

 

Kan se etter hva som står i tabellen "voted"?

Se om IP'ene kommer inn dit...

 

Sven-o:

Gidder du å se over koden, å se om du finner noe feil? :)

Jeg har sett så mye på koden at jeg har "sett meg blind"...

Lenke til kommentar

Har lagt inn koden, og nå funker iallefall sperren din. :)

Men det brurde ha vært mulig å stemme 1 gang til dagen .. fikser du det?

 

Der har Sven-o skrevet noe i en annen post :)

 


//Hent ut fra samme tabell de som har vært aktive siste 30min 



$timeout = 1800;  //1800sekunder=30min 

   

//Hent tidspunkt 

$timeout = time() - $timeout; 



//Hent ut antall brukere online 

$usersonline = @mysql_num_rows(@mysql_query("SELECT ip FROM tblonline  WHERE timestamp>$timeout", $DB)); 

 

Dette kan jo brukes...

Sjekke opp mot "date" i "voted", men jeg bruker jo ikke standard tidsformat, men det kan jo endres... :)

Må se litt på det i morgen...

Lenke til kommentar
Oj her var det mange svar :)

 

Sven-o:

Altså, sql-dumpen tilsvarer koden jeg fikk av Zorac her, den ser du hvis du blar litt tilbake. :)

 

Zorac:

Gode greier! Henger her imens jeg ..  :D

 

Sjekket du i "voted" om den har fylt inn noen IP-adresser?

Og eventuelt når...

Lenke til kommentar
Oj her var det mange svar :)

 

Sven-o:

Altså, sql-dumpen tilsvarer koden jeg fikk av Zorac her, den ser du hvis du blar litt tilbake. :)

 

 

Du misforstår. Ta en eksport av alle tabellene og dataene dine fra databasen, slik at jeg kan teste det hos meg. Gidder ikke opprette tabeller og registrere data manuelt(lat)...

Lenke til kommentar

Har fixet det med at man kan vote 1 gang på 24timer, hver gang noen voter, sletter den også de som har stemt for lengre enn 24 timer siden... :)

 

Her er koden:

 

check_ip.php:


<?php

function check_ip() {

$ip = $_SERVER['REMOTE_ADDR'];



//Hent ut fra samme tabell de som har stemt det siste døgnet

$timeout = 86400;  //86400sekunder=24timer

   

//Hent tidspunkt 

$timeout = time() - $timeout; 



/*  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 IP='$ip' AND timestamp>$timeout";

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

$num=mysql_numrows($result);



$query = "DELETE FROM voted WHERE timestamp<$timeout";

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



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();

}

}

?>

 

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 = "UPDATE vote SET stemmer=stemmer+1 WHERE ID = '$_REQUEST[ID]' LIMIT 1";;

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



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

$ip = $_SERVER['REMOTE_ADDR'];

$timestamp=time();

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

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



include 'index.php';



?>

 

SQL:


CREATE TABLE `voted` (

 `ID` int(11) NOT NULL auto_increment,

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

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

 `timestamp` int(20) NOT NULL default '0',

 PRIMARY KEY  (`ID`)

) TYPE=MyISAM AUTO_INCREMENT=1;

 

Slett tabellen "voted" og opprett den på nytt med koden over... :)

Lenke til kommentar

Hmm.. OK, før jeg sier noe prøver jeg ut det oppdaterte skriptet.

Kommer med tilbakemeldning etterpå!

 

Si ifra om dere trenger utskriften likevel :)

 

EDIT:

Det ser ut som om sperren fungerer bare av og til. Etter å ha avgitt stemme, og "STEM" forsvinner, kan man bare trykke F5 / Refresh så omgår man sperren ser det ut som.

 

Fint om dere kan se om dere får opp det samme, selv har jeg prøvd med å skifte IP. Før jeg skifter IP'en virker det som om sperren virker 100%, men etter å ha fått ny IP, og stemmet én gang kan jeg trykke Refresh og stemmene blir flere etter hver gang jeg trykker. MEN - dette gikk ikke ved IP #1 ..

 

 

Heh, litt snodig dette her!

 

EDIT #2:

En annen ting jeg legger merke til, er at bandet med flest stemmer ikke ligger øverst på lista alltid. F.eks etter å ha stemmet på en artist, og man ender på adressen som lyder: ../toppliste/vote.php?ID=3 Så vil kanskje denne ha 26, mens førsteplassen domineres av en med 11 stemmer..

Lenke til kommentar

Jeg sorterer etter "beskrivelse"... bytt ut linje 18 i index.php med denne:

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

 

Da sorterer den på "stemmer".

 

Send hele tabellen til sven-o... :)

Kanskje han ser hvorfor bare den første IP'en blir sperret...?

Lenke til kommentar

Skiftet fra "beskrivelse" til "stemmer", men det skjedde visst ingen forandring, merkelig nok.. Heller ikke etter å ha slettet cookies eller temp. internet files.

Sender dump av databasen til både deg og Sven-O så blir kanskje det hele litt lettere :)

Lenke til kommentar
Skiftet fra "beskrivelse" til "stemmer", men det skjedde visst ingen forandring, merkelig nok.. Heller ikke etter å ha slettet cookies eller temp. internet files.

Sender dump av databasen til både deg og Sven-O så blir kanskje det hele litt lettere :)

Rart... har ikke scriptet her, så får ikke testet... skal se på det på mandag...

Kanksje det ikke går ann å sortere på "integrers"? hmm...

 

Dette har ikke noe med SQL-dumpen å gjøre... så lenge du har ett felt som heter "stemmer", så skal det gå ann å sortere på det... (tror jeg)

Lenke til kommentar

Nei, vet det ikke har noe med sorteringen å gjøre, men i forbindelse med hvorfor stemme-sperren ikke alltid er operativ.

 

Nå har jeg tenkt å ha listen innenfor en index-fil som en frame, og dermed vil man kanskje ikke like enkelt kunne dobbel, trippel-stemme osv.

 

Men index.php viser trossalt ikke det samme som resultatet som index.php ETTER man har votet (med ID1,2,3 etter filnavnet). Dette er vel litt mystisk?

Lenke til kommentar

Har kikket litt på scriptene, og har funnet og/eller forandret følgende:

 

index.php

-Forandret select-setningen slik at den nå sorterer på antatll stemmer.


<?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 stemmer DESC";

$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

Her fikk jeg feilmelding når jeg prøvde å stemme pga. en feil ved registrering i voted.

-Forandret sql ved registrering i tabellen voted.

-Forandret sql ved registrering av stemmer.


<?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 = "UPDATE vote SET stemmer=stemmer+1 WHERE ID = '$_REQUEST[ID]' LIMIT 1";

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



$ip = $_SERVER['REMOTE_ADDR'];

$query = "INSERT INTO voted (IP,timestamp)VALUES ('$ip',".time().")";

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



include 'index.php';



?>

 

 

check_ip.php

-Flyttet på setningene som sletter gamle poster i "voted" opp, slik at de blir slettet før vi sjekker ip.

-Fjernet hele feltet "dato" fra tabellen "voted". Så lenge tabellen inneholder en timestamp kan denne benyttes til å vise dato.

-La inn en formatering av "timestamp" slik at denne vises som en forståelig dato.


<?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 */



$timeout = time() - 86400; //86400sekunder=24timer



$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 = "DELETE FROM voted WHERE timestamp<$timeout"; 

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





$query = "SELECT * FROM voted WHERE IP='$ip'";

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

$num=mysql_numrows($result);



if ($num>0) {

$dato=mysql_result($result,0,"timestamp");

$dato=getdate($dato);

$tid=array($dato['hours'],$dato['minutes']);

if(strlen($tid[0]) < 2)

$tid[0] = "0".$tid[0];

if(strlen($tid[1]) < 2)

$tid[1] = "0".$tid[1];

$tid=$tid[0].":".$tid[1];

$dato = $dato['mday']."/".$dato['mon']." ".$dato['year'];



echo "Beklager, noen med IP adressen <b>$ip</b> avga stemme <b>$tid $dato</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();

}

}



?>

 

Sperren funker hos meg nå.

Selv ville jeg nok ha gjort hele scriptet annerledes, med en annen tabellstruktur. Mye svakheter her med tanke på fleksibilitet. Om du er intressert kan jeg komme med en annen løsning senere, men har ikke tid akkurat nå. Hovedsaken er iallefall at det funker. :wink:

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...