FOK!forum / Digital Corner / script voor hitlijst!!
oldenzaaltjuh.nlzaterdag 14 februari 2004 @ 18:06
Heey mensen,

me mysql werkt weer

maar goed daar gaat dit topi niet over

Ik heb nu een script voor een top 100. Alles werkt perfect alleen als je stemt wordt puntenaantal niet verhoogt

kijk op mijn site en klik op top 100 in het menu

dit is de code voor alles

let op in verschillende mappen uiteraard!!

code:
tabel in database: 

CREATE TABLE hitlijst ( 
  h_id int(10) NOT NULL auto_increment, 
  h_artiest text NOT NULL, 
  h_nummer text NOT NULL, 
  h_punten int(10) NOT NULL default '0', 
  PRIMARY KEY  (h_id) 
); 

-------------------------------------------------------- 

database.php: 

<?php 
$link = mysql_connect("localhost" , "user" , "wachtwoord") or die("Kan geen verbinding maken"); 
mysql_select_db("databeest") or die("Kan geen database selecteren"); 
?> 

-------------------------------------------------------- 

hitlijst.php: 

<?php 
include("database.php"); 
$sql = 'SELECT * FROM `hitlijst` ORDER BY `h_punten` DESC LIMIT 0, 100'; 
$resultaat = mysql_query($sql); 
$nr = 0; 
echo "<h2>Top 100</h2>"; 
echo "<p><a href=\"hitlijst.php\" onclick=\"window.open('hitlijst_stem.php','stem','toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,copyhistory=no,scrollbars=no,width=350,height=250,top=100,left=200')\">Stem hier</a></p>"; 
echo "<table border=0>"; 
while($rij = mysql_fetch_array($resultaat)) 

$nr = $nr + 1; 
echo "<tr><td align=right>$nr</td><td> - </td><td>" . $rij["h_artiest"] . "</td><td> - </td><td>" . $rij["h_nummer"]  . "</td><td> </td><td align=right>" . $rij["h_punten"]. " punten</td></tr>";     

echo "</table>"; 
mysql_close($link); 
?> 

-------------------------------------------------------- 

hitlijst_verstuur.php 

<?php 
if (($een!=$twee) and ($een!=$drie) and ($twee!=$drie)) 

$stem = "De eeuwige hardcore top 100"; 
setcookie("Gestemd","$stem", time()+86400); 
$stem_cookie = $_COOKIE["Gestemd"]; 

?> 
<HTML> 
<HEAD> 
    <TITLE></TITLE> 
</HEAD> 
<body> 
<?php 
if (($een==$twee) or ($een==$drie) or ($twee==$drie)) 

echo "<p>Je moet op 3 verschillende nummers stemmen.</p>"; 

else 

if ($stem_cookie != "De eeuwige hardcore top 100") 

include("database1.php"); 
$BannerQuery = mysql_query("SELECT * from hitlijst where h_id='$drie'"); 
while($row = mysql_fetch_array($BannerQuery)) 

$punten = $row["h_punten"]; 
$punten = $punten + 3; 
$ClicksQuery = mysql_query("UPDATE hitlijst SET h_punten='$punten' where h_id='$drie'") or die(mysql_error()); 

$BannerQuery = mysql_query("SELECT * from hitlijst where h_id='$twee'"); 
while($row = mysql_fetch_array($BannerQuery)) 

$punten = $row["h_punten"]; 
$punten = $punten + 2; 
$ClicksQuery = mysql_query("UPDATE hitlijst SET h_punten='$punten' where h_id='$twee'") or die(mysql_error()); 

$BannerQuery = mysql_query("SELECT * from hitlijst where h_id='$een'"); 
while($row = mysql_fetch_array($BannerQuery)) 

$punten = $row["h_punten"]; 
$punten = $punten + 1; 
$ClicksQuery = mysql_query("UPDATE hitlijst SET h_punten='$punten' where h_id='$een'") or die(mysql_error()); 

echo "<p>Gestemd</p>"; 
mysql_close($link); 

else 

echo "<p>Je mag maar één keer per dag stemmen!</p>";     


echo "<form><input type=\"button\" value=\"Sluit venster\" onClick=\"window.close()\"></form>"; 
?> 
</body> 
</html> 

-------------------------------------------------------- 

hitlijst_stem.php 

<?php 
$stem_cookie = $_COOKIE["Gestemd"]; 
?><HTML> 
<HEAD> 
    <TITLE></TITLE> 
</HEAD> 
<BODY> 
<?php 
if ($stem_cookie != "top 100") 

include("database.php"); 
$sql = 'SELECT * FROM `hitlijst` ORDER BY `h_artiest`, `h_nummer`'; 
$resultaat = mysql_query($sql); 
echo "<form name='stem' method='post' action='hitlijst_verstuur.php'>"; 
echo "<select name='drie'>"; 
echo "<option value=''></option>"; 
while($rij = mysql_fetch_array($resultaat)) 

echo "<option value='" . $rij["h_id"] . "'>" . $rij["h_artiest"] . " - " . $rij["h_nummer"] . "</option><br>"; 

echo "</select> 3 punten<br>"; 
echo "<select name='twee'>"; 
echo "<option value=''></option>"; 
$resultaat = mysql_query($sql); 
while($rij = mysql_fetch_array($resultaat)) 

echo "<option value='" . $rij["h_id"] . "'>" . $rij["h_artiest"] . " - " . $rij["h_nummer"] . "</option><br>"; 

echo "</select> 2 punten<br>"; 
echo "<select name='een'>"; 
echo "<option value=''></option>"; 
$resultaat = mysql_query($sql); 
while($rij = mysql_fetch_array($resultaat)) 

echo "<option value='" . $rij["h_id"] . "'>" . $rij["h_artiest"] . " - " . $rij["h_nummer"] . "</option><br>"; 

echo "</select> 1 punt<br>"; 
echo "<input type='submit' name='Verstuur' value='Verstuur'><input type='reset' name='Maak leeg' value='Maak leeg'>"; 
echo "</form>"; 
echo "<form name='add' method='post' action='hitlijst_voeg_toe.php'>"; 
echo "<input type='tekst' name='artiest' size='30' value='artiest'><input type='tekst' name='nummer' size='30' value='nummer'><br><input type='submit' name='Verstuur' value='Voeg toe'><input type='reset' name='Maak leeg' value='Maak leeg'>"; 
echo "</form>"; 
mysql_close($link); 

if ($stem_cookie == "De eeuwige hardcore top 100") 

echo "<p>Je mag maar één keer per dag stemmen!</p>";     

echo "<p><form><input type=\"button\" value=\"Sluit venster\" onClick=\"window.close()\"></form></p>"; 
?> 
</body> 
</html> 

-------------------------------------------------------- 

hitlijst_voeg_toe.php 

<HTML> 
<HEAD> 
    <TITLE></TITLE> 
</HEAD> 
<BODY> 
<?php 
include("database.php"); 
// Bericht opslaan 
echo "<p>$artiest - $nummer</p>"; 
$insertString = "INSERT INTO hitlijst(h_artiest, h_nummer) VALUES (\"$artiest\", \"$nummer\")"; 
mysql_query($insertString) or die("ERROR"); 
echo "<p>Toegevoegd</p>"; 
echo "<p><a href=\"hitlijst_stem.php\">Stem</a></p>"; 
mysql_close($link); 
?> 
</body> 
</html> 


weet iemand de oplossing??

ik heb trouwens ook al de achtergrond aangepast enzo. Dat staat niet in deze code!

Manwethzaterdag 14 februari 2004 @ 18:07
ophorken, zoek een ander topic.

[Dit bericht is gewijzigd door yvonne op 14-02-2004 19:11]

oldenzaaltjuh.nlzaterdag 14 februari 2004 @ 18:07
Fredzaterdag 14 februari 2004 @ 18:10
quote:
Op zaterdag 14 februari 2004 18:07 schreef Manweth het volgende:
Ik wil counter-striken maar heb een FPS van 20
hoe kan ik dit omhoog gooien?
Ander topic zoeken en een nieuwe videokaart kopen.
leolinedancezaterdag 14 februari 2004 @ 18:13
quote:
Op zaterdag 14 februari 2004 18:07 schreef Manweth het volgende:
Ik wil counter-striken maar heb een FPS van 20
hoe kan ik dit omhoog gooien?
Mijn 3dfx kaart is een voodoo 2
bvd
Hoe kun jij NG + NT hebben op school? En over je vraag: Overclocken met rivatuner oid. Of natuurlijk een snellere kaart kopen. (ati 9600 of geforce 5700 of 5900xt ofzo)
oldenzaaltjuh.nlzaterdag 14 februari 2004 @ 18:14
quote:
Op zaterdag 14 februari 2004 18:13 schreef leolinedance het volgende:

[..]

Hoe kun jij NG + NT hebben op school? En over je vraag: Overclocken met rivatuner oid. Of natuurlijk een snellere kaart kopen. (ati 9600 of geforce 5700 of 5900xt ofzo)


heey euh doe het ff in een ander topic aub
Lelyzeezaterdag 14 februari 2004 @ 18:18
h_id is een integer
echter in je SQL statements zet je deze tussen '...':
UPDATE hitlijst SET h_punten='$punten' where h_id='$drie'

Probeer het es zónder die '...', dus:
UPDATE hitlijst SET h_punten=$punten where h_id=$drie

(Zelfde voor h_punten). Ik meen me er iets van te herinneren dat ik daar
ook geeikel mee heb gehad. Heb voor de rest niet echt verdiept in je
code, dus kan ook zomaar heel ergens anders aan liggen.

oldenzaaltjuh.nlzaterdag 14 februari 2004 @ 18:19
quote:
Op zaterdag 14 februari 2004 18:18 schreef Lelyzee het volgende:
h_id is een integer
echter in je SQL statements zet je deze tussen '...':
UPDATE hitlijst SET h_punten='$punten' where h_id='$drie'

Probeer het es zónder die '...', dus:
UPDATE hitlijst SET h_punten=$punten where h_id=$drie

(Zelfde voor h_punten). Ik meen me er iets van te herinneren dat ik daar
ook geeikel mee heb gehad. Heb voor de rest niet echt verdiept in je
code, dus kan ook zomaar heel ergens anders aan liggen.


gaat ff kijken
oldenzaaltjuh.nlzaterdag 14 februari 2004 @ 18:25
helaas dat is het dus niet!!

iig bedankt en als je nog meer denkt te zien zeg het me gerust

oldenzaaltjuh.nlzaterdag 14 februari 2004 @ 18:56
niemand meer??
Manwethzaterdag 14 februari 2004 @ 19:06
opsodejensen.

[Dit bericht is gewijzigd door yvonne op 14-02-2004 19:10]

oldenzaaltjuh.nlzaterdag 14 februari 2004 @ 20:38
whaaa dit is irri

waarschijnlijk is het maar een ietsiepietsie klein foutje maar je moet het wel ff zien

zou iemand van jullie ff goed willen kijken want ik kan het niet vinden

oldenzaaltjuh.nlzondag 15 februari 2004 @ 10:29
quote:
Op zaterdag 14 februari 2004 20:38 schreef oldenzaaltjuh.nl het volgende:
whaaa dit is irri

waarschijnlijk is het maar een ietsiepietsie klein foutje maar je moet het wel ff zien

zou iemand van jullie ff goed willen kijken want ik kan het niet vinden


oldenzaaltjuh.nlmaandag 16 februari 2004 @ 20:01
Roonaanmaandag 16 februari 2004 @ 20:17
Het geintje zit hem in het gedeelte:
setcookie('stem', $stem)
$stem_cookie = $_COOKIE['stem'];

Waar jij vanuit gaat namelijk (tenminste zo lijkt het) is dat wanneer je setcookie gebruikt het item ook meteen in $_COOKIE komt te staan. Dit is niet het geval. $_COOKIE wordt gevuld aan het begin van je script netzoals $_POST of $_GET. Wat je dus nog moet doen is een extra regel toevoegen:
$_COOKIE['stem'] = $stem; de regel nadat je setcookie doet.

Dan nog iets anders.
Wat ik in je script zie is dat je eerst uit de database opvist hoeveel punten een item heeft, daarna via php deze met 1,2 of 3 ophoogt en daarna opslaat via update. Dit kan voor een oneerlijke telling zorgen als 2 gebruikers tegelijkertijd je script gebruiken:

Gebruiker1: Leest punten uit database (zeg: punten1=10)
Gebruiker1: Telt er 3 bij op. punten1 = 13;
Gebruiker2: Leest punten uit data(punten2 is ook 10, staat immers in de database)
Gebruiker1: Schrijft punten1 naar de database. In de database staat nu dat het puntentotaal 13 is.
Gebruiker2 echter is nog bezig. Die telt maar 1 punt op en schrijft dit weg naar de database. Daar komt dus puntentotaal 11 te staan, en er 'verdwijnen' 3 punten.

Een oplossing om dit te voorkomen is door het mysql te laten uitvoeren:

'UPDATE hitlijst SET h_punten = h_punten + 3 WHERE h_id = "'.$h_drie.'"';

Hoop dat het bovenste stuk een oplossing is.

oldenzaaltjuh.nlmaandag 16 februari 2004 @ 20:18
quote:
Op maandag 16 februari 2004 20:17 schreef Roonaan het volgende:
Het geintje zit hem in het gedeelte:
setcookie('stem', $stem)
$stem_cookie = $_COOKIE['stem'];

Waar jij vanuit gaat namelijk (tenminste zo lijkt het) is dat wanneer je setcookie gebruikt het item ook meteen in $_COOKIE komt te staan. Dit is niet het geval. $_COOKIE wordt gevuld aan het begin van je script netzoals $_POST of $_GET. Wat je dus nog moet doen is een extra regel toevoegen:
$_COOKIE['stem'] = $stem; de regel nadat je setcookie doet.

Dan nog iets anders.
Wat ik in je script zie is dat je eerst uit de database opvist hoeveel punten een item heeft, daarna via php deze met 1,2 of 3 ophoogt en daarna opslaat via update. Dit kan voor een oneerlijke telling zorgen als 2 gebruikers tegelijkertijd je script gebruiken:

Gebruiker1: Leest punten uit database (zeg: punten1=10)
Gebruiker1: Telt er 3 bij op. punten1 = 13;
Gebruiker2: Leest punten uit data(punten2 is ook 10, staat immers in de database)
Gebruiker1: Schrijft punten1 naar de database. In de database staat nu dat het puntentotaal 13 is.
Gebruiker2 echter is nog bezig. Die telt maar 1 punt op en schrijft dit weg naar de database. Daar komt dus puntentotaal 11 te staan, en er 'verdwijnen' 3 punten.

Een oplossing om dit te voorkomen is door het mysql te laten uitvoeren:

'UPDATE hitlijst SET h_punten = h_punten + 3 WHERE h_id = "'.$h_drie.'"';

Hoop dat het bovenste stuk een oplossing is.


gaat het proberen
Roonaanmaandag 16 februari 2004 @ 22:28
en?