enkele row uit database selecteren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tortuga web

tortuga web

25/09/2015 16:37:18
Quote Anchor link
Volgens mij is dit een geval van mezelf blind gestaard hebben, waardoor ik de fout niet meer zie.
Ik heb een pagina met items uit een database, waarbij ik een specifiek item kan selecteren via de id.
De code op de verzamelpagina:
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
<div class="page">
    <div class="leftmenu">
        <?php
            try {
                require_once ('../data/sql_link.php');
                $sql_select = "SELECT id,
                                    titel,
                                    introverhaal,
                                    verhaal,
                                    datum
                                FROM verhalen
                                ORDER BY datum"
;
                $stmt = $db->prepare($sql_select);
                $stmt -> execute(array());
                $results = $stmt->fetchAll();
                ?>

                <dl class="leftmenu">
                    <?php foreach ($results as $result) { ?>
                        <dt><?php echo $result['datum']; ?></dt>
                        <dd><?php echo $result['titel']; ?></dd>
                        <?php
                        }
                    ?>

                </dl>
                <?php
            }
            catch (PDOException $e) {
                print "Error!: ".$e->getMessage()."<br/>";
                echo 'Iets gaat niet goed.';
            }
        
        ?>

    </div>
    <div class="article">
        <?php
            foreach ($results as $result) {?>

                <h3><?php echo $result['titel']; ?></h3>
                <?php echo $result['introverhaal'].'<br><span style="text-align:right; font-size:0,925em;"><a href="verhaal.php?id='.$result['id'].'">Lees verder...'.$result['id'].'</a></span><br><hr>';
            }
    
        ?>

    </div>
</div>

Via de link in dit script 'lees verder...', ga ik naar een nieuwe file. In de browser zie ik als adres: verhaal.php?id=.. en het juiste nummer behorend bij de link.
De code op die pagina die de rij uit de database moet ophalen van het bijbehorende id is:
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
<div class="page">
    <div class="leftmenu">
        <?php
            ini_set('display_errors',1); // 1 == on , 0 == off
            error_reporting(E_ALL | E_STRICT);

            session_start();
            if (!isset($_GET['id']) OR !ctype_digit($_GET['id'])) {
                echo '<p>Geen verhaal geselecteerd!</p>';
                //exit();
            }
            else {
                $id=$_GET['id'];
                try {
                    require_once ('../data/sql_link.php');
                    $sql_select = "SELECT id,
                                        titel,
                                        verhaal,
                                        datum
                                    FROM verhalen
                                    WHERE id=$id"
;
                    $stmt = $db->prepare($sql_select);
                    $stmt -> execute(array());
                    $results = $stmt->fetchAll();?>

                    <div class="article">
                        <?php
                            foreach ($results as $result) {?>

                                <h3><?php echo $result['id'].' - '.$result['titel']; ?></h3>
                                <?php echo $result['verhaal'];
                            }

                        ?>

                    </div>
                    <?php
                }
                catch(PDOException $e) {
                    echo $e->getMessage().'<p>Er is een probleem opgetreden, probeer het later nog eens. Als het probleem blijft bestaan neem contact op via de contactpagina.</p>';
                    //exit();    
                }
            }

        ?>

    </div>
</div>

De link werkt, ik krijg geen foutmeldingen, maar om de een of andere reden wordt niet de juiste rij uit de database geselecteerd. Ik krijg altijd de rij te zien met het laatste id-nummer.

Het is vast een stommiteit, maar ik zie niet waar de fout zit. Kan iemand me helpen?
 
PHP hulp

PHP hulp

22/11/2024 04:54:34
 
Bo Ter Ham

Bo Ter Ham

25/09/2015 16:59:38
Quote Anchor link
Weet je zeker dat de URL bij verhaal.php?id=$id klopt? (linken alle URLs niet gewoon naar het laatste id?) Het kan zijn dat twee keer een foreach gebruiken op dezelfde dataset het probleem is (ik heb dit ook wel eens gehad, blijkbaar werkt het net iets anders als je de gegevens in de array uit de database haalt).

Verder doe je volgens mij nog een aantal rare dingen:

- Je gebruikte execute met als parameter een lege array?
- Waarom gebruik je geen prepared statements? je bent nu vatbaar voor SQL injection
- Je gebruikt FetchAll terwijl je ook een WHERE gebruikt, dat is raar want je verwacht dus maar één row terug, dan kun je beter fetch gebruiken.
Gewijzigd op 25/09/2015 17:00:06 door Bo Ter Ham
 



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.