Volgend ID maar als hij niet bestaat overslaan

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 18:13:00
Quote Anchor link
Dag allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
?>



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
 
PHP hulp

PHP hulp

06/05/2024 07:59:20
 
- SanThe -

- SanThe -

05/08/2008 18:34:00
Quote Anchor link
Niet getest:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 18:40:00
Quote Anchor link
Dat ziet er veelbelovend uit, echter krijg ik geen vorige en volgende knoppen op mijn pagina als ik deze zet op de plaats waar ik het vorige script had staan. Hij geeft dus niks weer..

Ik ga nu even eten. Hoe zou het kunnen dat hij niks wilt weergeven?
 
- SanThe -

- SanThe -

05/08/2008 18:45:00
Quote Anchor link
Wat moet ie weergeven als er 'nog' geen GET is?
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 18:50:00
Quote Anchor link
Ideaal zou zijn als iemand op iets klikt met id=30 en 31 bestaat niet dat hij dan 32 pakt en als hij klikt op iets met id=50 en verder gaat het nog niet dat hij bij 1 uitkomt of in ieder geval vanaf het begin weer gaat...

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 -

- SanThe -

05/08/2008 18:54:00
Quote Anchor link
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?
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 18:59:00
Quote Anchor link
Op de site kan iemand gewoon random op een product klikken. Dan komt er in de titelbalk te staan: /index.php?page=product&id=52

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)
PHP script in nieuw venster Selecteer het PHP script
1
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");
?>



Dit is dan de link

<a href='index.php?page=product&id=".$data["id"]."'>

en data is

while($data = mysql_fetch_array($sql))
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 19:12:00
Quote Anchor link
Ik heb hem werkend! Was net zo moeilijk, ik had nog naam en memo staan en die hoorden er niet bij. Best dom van mezelf en mijn fout natuurlijk.

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.
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 19:24:00
Quote Anchor link
Nog 1 vraagje, nu is ID 165 het laatste id. Is er een manier om te zorgen dat hij terug naar het begin gaat als iemand toevallig het laatste product (hoogste id) bekijkt en verder wilt klikken?
Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door Robert-Jan De Vries
 
- SanThe -

- SanThe -

05/08/2008 19:45:00
Quote Anchor link
Niet getest:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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';

        }
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 20:05:00
Quote Anchor link
Hey,

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

- SanThe -

05/08/2008 20:14:00
Quote Anchor link
Misschien moet je $updown even omwisselen.
Achter switch mist aan het eind een )
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 20:20:00
Quote Anchor link
Oh ja, ) had ik over het hoofd gezien. Echter nu zegt hij

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?
 
- SanThe -

- SanThe -

05/08/2008 20:23:00
Quote Anchor link
Geef eens een stukje code.

(Ennuh... Ik kan stoppen wanneer ik wil, dus maak jij je maar geen zorgen)
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 20:30:00
Quote Anchor link
Dit is wat ik nu gebruik. Hij valt over het deel...

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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';

        }
    }
}

?>
 
- SanThe -

- SanThe -

05/08/2008 20:50:00
Quote Anchor link
switch (mysql_num_rows($sql))

Ja, foutje van mij. Moet natuurlijk $res zijn. ;-)

switch (mysql_num_rows($res))
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 21:02:00
Quote Anchor link
Ooh ok,

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

- SanThe -

05/08/2008 21:07:00
Quote Anchor link
Gokje.
Wissel deze twee regels eens om
-9 $updown = 'DESC';
14 $updown = 'ASC';
 
Robert-Jan De Vries

Robert-Jan De Vries

05/08/2008 21:26:00
Quote Anchor link
Ok, even een kleine update hoe het nu is.

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

- SanThe -

06/08/2008 00:06:00
Quote Anchor link
Als je de pagina aanroept met een willekeurig id dan zijn er 4 mogelijkheden.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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';
}

?>
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
 
Robert-Jan De Vries

Robert-Jan De Vries

06/08/2008 14:13:00
Quote Anchor link
Ook daar heb ik weer hetzelfde probleem als wat er is. Hij blijft raar doen met volgende en vorige. Helpt het misschien als ik het complete script even hier zet of in een zipje upload en de link hier plaatst?

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
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.