Foto's halen uit een database (zonder url)
Ik zat eraan te denken om de foto's te importeren via hun ID bv 5 en 6. Ik heb al wat opgezocht, maar ik zit toch weer even vast. De kolom waarin de id nummers staan heet I_ID. Verder krijg ik op lijn 21 een foutmelding te zien dat er een undefined index is.
Dit is lijn 21:
Dit is mijn volledige code:
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
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
<?php
include('connect-mysql.php');
$sqlget = "SELECT * FROM artikel, images";
$sqldata = mysqli_query($dbcon, $sqlget) or die('error getting');
$id = $_GET['I_ID'];
$query = "SELECT * FROM images WHERE `id`=$id";
echo "<table>";
echo "<tr><th>A_ARTCODE</th><th>A_NUMMER</th><th>A_OMSCHRN</th><th>A_REFLEV</th><th>A_WINKEL</th><th>I_ARTCODE</th><th>I_FILE</th></tr>";
while($row = mysqli_fetch_array($sqldata)){
echo "<tr><td>";
echo $row['A_ARTCODE'];
echo "</td><td>";
echo $row['A_NUMMER'];
echo "</td><td>";
echo $row['A_OMSCHRN'];
echo "</td><td>";
echo $row['A_REFLEV'];
echo "</td><td>";
echo $row['A_WINKEL'];
echo "</td><td>";
echo $row['I_ARTCODE'];
echo "</td><td>";
echo "<img src='index.php?id=".$row['I_ID']."' />";
echo "</td></tr>";
}
echo "</table>";
?>
include('connect-mysql.php');
$sqlget = "SELECT * FROM artikel, images";
$sqldata = mysqli_query($dbcon, $sqlget) or die('error getting');
$id = $_GET['I_ID'];
$query = "SELECT * FROM images WHERE `id`=$id";
echo "<table>";
echo "<tr><th>A_ARTCODE</th><th>A_NUMMER</th><th>A_OMSCHRN</th><th>A_REFLEV</th><th>A_WINKEL</th><th>I_ARTCODE</th><th>I_FILE</th></tr>";
while($row = mysqli_fetch_array($sqldata)){
echo "<tr><td>";
echo $row['A_ARTCODE'];
echo "</td><td>";
echo $row['A_NUMMER'];
echo "</td><td>";
echo $row['A_OMSCHRN'];
echo "</td><td>";
echo $row['A_REFLEV'];
echo "</td><td>";
echo $row['A_WINKEL'];
echo "</td><td>";
echo $row['I_ARTCODE'];
echo "</td><td>";
echo "<img src='index.php?id=".$row['I_ID']."' />";
echo "</td></tr>";
}
echo "</table>";
?>
Verder, stel het bestaat wel, stop je die ongecontroleerd/onbeveiligd in de query. Dat is dan een lek. Zie sql-injection.
Bij <img src="moet je het path ingeven naar het bstand"/>
Waarom heb je twee query's waarvan je niks met die op lijn 7 doet?
Maar je zegt dat ik het pad moet ingeven naar het bestand. Dit is het pad '000000-001000', klopt dat dan wel?
Toevoeging op 02/06/2014 15:45:34:
- Aar - op 02/06/2014 15:37:52:
Waarom heb je twee query's waarvan je niks met die op lijn 7 doet?
Geen idee, ik had dit overgenomen van een voorbeeld. Normaalgezien is het de bedoeling dat ik het id nummer van een foto selecteer. Bv artikelen met foto id 5, krijgen automatisch foto 5 toegewezen en hetzelfde verhaal met foto 6.
- Plus je mist aan het begin een controle met: if(isset($_GET['I_ID'])) {
- En de foutafhandeling op je query mist.
- Ook kan je na je isset()-controle nog een mysqli_num_rows() controle doen om te kijken hoeveel records er in je database staan. Als dit 0 is, kan je een foutmelding tonen.
- Als je zeker weet dat je maar 1 record terugkrijgt, dan hoef je geen while() te gebruiken.
Gewijzigd op 02/06/2014 15:50:15 door - Ariën -
Quote:
Om men foutmelding weg te werken, heb ik dit gedaan:
Code (php)PHP script in nieuw venster Selecteer het PHP script
1
$id = isset($_GET['I_ID']);
Code (php)PHP script in nieuw venster Selecteer het PHP script
1
$id = isset($_GET['I_ID']);
waarom niet
?
isset() geeft true of false terug. niet de waarde in de var.
zou zinniger antwoord geven
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
include('connect-mysql.php');
$sqlget = "SELECT * FROM artikel";
$id = filter_input(INPUT_GET, 'I_ID', FILTER_SANITIZE_NUMBER_INT);
if(isset($_GET['id'])) {
$query = "SELECT * FROM images WHERE `id`=$id";
} else {
redirect('index.php'); //redirect is a function
}
$sqldata = mysqli_query($dbcon, $sqlget, $query) or die('error getting');
?>
include('connect-mysql.php');
$sqlget = "SELECT * FROM artikel";
$id = filter_input(INPUT_GET, 'I_ID', FILTER_SANITIZE_NUMBER_INT);
if(isset($_GET['id'])) {
$query = "SELECT * FROM images WHERE `id`=$id";
} else {
redirect('index.php'); //redirect is a function
}
$sqldata = mysqli_query($dbcon, $sqlget, $query) or die('error getting');
?>
Gewijzigd op 02/06/2014 16:07:58 door Ni els
Verder is de benaming van $sqldata fout, een query bevat niet de data. Die krijg je pad als je de query fetched.
Gewijzigd op 02/06/2014 16:10:49 door - Ariën -
Code (php)
ik heb geen idee welke naam ik $sqldata anders moet geven. (ik ken nog altijd niks van php)
Waarom gebruik je niet direct in de query mysqli_real_escape_string($_GET['I_ID']), en controleer je daarboven of de $_GET['I_ID'] gecontroleerd is met isset().
Los daarvan vraag ik me af waarom je twee tabellen betrekt?
Gewijzigd op 02/06/2014 16:28:46 door - Ariën -
regel verplaatsen dus naar een plek voordat je $id gebruikt...
- Aar - op 02/06/2014 16:24:24:
Waar komt $id vandaan?
Waarom gebruik je niet direct in de query mysqli_real_escape_string($_GET['I_ID']), en controleer je daarboven of de $_GET['I_ID'] gecontroleerd is met isset().
Los daarvan vraag ik me af waarom je twee tabellen betrekt?
Waarom gebruik je niet direct in de query mysqli_real_escape_string($_GET['I_ID']), en controleer je daarboven of de $_GET['I_ID'] gecontroleerd is met isset().
Los daarvan vraag ik me af waarom je twee tabellen betrekt?
Omdat ik een tabel heb met artikelen, maar deze bevatten ook telkens een foto en deze foto's staan in een andere tabel. Ik moet eerlijk zijn, ik weet echt niet waar ik precies die moet zetten. Ik weet niet precies wat je bedoelt met query.
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
include('connect-mysql.php');
if(isset($_GET['I_ID'])) {
$id = filter_input(INPUT_GET, 'I_ID', FILTER_SANITIZE_NUMBER_INT);
$sqlget = "SELECT * FROM artikel, images WHERE `I_ID`='".$id."'";
$result = mysqli_query($dbcon, $sqlget);
if($result) {
// hier de boel fetchen met mysqli_fetch_array
} else {
// error... toon hier de foutmelding met mysqli_error(...)
}
} else {
// error: Geen ID meegegeven!
}
?>
include('connect-mysql.php');
if(isset($_GET['I_ID'])) {
$id = filter_input(INPUT_GET, 'I_ID', FILTER_SANITIZE_NUMBER_INT);
$sqlget = "SELECT * FROM artikel, images WHERE `I_ID`='".$id."'";
$result = mysqli_query($dbcon, $sqlget);
if($result) {
// hier de boel fetchen met mysqli_fetch_array
} else {
// error... toon hier de foutmelding met mysqli_error(...)
}
} else {
// error: Geen ID meegegeven!
}
?>
Gewijzigd op 02/06/2014 16:46:54 door - Ariën -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if(isset($_GET['I_ID'])) {
$id = filter_input(INPUT_GET, 'I_ID', FILTER_SANITIZE_NUMBER_INT);
$sqlget = "SELECT * FROM artikel, images WHERE `I_ID`='".$id."'";
$result = mysqli_query($dbcon, $sqlget);
if($result) {
mysqli_real_escape_string($_GET['I_ID']);
} else {
mysqli_error('Dit is een foutmelding');
}
} else {
die( 'no Id set in Post');
}
?>
if(isset($_GET['I_ID'])) {
$id = filter_input(INPUT_GET, 'I_ID', FILTER_SANITIZE_NUMBER_INT);
$sqlget = "SELECT * FROM artikel, images WHERE `I_ID`='".$id."'";
$result = mysqli_query($dbcon, $sqlget);
if($result) {
mysqli_real_escape_string($_GET['I_ID']);
} else {
mysqli_error('Dit is een foutmelding');
}
} else {
die( 'no Id set in Post');
}
?>
Gewijzigd op 02/06/2014 16:55:43 door Ni els
En verder is die() geen goede foutafhandeling. Je kan er beter een echo plaatsen.
Verder slaat lijn 7 ook nergens op.
Er mist een link naar je databaseconnectie in mysqli_error(). Je kan er geen eigen string in plaatsen.
Misschien mijn gele comments eens lezen in plaats van wat rond te klooien?
Gewijzigd op 02/06/2014 17:05:53 door - Ariën -
Neen niet echt, zoals ik zei, ik heb geen verstand van php. Ik las je comments wel, maar ga er niet vanuit dat ik het daarom meteen kan. Voor mij is het nog altijd in het duister tasten.
Waarom gebruik je dan na je if($result) { opeens mysqli_real_escape_string() in plaats van de aangeprezen mysqli_fetch_array?
- Aar - op 02/06/2014 16:43:35:
Dit lijkt verdacht veel op een cross-join: of één artikel krijgt alle images, of één image krijgt alle artikelen.
@Niels
In $_GET komen de naam-waarde combinaties die achter het vraagteken in de url staan:
bv. http://jouwsite.nl/artikel.php?I_ID=1234
Ni els op 02/06/2014 15:13:37:
maar het pad bij men 2 foto's zijn allebei hetzelfde. Dus het lijkt met niet echt logisch om hiermee verder te werken. Tenzij ik het verkeerd begrijp natuurlijk.
Ik zat eraan te denken om de foto's te importeren via hun ID bv 5 en 6.
Ik zat eraan te denken om de foto's te importeren via hun ID bv 5 en 6.
Je hebt het over importeren, maar als het om importeren gaat, waarom dan een select-query? Hoe wil je foto's importeren op basis van een id? Waaruit blijkt dat id?
Er van uitgaande dat je bedoelt dat je gegevens wilt tonen: hoe heb je de gegevens opgeslagen in je database? Ik neem aan in ieder geval de naam van de afbeelding. Dat het pad naar de foto's gelijk is, is (natuurlijk) geen probleem, zolang de afbeeldingen maar een verschillende naam hebben.
In je titel staat "Foto's halen uit een database (zonder url)", maar je werkt wel met $_GET. Wat staat er dan in de url?
Ni els op 02/06/2014 17:29:18:
Neen niet echt, zoals ik zei, ik heb geen verstand van php. Ik las je comments wel, maar ga er niet vanuit dat ik het daarom meteen kan. Voor mij is het nog altijd in het duister tasten.
Wat houdt je tegen om je in php te verdiepen? Als je comments leest, maar niet begrijpt, waarom vraag je dan niet om meer info?
Even fresh start:
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
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
<?php
include('connect-mysql.php');
$sqlget = "SELECT * FROM artikel, images";
$sqldata = mysqli_query($dbcon, $sqlget) or die('error getting');
echo "<table>";
echo "<tr><th>A_ARTCODE</th><th>A_NUMMER</th><th>A_OMSCHRN</th><th>A_REFLEV</th><th>A_WINKEL</th><th>I_ARTCODE</th><th>I_FILE</th></tr>";
while($row = mysqli_fetch_array($sqldata)){
echo "<tr><td align='right'>";
echo $row['A_ARTCODE'];
echo "</td><td align='left'>";
echo $row['A_NUMMER'];
echo "</td><td align='left'>";
echo $row['A_OMSCHRN'];
echo "</td><td align='left'>";
echo $row['A_REFLEV'];
echo "</td><td align='right'>";
echo $row['A_WINKEL'];
echo "</td><td align='right'>";
echo $row['I_ARTCODE'];
echo "</td><td align='right'>";
echo $row['I_FILE'];
//echo "<img src='000000-001000".$row['I_ID']."' />";
echo "</td></tr>";
}
echo "</table>";
?>
include('connect-mysql.php');
$sqlget = "SELECT * FROM artikel, images";
$sqldata = mysqli_query($dbcon, $sqlget) or die('error getting');
echo "<table>";
echo "<tr><th>A_ARTCODE</th><th>A_NUMMER</th><th>A_OMSCHRN</th><th>A_REFLEV</th><th>A_WINKEL</th><th>I_ARTCODE</th><th>I_FILE</th></tr>";
while($row = mysqli_fetch_array($sqldata)){
echo "<tr><td align='right'>";
echo $row['A_ARTCODE'];
echo "</td><td align='left'>";
echo $row['A_NUMMER'];
echo "</td><td align='left'>";
echo $row['A_OMSCHRN'];
echo "</td><td align='left'>";
echo $row['A_REFLEV'];
echo "</td><td align='right'>";
echo $row['A_WINKEL'];
echo "</td><td align='right'>";
echo $row['I_ARTCODE'];
echo "</td><td align='right'>";
echo $row['I_FILE'];
//echo "<img src='000000-001000".$row['I_ID']."' />";
echo "</td></tr>";
}
echo "</table>";
?>
Dit werkt zoals het zou moeten, maar gisteravond heeft een collega van me mijn versie wat aangepast en hierbij kreeg hij het volgende:
https://www.dropbox.com/s/qhymezzu7ljy5dz/urlafbeelding.jpg
Maar mijn eerste probleem is nu, hoe hij aan die volledige naam komt van die foto's. Wanneer ik precies dezelfde code heb zoals hem, dan krijg ik slechts 5.jpg te zien, kan dit zijn dat het aan de database ligt die mijn pagina onvoldoende permissies geeft om de volledige naam op te kunnen vragen?
Gewijzigd op 03/06/2014 10:21:51 door Ni els
Een 'error getting' zegt immers niet zo veel, plus dat die() kerkhof-techniek is, die nergens voor nodig is. Je script hoeft immers niet dood te gaan bij een fout. Gewoon netjes eromheen werken met een if-else statement.
Verder heeft dit niks met permissies van een database te maken. Ze bestaan wel, maar staan hier totaal los van. Misschien dat er een ander type in de database wordt gebruikt om de namen in op te slaan?
Gewijzigd op 03/06/2014 10:37:59 door - Ariën -