Foto's halen uit een database (zonder url)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ni els

Ni els

02/06/2014 15:13:37
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$id = $_GET['I_ID'];




Dit is mijn volledige code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>";
?>
 
PHP hulp

PHP hulp

28/11/2024 04:11:07
 
- SanThe -

- SanThe -

02/06/2014 15:24:10
Quote Anchor link
$_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"/>
 
- Ariën  -
Beheerder

- Ariën -

02/06/2014 15:37:52
Quote Anchor link
Waarom heb je twee query's waarvan je niks met die op lijn 7 doet?
 
Ni els

Ni els

02/06/2014 15:40:25
Quote Anchor link
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']);


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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo "<img src='000000-001000".$row['I_ID']."' />";


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.
 
- Ariën  -
Beheerder

- Ariën -

02/06/2014 15:48:39
Quote Anchor link
- 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.
Gewijzigd op 02/06/2014 15:50:15 door - Ariën -
 
Ivo P

Ivo P

02/06/2014 15:56:48
Quote Anchor link
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']);


waarom niet

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$id
= rand(0,1);
?>


?

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$id
= filter_input(INPUT_GET, 'I_ID', FILTER_SANITIZE_NUMBER_INT);
?>


zou zinniger antwoord geven
 
Ni els

Ni els

02/06/2014 16:07:15
Quote Anchor link
Bedoelen jullie dan ongeveer zoiets? Of ben ik helemaal de mist in gegaan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');
?>
Gewijzigd op 02/06/2014 16:07:58 door Ni els
 
- Ariën  -
Beheerder

- Ariën -

02/06/2014 16:09:31
Quote Anchor link
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.
Gewijzigd op 02/06/2014 16:10:49 door - Ariën -
 
Ni els

Ni els

02/06/2014 16:17:52
Quote Anchor link
Ok, ik heb er nu dit van gemaakt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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)
 
- Ariën  -
Beheerder

- Ariën -

02/06/2014 16:24:24
Quote Anchor link
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?
Gewijzigd op 02/06/2014 16:28:46 door - Ariën -
 
Ivo P

Ivo P

02/06/2014 16:34:36
Quote Anchor link
regel verplaatsen dus naar een plek voordat je $id gebruikt...
 
Ni els

Ni els

02/06/2014 16:36:48
Quote Anchor link
- 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?


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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysqli_real_escape_string($_GET['I_ID'])
moet zetten. Ik weet niet precies wat je bedoelt met query.
 
- Ariën  -
Beheerder

- Ariën -

02/06/2014 16:43:35
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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!
}
?>
Gewijzigd op 02/06/2014 16:46:54 door - Ariën -
 
Ni els

Ni els

02/06/2014 16:55:01
Quote Anchor link
Bedankt Aar, dus als ik het goed begrijp zou zoiets het moeten doen? Maar ik kom meteen bij men foutmelding uit (no Id set in Post). Moet ik dan ergens nog mijn ID definiëren ofzo?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');
}

?>
Gewijzigd op 02/06/2014 16:55:43 door Ni els
 
- Ariën  -
Beheerder

- Ariën -

02/06/2014 17:04:01
Quote Anchor link
In de URL? Ik neem aan dat je wel bekend met met $_GET?

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 -
 
Ni els

Ni els

02/06/2014 17:29:18
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

02/06/2014 17:35:58
Quote Anchor link
Waarom gebruik je dan na je if($result) { opeens mysqli_real_escape_string() in plaats van de aangeprezen mysqli_fetch_array?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

02/06/2014 17:42:58
Quote Anchor link
- Aar - op 02/06/2014 16:43:35:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $sqlget
= "SELECT * FROM artikel, images WHERE `I_ID`='".$id."'";
?>

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
 
Obelix Idefix

Obelix Idefix

02/06/2014 20:46:49
Quote Anchor link
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.

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?
 
Ni els

Ni els

03/06/2014 10:21:28
Quote Anchor link
Ik heb momenteel niet echt de tijd om me in php te verdiepen spijtiggenoeg, anders deed ik dat met alle plezier. Maar momenteel probeer ik wat basisinformatie bijeen te krabbelen. Maar om even uit te breiden op mijn probleem.

Even fresh start:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>";
?>


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
 
- Ariën  -
Beheerder

- Ariën -

03/06/2014 10:31:34
Quote Anchor link
Een frisse start, dat wel, maar wederom wordt er niks met mijn aangeprezen foutafhandeling gedaan.
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 -
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.