Volgend ID maar als hij niet bestaat overslaan
Ik heb hier al een tijd problemen mee en heb nu een redelijke oplossing gevonden. Ik wil namelijk producten uit een database weergeven op mijn site. Stel je hebt 10 producten in de database en allemaal hebben ze een uniek ID.
De url is dan: ?page=product2&id=7
7 Staat dan voor product nummer 7. Nu heb ik een script wat naar id 8 of 6 kan gaan. Echter, er komt ook voor dat id 6 niet bestaat omdat die verwijderd is. Nu moet hij dus 6 skippen en naar 5 gaan. Dit is mijn script wat ik gebruik. (gevonden op deze site en aangepast zodat het voor mij werkt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
//voorbeeld
if(isset($_GET['id'])){
$id = mysql_real_escape_string($_GET['id']);
}
$sql = "SELECT id,naam,memo FROM producten WHERE actief='1' ORDER BY id ASC LIMIT '".$id."',1";
echo '<a href="?page=product2&id='.($id - 1).'">Vorige</a> <a href="?page=product2&id='.($id + 1).'">Volgende</a>';
?>
//voorbeeld
if(isset($_GET['id'])){
$id = mysql_real_escape_string($_GET['id']);
}
$sql = "SELECT id,naam,memo FROM producten WHERE actief='1' ORDER BY id ASC LIMIT '".$id."',1";
echo '<a href="?page=product2&id='.($id - 1).'">Vorige</a> <a href="?page=product2&id='.($id + 1).'">Volgende</a>';
?>
Enige probleem is dat dit dus geen rekening houdt met id's die niet voorkomen. Wat moet ik aanpassen zodat hij niet bestaande id's overslaat en gewoon de volgende uit de database pakt?
Gewijzigd op 01/01/1970 01:00:00 door Robert-Jan De Vries
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
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
<?php
//voorbeeld
if(isset($_GET['id']))
{
$id = mysql_real_escape_string($_GET['id']);
if(isset($_GET['lager']))
{
$compare = '<';
$updown = 'DESC';
}
else
{
$compare = '>';
$updown = 'ASC';
}
$sql = "SELECT
id,
naam,
memo
FROM
producten
WHERE
actief = '1'
AND
id " . $compare . " '" . $id . "'
ORDER BY
id " . $updown . "
LIMIT 1";
$res = mysql_query($sql);
if($res)
{
$row = mysql_fetch_assoc($res);
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
}
}
?>
//voorbeeld
if(isset($_GET['id']))
{
$id = mysql_real_escape_string($_GET['id']);
if(isset($_GET['lager']))
{
$compare = '<';
$updown = 'DESC';
}
else
{
$compare = '>';
$updown = 'ASC';
}
$sql = "SELECT
id,
naam,
memo
FROM
producten
WHERE
actief = '1'
AND
id " . $compare . " '" . $id . "'
ORDER BY
id " . $updown . "
LIMIT 1";
$res = mysql_query($sql);
if($res)
{
$row = mysql_fetch_assoc($res);
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
Ik ga nu even eten. Hoe zou het kunnen dat hij niks wilt weergeven?
Wat moet ie weergeven als er 'nog' geen GET is?
Maar ik bedoelde nu te zeggen in mijn vorige post dat de vorige en volgende knoppen niet weergegeven worden..
Thanks dat je me helpt hiermee!
SanThe schreef op 05.08.2008 18:45:
Wat moet ie weergeven als er 'nog' geen GET is?
Nogmaals.
Waar haal je de eerste keer (dus voordat die twee links er staan) de $id vandaan?
Dit pakt hij uit de database..
Stel dat ik een pagina heb waar ik in het klein de producten heb op een rijtje per 5 dan roept hij het als volgt op uit de database:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
// Variables opmaken
$max_resultaten = 5;
$van = (($_GET["pagina"] * $max_resultaten) - $max_resultaten);
$qaantal = mysql_query("SELECT * FROM producten WHERE actief='1'");
$max_aantal = mysql_num_rows($qaantal);
$aantal_paginas = ceil($max_aantal / $max_resultaten);
// echo "$max_aantal / $max_resultaten = $aantal_paginas";
$sql = mysql_query("SELECT * FROM producten WHERE actief='1' " . "ORDER BY id DESC LIMIT $van, $max_resultaten");
?>
// Variables opmaken
$max_resultaten = 5;
$van = (($_GET["pagina"] * $max_resultaten) - $max_resultaten);
$qaantal = mysql_query("SELECT * FROM producten WHERE actief='1'");
$max_aantal = mysql_num_rows($qaantal);
$aantal_paginas = ceil($max_aantal / $max_resultaten);
// echo "$max_aantal / $max_resultaten = $aantal_paginas";
$sql = mysql_query("SELECT * FROM producten WHERE actief='1' " . "ORDER BY id DESC LIMIT $van, $max_resultaten");
?>
Dit is dan de link
<a href='index.php?page=product&id=".$data["id"]."'>
en data is
while($data = mysql_fetch_array($sql))
Maar hij werkt dus voor zover ik kan zien. Ik ben hier echt heel erg dankbaar voor. Nu nog even een spatie tussen vorige en volgende zetten en ik ben klaar. Super bedankt!!
En sorry dat ik die stomme fout maakte.
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
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
<?php
//voorbeeld
if(isset($_GET['id']))
{
$id = mysql_real_escape_string($_GET['id']);
if(isset($_GET['lager']))
{
$compare = '<';
$updown = 'DESC';
}
else
{
$compare = '>';
$updown = 'ASC';
}
$sql = "SELECT
id,
naam,
memo
FROM
producten
WHERE
actief = '1'
AND
id " . $compare . " '" . $id . "'
ORDER BY
id " . $updown . "
LIMIT 2";
$res = mysql_query($sql);
if($res)
{
switch (mysql_num_rows($res))
{
case 1 : $row = mysql_fetch_assoc($res);
if(isset($_GET['lager']))
{
echo 'Vorige';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
}
else
{
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo 'Volgende';
}
break;
case 2 : $row = mysql_fetch_assoc($res);
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
break;
default : echo 'Vorige Volgende';
}
}
}
?>
//voorbeeld
if(isset($_GET['id']))
{
$id = mysql_real_escape_string($_GET['id']);
if(isset($_GET['lager']))
{
$compare = '<';
$updown = 'DESC';
}
else
{
$compare = '>';
$updown = 'ASC';
}
$sql = "SELECT
id,
naam,
memo
FROM
producten
WHERE
actief = '1'
AND
id " . $compare . " '" . $id . "'
ORDER BY
id " . $updown . "
LIMIT 2";
$res = mysql_query($sql);
if($res)
{
switch (mysql_num_rows($res))
{
case 1 : $row = mysql_fetch_assoc($res);
if(isset($_GET['lager']))
{
echo 'Vorige';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
}
else
{
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo 'Volgende';
}
break;
case 2 : $row = mysql_fetch_assoc($res);
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
break;
default : echo 'Vorige Volgende';
}
}
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
Het eerste script wat je gaf werkt nu in principe naar behoren. Het enige wat vreemd is is dat als ik gewoon op een product klik en ik dan volgende of vorige wil doen hij op hetzelfde product blijft staan.
Stel ik sta op een product, ik klik volgende. Dan blijft hij op de huidige staan. Ik klik nog een keer, dan gaat hij naar de volgende. Als ik dan vorige doe gaat hij eerst nog 1 verder en daarna bij het klikken gaat hij naar de vorige zoals het moet.
Je tweede script heb ik geprobeerd, maar dan krijg ik een
Parse error: syntax error, unexpected T_CASE
melding.
Achter switch mist aan het eind een )
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/incs/productoud.php on line 173
Vind je het niet erg zoveel vragen?
(Ennuh... Ik kan stoppen wanneer ik wil, dus maak jij je maar geen zorgen)
switch (mysql_num_rows($sql))
Dan zegt hij Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/incs/productoud.php on line 173
vorige en volgende is wel zichtbaar dan, maar niet klikbaar...
De code
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
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
<?php
//voorbeeld
if(isset($_GET['id']))
{
$id = mysql_real_escape_string($_GET['id']);
if(isset($_GET['lager']))
{
$compare = '<';
$updown = 'DESC';
}
else
{
$compare = '>';
$updown = 'ASC';
}
$sql = "SELECT
id
FROM
producten
WHERE
actief = '1'
AND
id " . $compare . " '" . $id . "'
ORDER BY
id " . $updown . "
LIMIT 2";
$res = mysql_query($sql);
if($res)
{
switch (mysql_num_rows($sql))
{
case 1 : $row = mysql_fetch_assoc($res);
if(isset($_GET['lager']))
{
echo 'Vorige';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
}
else
{
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo 'Volgende';
}
break;
case 2 : $row = mysql_fetch_assoc($res);
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
break;
default : echo 'Vorige Volgende';
}
}
}
?>
//voorbeeld
if(isset($_GET['id']))
{
$id = mysql_real_escape_string($_GET['id']);
if(isset($_GET['lager']))
{
$compare = '<';
$updown = 'DESC';
}
else
{
$compare = '>';
$updown = 'ASC';
}
$sql = "SELECT
id
FROM
producten
WHERE
actief = '1'
AND
id " . $compare . " '" . $id . "'
ORDER BY
id " . $updown . "
LIMIT 2";
$res = mysql_query($sql);
if($res)
{
switch (mysql_num_rows($sql))
{
case 1 : $row = mysql_fetch_assoc($res);
if(isset($_GET['lager']))
{
echo 'Vorige';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
}
else
{
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo 'Volgende';
}
break;
case 2 : $row = mysql_fetch_assoc($res);
echo '<a href="?page=product2&id=' . $row['id'] . '&lager=true">Vorige</a>';
echo '<a href="?page=product2&id=' . $row['id'] . '&hoger=true">Volgende</a>';
break;
default : echo 'Vorige Volgende';
}
}
}
?>
Ja, foutje van mij. Moet natuurlijk $res zijn. ;-)
switch (mysql_num_rows($res))
Wat is eigenlijk het wezenlijke verschil tussen deze twee scripts? Op het oog functioneren ze hetzelfde. Ik heb overigens ook met dit script nog dat als ik vorige wil doen hij eerst 1 verder gaat en daarna wel vorige doet. Volgende is soms ook vorige, maar daarna gaat hij wel naar de volgende als je weer klikt.
In ieder geval super bedankt voor je tijd. Mocht je een oplossing hebben voor het vorige doet volgende dan hoor ik dat heel graag.
Gewijzigd op 01/01/1970 01:00:00 door Robert-Jan De Vries
Wissel deze twee regels eens om
-9 $updown = 'DESC';
14 $updown = 'ASC';
Voor ik die twee omwissel werkt het zoals ik al zei. Klik ik op vorige dan gaat hij eerst 1 verder en als je dan weer vorige klikt gaat hij terug, klik je nog een keer gaat hij weer 1 terug en doet hij dus wat hij moet doen.
Echter als ik volgende doe dan gaat hij gewoon naar de volgende en werkt het goed.
Als ik ASC en DESC omwissel dan loopt het helemaal fout. Dus dat is het niet.
Overigens pakt hij het eerste en laatste id niet mee. Dus als ik bij het een na laatste id ben dan kan ik niet volgende klikken, vorige wel maar dan gaat hij dus toch naar laatste id zoals eerder vermeld.
Ik moet nu helaas weg. Ik ben er morgenochtend weer, misschien dat ik het dan zelf zie met een uitgeslapen gedachte. Goeienacht alvast.
Gewijzigd op 01/01/1970 01:00:00 door Robert-Jan De Vries
1 - Het id is lager dan de laagste in de database. Dan krijg je het record met het laagste id en 'volgende' als keus.
2 - Het id is in de range van de bestaande id's. Dan krijg je het record met dat id of het eerst volgende id met de keuze 'volgende'.
3 - Het id is het hoogste id uit de database. Dan krijg je dat record met keuze 'vorige'.
4 Het id is hoger dan het laatste id. Dan krijg je een melding 'geen informatie beschikbaar'.
Ik hoop dat je er wat mee kan.
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
63
64
65
66
67
68
69
70
71
72
73
74
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
63
64
65
66
67
68
69
70
71
72
73
74
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$server = "....";
$user = "....";
$password = "....";
$database = "....";
mysql_connect($server, $user, $password);
mysql_select_db($database);
$keuze = array('Vorige', 'Volgende', 'Onbekend');
$id = (isset($_GET['id'])) ? intval($_GET['id']) : 0;
$ga = (isset($_GET['ga']) and in_array($_GET['ga'], $keuze)) ? $_GET['ga'] : $keuze[2];
switch ($ga)
{
case $keuze[0] : $compare = '<';
$updown = 'DESC';
break;
case $keuze[1] : $compare = '>';
$updown = 'ASC';
break;
default : $compare = '>=';
$updown = 'ASC';
}
$sql = "SELECT
id,
naam,
memo
FROM
producten
WHERE
actief = 1
AND
id " . $compare . " " . $id . "
ORDER BY
id " . $updown . "
LIMIT 2";
$res = mysql_query($sql);
if($res)
{
switch (mysql_num_rows($res))
{
case 1 : $row = mysql_fetch_assoc($res);
switch ($ga)
{
case $keuze[1] :
case $keuze[2] : echo '<a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[0] . '">' . $keuze[0] . '</a> ' . $keuze[1];
break;
case $keuze[0] : echo $keuze[0] . ' <a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[1] . '">' . $keuze[1] . '</a>';
}
break;
case 2 : $row = mysql_fetch_assoc($res);
switch ($ga)
{
case $keuze[2] : echo $keuze[0] . ' <a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[1] . '">' . $keuze[1] . '</a>';
break;
default : echo '<a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[0] . '">' . $keuze[0] . '</a> <a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[1] . '">' . $keuze[1] . '</a>';
}
break;
default : echo $keuze[1] . ' ' . $keuze[1] . '<br/><br/>Er is geen informatie beschikbaar';
}
if((mysql_num_rows($res)) > 0)
{
echo '<br/><br/>ID=' . $row['id'] . ' Naam: ' . $row['naam'];
}
}
else
{
echo 'Query Error';
}
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$server = "....";
$user = "....";
$password = "....";
$database = "....";
mysql_connect($server, $user, $password);
mysql_select_db($database);
$keuze = array('Vorige', 'Volgende', 'Onbekend');
$id = (isset($_GET['id'])) ? intval($_GET['id']) : 0;
$ga = (isset($_GET['ga']) and in_array($_GET['ga'], $keuze)) ? $_GET['ga'] : $keuze[2];
switch ($ga)
{
case $keuze[0] : $compare = '<';
$updown = 'DESC';
break;
case $keuze[1] : $compare = '>';
$updown = 'ASC';
break;
default : $compare = '>=';
$updown = 'ASC';
}
$sql = "SELECT
id,
naam,
memo
FROM
producten
WHERE
actief = 1
AND
id " . $compare . " " . $id . "
ORDER BY
id " . $updown . "
LIMIT 2";
$res = mysql_query($sql);
if($res)
{
switch (mysql_num_rows($res))
{
case 1 : $row = mysql_fetch_assoc($res);
switch ($ga)
{
case $keuze[1] :
case $keuze[2] : echo '<a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[0] . '">' . $keuze[0] . '</a> ' . $keuze[1];
break;
case $keuze[0] : echo $keuze[0] . ' <a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[1] . '">' . $keuze[1] . '</a>';
}
break;
case 2 : $row = mysql_fetch_assoc($res);
switch ($ga)
{
case $keuze[2] : echo $keuze[0] . ' <a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[1] . '">' . $keuze[1] . '</a>';
break;
default : echo '<a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[0] . '">' . $keuze[0] . '</a> <a href="?page=product2&id=' . $row['id'] . '&ga=' . $keuze[1] . '">' . $keuze[1] . '</a>';
}
break;
default : echo $keuze[1] . ' ' . $keuze[1] . '<br/><br/>Er is geen informatie beschikbaar';
}
if((mysql_num_rows($res)) > 0)
{
echo '<br/><br/>ID=' . $row['id'] . ' Naam: ' . $row['naam'];
}
}
else
{
echo 'Query Error';
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
Misschien moet ik het beperken tot alleen volgende en alle links op de site voorzien van &hoger=true... dan werkt het wel. Alleen jammer dat je niet terug kan dan.
Gewijzigd op 01/01/1970 01:00:00 door Robert-Jan De Vries