hotornot eerst random daarna oplopend
ik heb mijn hot or not script van de vorige keer maar verwijderd en ben een nieuwe begonnen want ik vond dat het allemaal wat netter en beter kon.
nu loop ik alleen tegen het volgende probleem aan.
1. als de pagina laad krijg je altijd het eerste plaatje dat in de database staat te zien. ik wil dat deze random een plaatje uitzoekt en die dan op het scherm toont. zo krijgt iedereen een betere kans om gevote te worden.
2. als de eerste pagina is geweest wil ik graag dat hij geen random plaatje uit de database pakt maar nu wil ik hem oplopend hebben. dus als hij eerst bij plaatje 4 was (die dus eerst random uit de database werd geplukt) dat hij dan naar 5 gaat dan 6 dan 7 enz...
graag zou ik wat hulp (dus niet een heel compleet aangepast script, daar leer ik tenslotte niet zoveel van:P) willen hebben.
mijn database ziet er zo uit:
pictures
id|name|image|description|adddate
rating
id|ip|pid|rate
Dit is de code waarom het gaat:
alvast bedankt voor de hulp.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
$con = mysql_connect('192.168.1.155','ontwikkeling','kipei');
mysql_select_db('simon',$con);
$ip = $_SERVER['REMOTE_ADDR'];
$pid = $_POST['pid'];
$rating = $_POST['rating'];
if(is_numeric($rating) && checkRating($ip, $pid, $rating)){
$sql = "INSERT INTO `rating` SET `pid`='".$pid."', `ip`='".$ip."', `rate`='".$rating."' ;";
$rst = mysql_query($sql);
}
$sql = "SELECT
p.`id`,
p.`image`,
AVG(r.`rate`) AS avgrate
FROM
`pictures` AS p
LEFT JOIN
`rating` AS r ON p.`id` = r.`pid`
GROUP BY p.`id`
LIMIT 1";
$rst = mysql_query($sql);
while($row = mysql_fetch_assoc($rst)){
echo "<img src=\"".$row['image']."\" /><br/>";
echo rating($row['id']);
echo "Rating :: ".$row['avgrate'];
}
function rating($pid){
$rating = '<form action="" onchange="this.submit();" method="post">
<input type="hidden" name="pid" value="'.$pid.'" />
10 <input type="radio" name="rating" value="10" />
9 <input type="radio" name="rating" value="9" />
8 <input type="radio" name="rating" value="8" />
7 <input type="radio" name="rating" value="7" />
6 <input type="radio" name="rating" value="6" />
5 <input type="radio" name="rating" value="5" />
4 <input type="radio" name="rating" value="4" />
3 <input type="radio" name="rating" value="3" />
2 <input type="radio" name="rating" value="2" />
1 <input type="radio" name="rating" value="1" />
</form>';
return $rating;
}
function checkRating($ip, $pid, $rating=''){
$sql = "SELECT `id` FROM `rating` WHERE `ip`='".$ip."' AND `pid`='".$pid."' LIMIT 1;";
$rst = mysql_query($sql);
if(mysql_num_rows($rst) > 0){
return false;
}else{
return true;
}
}
?>
$con = mysql_connect('192.168.1.155','ontwikkeling','kipei');
mysql_select_db('simon',$con);
$ip = $_SERVER['REMOTE_ADDR'];
$pid = $_POST['pid'];
$rating = $_POST['rating'];
if(is_numeric($rating) && checkRating($ip, $pid, $rating)){
$sql = "INSERT INTO `rating` SET `pid`='".$pid."', `ip`='".$ip."', `rate`='".$rating."' ;";
$rst = mysql_query($sql);
}
$sql = "SELECT
p.`id`,
p.`image`,
AVG(r.`rate`) AS avgrate
FROM
`pictures` AS p
LEFT JOIN
`rating` AS r ON p.`id` = r.`pid`
GROUP BY p.`id`
LIMIT 1";
$rst = mysql_query($sql);
while($row = mysql_fetch_assoc($rst)){
echo "<img src=\"".$row['image']."\" /><br/>";
echo rating($row['id']);
echo "Rating :: ".$row['avgrate'];
}
function rating($pid){
$rating = '<form action="" onchange="this.submit();" method="post">
<input type="hidden" name="pid" value="'.$pid.'" />
10 <input type="radio" name="rating" value="10" />
9 <input type="radio" name="rating" value="9" />
8 <input type="radio" name="rating" value="8" />
7 <input type="radio" name="rating" value="7" />
6 <input type="radio" name="rating" value="6" />
5 <input type="radio" name="rating" value="5" />
4 <input type="radio" name="rating" value="4" />
3 <input type="radio" name="rating" value="3" />
2 <input type="radio" name="rating" value="2" />
1 <input type="radio" name="rating" value="1" />
</form>';
return $rating;
}
function checkRating($ip, $pid, $rating=''){
$sql = "SELECT `id` FROM `rating` WHERE `ip`='".$ip."' AND `pid`='".$pid."' LIMIT 1;";
$rst = mysql_query($sql);
if(mysql_num_rows($rst) > 0){
return false;
}else{
return true;
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Simon
Bij probleem 2: dat is wat lastiger. Je moet gaan onthouden dat je de pagina al een keer geladen hebt. Wat je kan doen is dat je een sessie aanmaakt. Ook kan je bijvoorbeeld een hiddelfield met het id van je huidige foto klussen. Je moet dan dus altijd je huidige id+1 uit de database trekken. Of je gaat met je LIMIT aan de gang (wat wel zo veilig is want misschien ontbreekt er een ID)
veel succes!
zou je dit wat meer uit kunnen leggen "Of je gaat met je LIMIT aan de gang"?
waarom is dat veiliger?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if(isset($_POST['hiddenfield'])){
//hier dus een ander stuk query
$sql = "SELECT
p.id,
p.image,
AVG(r.rate) AS avgrate
FROM
pictures AS p
LEFT JOIN
rating AS r ON p.id = r.pid
GROUP BY p.id
LIMIT ".mysql_real_escape_string($_POST['hiddenfield']).",1";
}else{
$sql = "SELECT RAND(1)"; //deze query moet je even toespitsen op jou situatie maar gebruik iig RAND voor je random image
}
?>
if(isset($_POST['hiddenfield'])){
//hier dus een ander stuk query
$sql = "SELECT
p.id,
p.image,
AVG(r.rate) AS avgrate
FROM
pictures AS p
LEFT JOIN
rating AS r ON p.id = r.pid
GROUP BY p.id
LIMIT ".mysql_real_escape_string($_POST['hiddenfield']).",1";
}else{
$sql = "SELECT RAND(1)"; //deze query moet je even toespitsen op jou situatie maar gebruik iig RAND voor je random image
}
?>
en gebruik nooit meer die backticks. Dit is vieze rommel. Niet meer gebruiken!
edit: om op die 'veiligheid' terug te komen. het is niet veiliger, je weet gewoon dat je altijd een resultaat hebt om weer te geven. stel je verwijderd je record met id = 5 en die wordt op een gegeven moment opgevraagd heb je niks om weer te geven... ik denk dat je zo weer een heel eind verder bent!
Gewijzigd op 01/01/1970 01:00:00 door Crispijn -