enkele row uit database selecteren
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)
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
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>
<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)
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
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>
<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?
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