DB cell met imagelinks, hoe de explode functie to passen
Het is als volgt: Er is een db tabel met de naam voertuigen. Deze heeft diverse kolommen, waaronder 'merk','model','type','afbeeldingen','accessoires'.
Nu bevat de kolom 'afbeeldingen' en de kolom 'accessoires' meerdere waarden, gescheiden door een ",".
Hoe kan ik nu voor elke waarde in 'afbeeldingen', deze bevat meerdere urls naar afbeeldingen, de url als volgt echo-en?
Mijn script is nu als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
function toonvoertuigen()
{
include ('dbconn.php');
$voertuig = "SELECT * FROM voertuigen";
$results = mysqli_query($con,$voertuig) or die ("Couldn’t execute query.");
while($row = mysqli_fetch_assoc($results))
{
extract ($row);
$merkmodel = $row['merk']." ".$row['model'];
print "<div class=voertuig><span class='merkmodel'>" ."$merkmodel". "</span><br /><span class='type'>" .$type. "</span></div>\n";
}
}
?>
function toonvoertuigen()
{
include ('dbconn.php');
$voertuig = "SELECT * FROM voertuigen";
$results = mysqli_query($con,$voertuig) or die ("Couldn’t execute query.");
while($row = mysqli_fetch_assoc($results))
{
extract ($row);
$merkmodel = $row['merk']." ".$row['model'];
print "<div class=voertuig><span class='merkmodel'>" ."$merkmodel". "</span><br /><span class='type'>" .$type. "</span></div>\n";
}
}
?>
Gewijzigd op 11/12/2013 15:51:27 door Wim Kasius
Dit houd in dat je meerdere tabellen hebt en met elkaar koppelt.
Een tabel met 'afbeeldingen', een tabel met 'accessoires' en in je huidige tabel heb je een uniek id die je hieraan meegeeft. Dan kun je herleiden welke afbeeldingen en accessoires bij een id hoort.
Scheiden op komma kan met explode()
Code (php)
Gewijzigd op 11/12/2013 15:58:14 door Michael -
Als je de naam van de functie kent, is het gemakkelijk.
Dan ga je naar php.net tik de functienaam in search <input>
Die leidt je trouwens naar http://php.net/explode
----
Maar toch even vermelden: die waarden horen niet in 1 cel te zitten.
De bedoeling is dat je daarvoor een nieuwe tabel maakt.
tabel 'afbeeldingen'
met velden 'id' (= id van de afbeelding, met auto increment), voertuig (komt overeen met de id van het voertuig), afbeelding.
Dit concept heet normaliseren
Gewijzigd op 11/12/2013 15:59:40 door Kris Peeters
Kris Peeters op 11/12/2013 15:58:40:
Maar toch even vermelden: die waarden horen niet in 1 cel te zitten.
De bedoeling is dat je daarvoor een nieuwe tabel maakt.
tabel 'afbeeldingen'
met velden 'id' (= id van de afbeelding, met auto increment), voertuig (komt overeen met de id van het voertuig), afbeelding.
Dit concept heet normaliseren
Maar toch even vermelden: die waarden horen niet in 1 cel te zitten.
De bedoeling is dat je daarvoor een nieuwe tabel maakt.
tabel 'afbeeldingen'
met velden 'id' (= id van de afbeelding, met auto increment), voertuig (komt overeen met de id van het voertuig), afbeelding.
Dit concept heet normaliseren
edit: Ah dat is wel een goeie opzich, deze manier van normaliseren had ik nog niet aan gedacht, dus gewoon een tabel maken, met daarin drie kolommen: afbeelding_id,voertuignummer,url
Dat snap ik, hierop wil ik toch even iets verduidelijken. Het aantal fotos per voertuig varieert, en er is geen maximaal aantal. Hoe wil je dat normaliseren?
Ik kan het ook als volgt doen, wanneer de record word ingediend via http:$_post :
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
function verwerk_fotos() {
$fotos = explode(',', $_POST['afbeeldingen']);
foreach($fotos as $foto_nr => $foto_url) {
$bestandsnaam = 'fotos/'. $_POST['voertuig_nr'] .'-'. $foto_nr .'.jpg';
$imgdata = file_get_contents($foto_url);
file_put_contents($bestandsnaam, $imgdata);
}
$fotos = explode(',', $_POST['afbeeldingen']);
foreach($fotos as $foto_nr => $foto_url) {
$bestandsnaam = 'fotos/'. $_POST['voertuig_nr'] .'-'. $foto_nr .'.jpg';
$imgdata = file_get_contents($foto_url);
file_put_contents($bestandsnaam, $imgdata);
}
Maar hoe selecteer ik dan de alle fotos die horen bij het voertuig_nr weer voor de weergave?
Gewijzigd op 11/12/2013 16:26:01 door Wim Kasius
Wim Kasius op 11/12/2013 16:16:04:
Het aantal fotos per voertuig varieert, en er is geen maximaal aantal.
Ja, dat is net het punt.
Normaliseren doe je precies omwille van deze reden.
In de SELECT query heb je dan met JOIN te maken.
bv. iets als
Code (php)
1
2
3
2
3
SELECT voertuigen.id AS id, ..., afbeeldingen.afbeelding AS afbeelding
FROM voertuigen
LEFT JOIN afbeeldingen ON afbeeldingen.voertuig = voertuigen.id
FROM voertuigen
LEFT JOIN afbeeldingen ON afbeeldingen.voertuig = voertuigen.id
Waarbij je die ... vervangt door de velden van voertuigen die je nodig hebt.
Merk op: die AS ... is niet overal en altijd nodig. Maar als er twee velden van de twee tabellen een gemeenschappelijke naam hebben, zal SQL zeggen dat er ambiguiteit is (dubbelzinnigheid).
Gewijzigd op 11/12/2013 16:30:15 door Kris Peeters
Toch even een correctie hier.
Geeft geen ambiguïteit. Alleen als je dit met fetch_assoc in PHP oproept, heb je maar één waarde.
Ambiguïteit krijg je als in twee tabellen kolommen met dezelfde naam hebt, en deze niet met de tabelnaam/alias ervoor aanspreekt.
Daarnaast is het volstrekt zinloos om een kolom te aliassen met de naam van die kolom.
Gewijzigd op 12/12/2013 10:20:53 door Ger van Steenderen
id gaat ambiguiteit geven.
Als namen het zelfde zijn ...
Maar dat heeft niks met de alias te maken .....
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function toonvoertuigen()
{
include ('dbconn.php');
$voertuig = "SELECT * FROM voertuigen";
$results = mysqli_query($con,$voertuig) or die ("Couldnt execute query.");
while($row = mysqli_fetch_assoc($results))
{
extract ($row);
$merkmodel = $row['merk']." ".$row['model'];
print "<div class=\"voertuig\"><span class='merkmodel'>" ."$merkmodel". "</span><br /><span class='type'>" .$type. "</span><br />\n";
$afbeeldingen = explode(",", $afbeeldingen);
foreach($afbeeldingen AS $afbeelding)
{
echo "<img class=\"voertuigfoto\" src=" .$afbeelding. " >";
}
echo "</div>";
}
}
{
include ('dbconn.php');
$voertuig = "SELECT * FROM voertuigen";
$results = mysqli_query($con,$voertuig) or die ("Couldnt execute query.");
while($row = mysqli_fetch_assoc($results))
{
extract ($row);
$merkmodel = $row['merk']." ".$row['model'];
print "<div class=\"voertuig\"><span class='merkmodel'>" ."$merkmodel". "</span><br /><span class='type'>" .$type. "</span><br />\n";
$afbeeldingen = explode(",", $afbeeldingen);
foreach($afbeeldingen AS $afbeelding)
{
echo "<img class=\"voertuigfoto\" src=" .$afbeelding. " >";
}
echo "</div>";
}
}
Gewijzigd op 12/12/2013 13:51:15 door Wim Kasius