Zoals jullie wel weten heb ik vorige week een post aangemaakt rond het importeren van een database op een webpagina. Maar nu zou ik graag foto's importeren vanuit dezelfde database, deze foto's bevatten geen url, maar wel een pad. Bv: 000000-001000, 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 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:


$id = $_GET['I_ID'];




Dit is mijn volledige code:


<?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>";
?>
$_GET['I_ID'] is dus onbekend.

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?
Om men foutmelding weg te werken, heb ik dit gedaan:


$id = isset($_GET['I_ID']);


Maar je zegt dat ik het pad moet ingeven naar het bestand. Dit is het pad '000000-001000', klopt dat dan wel?


echo "<img src='000000-001000".$row['I_ID']."' />";


[size=xsmall]Toevoeging op 02/06/2014 15:45:34:[/size]

- 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.
- Dan moet je wel de query op lijn 7 gebruiken, en die wordt niet uitgevoerd door mysqli_query.
- 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.

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']);


waarom niet

<?php
$id = rand(0,1);
?>

?

isset() geeft true of false terug. niet de waarde in de var.

<?php
$id = filter_input(INPUT_GET, 'I_ID', FILTER_SANITIZE_NUMBER_INT);
?>

zou zinniger antwoord geven
Bedoelen jullie dan ongeveer zoiets? Of ben ik helemaal de mist in gegaan?


<?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');
?>
Waarom twee queries?
Verder is de benaming van $sqldata fout, een query bevat niet de data. Die krijg je pad als je de query fetched.
Ok, ik heb er nu dit van gemaakt:


<?php
include('connect-mysql.php');
$sqlget = "SELECT * FROM artikel, images WHERE `I_ID`=$id";

$id = filter_input(INPUT_GET, 'I_ID', FILTER_SANITIZE_NUMBER_INT); 

$sqldata = mysqli_query($dbcon, $sqlget) or die('error getting');
?>


ik heb geen idee welke naam ik $sqldata anders moet geven. (ik ken nog altijd niks van php)
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?
regel verplaatsen dus naar een plek voordat je $id gebruikt...

Reageren