Hoe meerdere afbeeldingen uit database halen?
Ik maak voor school een php project en moet een videotheek maken door een database te gebruiken. hier mijn code van wat ik al heb.
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
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
<?php
mysql_connect("localhost","root","usbw");
mysql_select_db("videotheek");
$sql = "SELECT * FROM genre";
$result = mysql_query("SELECT * FROM genre order by genre")
or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>genre</th></tr>";
while($row = mysql_fetch_array( $result )) {
echo "<tr><td>";
echo "<a href='videotheek.php?id=" . $row['id'] ."'>" . $row['genre']. "</a>";
echo "</td></tr>";
}
$id = $_GET['id'];
$sqlletje1= "SELECT * FROM video where afbeelding=";
$sqlletje= "SELECT * FROM video where genre=". $id;
if (isset($sqlletje)) {
}
else {
}
$result = mysql_query($sqlletje)
or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Video</th></tr>";
while($row = mysql_fetch_array( $result )) {
echo "<tr><td>";
echo "<img src = '" . $row['afbeelding'] . "'></img>";
echo "</td></tr>";
}
?>
mysql_connect("localhost","root","usbw");
mysql_select_db("videotheek");
$sql = "SELECT * FROM genre";
$result = mysql_query("SELECT * FROM genre order by genre")
or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>genre</th></tr>";
while($row = mysql_fetch_array( $result )) {
echo "<tr><td>";
echo "<a href='videotheek.php?id=" . $row['id'] ."'>" . $row['genre']. "</a>";
echo "</td></tr>";
}
$id = $_GET['id'];
$sqlletje1= "SELECT * FROM video where afbeelding=";
$sqlletje= "SELECT * FROM video where genre=". $id;
if (isset($sqlletje)) {
}
else {
}
$result = mysql_query($sqlletje)
or die(mysql_error());
echo "<table border='1'>";
echo "<tr> <th>Video</th></tr>";
while($row = mysql_fetch_array( $result )) {
echo "<tr><td>";
echo "<img src = '" . $row['afbeelding'] . "'></img>";
echo "</td></tr>";
}
?>
ik krijg het dus voor elkaar als ik op de site een genre aanklik dat ik een aantal films te zien krijg in de des betreffende genre maar ik wil op de begin pagina graag alle films laten zien. zelf zat ik te denken aan een if else maar ik heb al van alles geprobeerd en kom er niet zo goed uit hoe ik dat nou het best kan doen.
Ik doe eerste jaars applicatie en mediaonwikkelaar dus het zal er nog niet perfect uit zien!
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
/*
* gebruik mysqli in plaats van mysql omdat de laatste niet meer ondersteund wordt door de laatste PHP versie 7.x
*/
$con = mysqli_connect("localhost","root","usbw","videotheek");
if(!$con) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
/*
* variabelen aanmaken die we niet gebruiken heeft natuurlijk geen enkele zin behalve dat je app langzamer wordt en er onnodig geheugen gebruikt wordt :-)
*/
// $sql = "SELECT * FROM genre";
$genreResult = mysqli_query($con, "SELECT * FROM genre order by genre")
or die(mysqli_error($con));
/*
* Statische html echo-en heeft geen enkele zin. Bovendien begin je hier pas mee als je app verder gereed is. Komt onderaan dus.
* Daarnaast is het niet van deze tijd om je opmaak in de html mee te geven, dus wel of geen borders moet in je CSS komen te staan
*/
//echo "<table border='1'>";
//echo "<tr> <th>genre</th></tr>";
/*
* gebruik mysqli_fetch_assoc!
*/
//while($row = mysql_fetch_array( $result )) {
/* dit gaat fout als $_GET['id'] niet wordt meegegeven in de url.
//$id = $_GET['id'];
*
* doe het zo:
*/
$id = 0; // default waarde
if(isset($_GET['id']))
{
$id = intval($_GET['id']);
}
// een geldig id uit een database is altijd groter dan nul
if($id > 0) {
$sql = "SELECT * FROM video WHERE genre=" . $id;
} else {
$sql = "SELECT * FROM video";
}
$videoResult = mysqli_query($con, $sql)
or die(mysqli_error($con));
?>
<!DOCTYPE html>
<html>
<head>
<title>Videotheek</title>
<meta charset="UTF-8">
<style>
.table-border {
border-collapse: collapse;
}
.table-border td,
.table-border th {
border: 1px solid black;
}
</style>
</head>
<body>
<table class="table-border">
<tr>
<th>Genre</th>
</tr>
<?php while($row = mysqli_fetch_assoc($genreResult)) { ?>
<tr>
<td>
<?php echo '<a href="videotheek.php?id=' . $row['id'] . '">' . $row['genre'] . '</a>'; ?>
</td>
</tr>
<?php } ?>
</table>
<h3>Video's</h3>
<table class="table-border">
<tr>
<th>Video</th>
</tr>
<?php while($row = mysqli_fetch_assoc($videoResult)) { ?>
<tr>
<td>
<!-- Het img element is een singleton en sluit je in HTML5 gewoon af met een >. bijvoorbeeld <img src="/images/plaatje.jpg"> -->
<?php echo '<img src="' . $row['afbeelding'] . '">'; ?>
</td>
</tr>
<?php } ?>
</table>
</body>
</html>
/*
* gebruik mysqli in plaats van mysql omdat de laatste niet meer ondersteund wordt door de laatste PHP versie 7.x
*/
$con = mysqli_connect("localhost","root","usbw","videotheek");
if(!$con) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
/*
* variabelen aanmaken die we niet gebruiken heeft natuurlijk geen enkele zin behalve dat je app langzamer wordt en er onnodig geheugen gebruikt wordt :-)
*/
// $sql = "SELECT * FROM genre";
$genreResult = mysqli_query($con, "SELECT * FROM genre order by genre")
or die(mysqli_error($con));
/*
* Statische html echo-en heeft geen enkele zin. Bovendien begin je hier pas mee als je app verder gereed is. Komt onderaan dus.
* Daarnaast is het niet van deze tijd om je opmaak in de html mee te geven, dus wel of geen borders moet in je CSS komen te staan
*/
//echo "<table border='1'>";
//echo "<tr> <th>genre</th></tr>";
/*
* gebruik mysqli_fetch_assoc!
*/
//while($row = mysql_fetch_array( $result )) {
/* dit gaat fout als $_GET['id'] niet wordt meegegeven in de url.
//$id = $_GET['id'];
*
* doe het zo:
*/
$id = 0; // default waarde
if(isset($_GET['id']))
{
$id = intval($_GET['id']);
}
// een geldig id uit een database is altijd groter dan nul
if($id > 0) {
$sql = "SELECT * FROM video WHERE genre=" . $id;
} else {
$sql = "SELECT * FROM video";
}
$videoResult = mysqli_query($con, $sql)
or die(mysqli_error($con));
?>
<!DOCTYPE html>
<html>
<head>
<title>Videotheek</title>
<meta charset="UTF-8">
<style>
.table-border {
border-collapse: collapse;
}
.table-border td,
.table-border th {
border: 1px solid black;
}
</style>
</head>
<body>
<table class="table-border">
<tr>
<th>Genre</th>
</tr>
<?php while($row = mysqli_fetch_assoc($genreResult)) { ?>
<tr>
<td>
<?php echo '<a href="videotheek.php?id=' . $row['id'] . '">' . $row['genre'] . '</a>'; ?>
</td>
</tr>
<?php } ?>
</table>
<h3>Video's</h3>
<table class="table-border">
<tr>
<th>Video</th>
</tr>
<?php while($row = mysqli_fetch_assoc($videoResult)) { ?>
<tr>
<td>
<!-- Het img element is een singleton en sluit je in HTML5 gewoon af met een >. bijvoorbeeld <img src="/images/plaatje.jpg"> -->
<?php echo '<img src="' . $row['afbeelding'] . '">'; ?>
</td>
</tr>
<?php } ?>
</table>
</body>
</html>
Gewijzigd op 15/01/2017 02:31:06 door Frank Nietbelangrijk
- or die() is not done, een betere foutafhandeling met bijhorende uitleg was wellicht beter geweest
- Het hardhandig casten naar int is niet altijd handig, nu is het in de opzet die je aandraagt wel correct, maar ik mis de beredenering. In dit geval mogelijk iets als: "accepteer het ID alleen als het een getal is, en wanneer deze groter dan 0 is. Immers: het casten van een string naar int lever een 0 op wanneer deze geen getal bevat binnen de precision ini setting."
- Waarom wordt er gebruik gemaakt van verschillende naamgevingen voor een result variabele? De query dichter bij de verwerking uitvoeren lijkt logischer om de zaak overzichtelijk te houden.
heel erg bedankt! ook voor de tips ga er zeker wat mee doen! dankjewel
Er bestaat ook iets als smaak. Met name wat betreft je laatste punt ben ik het in dit geval niet met je eens.
Het gaat gewoon om twee variabelen met een resource set die je beiden nodig hebt in de 'view'. Daar is totaal niets mis mee. Je kan de resultaten ook eerst in een array zetten maar dat vergt wel meer geheugen hetgeen niet erg is maar ik zou dan zeker zorgen dat het aantal gelimiteerd wordt.
Hiermee ga ik niet zeggen dat mijn voorbeeld perfect is maar er zit voor Robin al heel erg veel informatie in die hem flink aan het denken zal zetten, althans dat hoop ik. Bepaalde zaken vind ik dan persoonlijk ook minder belangrijk.
Ik snap overigens ook niet dat men hier zo timide doet over de die() functie zonder te vertellen hoe het dan wel moet. In mijn opinie zou je als volwassen programmeur moeten zorgen dat er hoe dan ook een geldige HTML pagina uit komt maar dat gaat weer veel te ver voor een voorbeeldje op phphulp.
Gewijzigd op 15/01/2017 12:50:39 door Frank Nietbelangrijk