Toon posts:

[PHP/MySQL] Afbeelding in database zetten - gaat niet goed

Pagina: 1
Acties:

Onderwerpen


  • Wess
  • Registratie: februari 2005
  • Laatst online: 29-12-2012

Wess

Rookworst zonder R = ook worst

Topicstarter
Beste Tweakers,

Ik loop tegen een probleem aan en ik kom hier maar niet uit. Ik kom
net kijken in de wereld van databases en PHP, dus wellicht is het een
hele domme vraag. Uiteraard heb ik wel eerst gezocht, maar heb helaas
niets kunnen vinden.

De situatie:
Ik wil graag een database met daarin films vullen en die laten zien via een
PHP-pagina.

De database heeft een tabel genaamd 'movies' met daarin 4 velden:
- Naam
- Genre
- Duur
- Afbeelding (en hier gaat het fout)

Op deze manier haal ik dat op:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

include "connect.php"; //verbinding maken
$query = "SELECT * FROM movies";
//query is aangemaakt
$sql = mysql_query($query) or die ( mysql_error( ) );
//query is uitgevoerd

echo    "<table width='800px' cellspacing='0' cellpadding='0'>

<tr><td><strong>Naam:</strong></td><td><strong>Genre:</strong></td><td><strong>Duur:</strong></td><td><strong>Afbeelding:</strong></td></tr>";
while($record = mysql_fetch_object($sql)){

echo"<tr><td>".$record->naam."</td><td>".$record->genre."</td><td>".$record->duur." minuten</td><td>".$record->afbeelding."</td></tr>";
}
echo    "</table>";

?>


So far so good. Ik kan de database invullen en doe dat op de eenvoudigste manier:
- Naam: Brooklyn's Finest
- Genre: Actie
- Duur: 132
- Afbeelding: <img src='http://www.filmclub.nl/images/thumbnails/5646_tn_Brooklyns-Finest.jpg'></img>

(uiteindelijk ga ik uiteraard afbeeldingen op eigen server plaatsen etc.)

Als ik dit invul, is er helemaal niets aan de hand. Ga ik echter nog een veld invullen met exact dezelfde
gegevens dan gaat het fout. De afbeelding en de informatie worden dan niet correct weergegeven.

Vul ik 2 velden in zonder afbeelding, dan is er niets aan de hand.

Heeft iemand een idee wat hier de fout zou kunnen zijn?

  • Matis
  • Registratie: januari 2007
  • Laatst online: 15:57

Matis

Rubber Rocket

Je gaat toch niet echt de URL inclusief "<img src=" etc in je database zetten :X
Daarnaast zie ik nergens een stukje code dat daadwerkelijk de database vult, plus ik denk dat er ook nog wel wat foutmeldingen gegenereerd worden.

Plaats beide eens!

If money talks then I'm a mime
If time is money then I'm out of time


  • Aloys
  • Registratie: juni 2005
  • Niet online
Tip: laat die <img> tag weg in de database en stop dus alleen de url in je db. De img-tag kan je in je html zetten. Probeer eens of dat helpt? Ik denk dat je database die aanhalingstekens niet zo leuk vind ;) .

  • ID-College
  • Registratie: november 2003
  • Laatst online: 11:24
In addition, wat gaat er fout dan? Je ziet een lege pagina of krijg je foutmeldingen. Daarnaast HTML code in je database verzamelen? You got to be kiddin..

  • TheBorg
  • Registratie: november 2002
  • Laatst online: 16-09 12:36

TheBorg

Resistance is futile.

Ik ga voor de magnetron en de koelkast zonder de vraag te zien (MySQL insert):
http://php.net/manual/en/...ql-real-escape-string.php

  • Wess
  • Registratie: februari 2005
  • Laatst online: 29-12-2012

Wess

Rookworst zonder R = ook worst

Topicstarter
Er worden geen foutmelding gegenereerd en de database laat het dus gewoon zien,
en ik heb de HTML nu uit de database gehouden en in het PHP-script gezet, en nu
werkt alles prima!

Overigens: is het heel verkeerd om enkele HTML-tags in je database te zetten?
Zoals gezegd: ik ben een absolute beginner. Hoe kan ik dat nou weten :P

Hier is het scriptje nu werkend te zien:
http://www.videokringmeppel.nl/db/

Het PHP-script nu:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

include "connect.php"; //verbinding maken
$query = "SELECT * FROM movies ORDER BY datum ASC";
//query is aangemaakt
$sql = mysql_query($query) or die ( mysql_error( ) );
//query is uitgevoerd

echo    "<table width='800px' cellspacing='0' cellpadding='0'>

<tr><td><strong>Naam:</strong></td><td><strong>Genre:</strong></td><td><strong>Duur:</strong></td><td><strong>Afbeelding:</strong></td><td><strong>Releasedatum:</strong></td></tr>";
while($record = mysql_fetch_object($sql)){

echo"<tr><td>".$record->naam."</td><td>".$record->genre."</td><td>".$record->duur." minuten</td><td><img src=".$record->afbeelding."></img></td><td>".$record->datum."</td></tr>";
}
echo    "</table>";

?>

[Voor 47% gewijzigd door Wess op 11-10-2010 21:31]


  • CH4OS
  • Registratie: april 2002
  • Niet online

CH4OS

It's a kind of magic

Waarom zou die <img>-tag niet in de database mogen? Wie zegt dat dat allemaal niet al afgehandeld is? En daarbij, zoals te lezen in de TS, gaat dat op een gegeven moment vervangen worden door eigen afbeeldingen. Als het systeem voor privé gebruik is, wat is dan het probleem? :? Zolang het al correct afgehandeld in de database in de DB is gekomen, waarom zou je het dan niet zo 1:1 over mogen nemen uit de database?

Leuk dat jullie wel alle (relevante) code willen zien, waarmee iets in de database gestopt word en de foutmeldingen. Desondanks dat jullie te weinig code zien, denken jullie wel SQL injection te herkennen? :?
Wess schreef op maandag 11 oktober 2010 @ 21:26:
Er worden geen foutmelding gegenereerd en de database laat het dus gewoon zien,
en ik heb de HTML nu uit de database gehouden en in het PHP-script gezet, en nu
werkt alles prima!

Overigens: is het heel verkeerd om enkele HTML-tags in je database te zetten?
Zoals gezegd: ik ben een absolute beginner. Hoe kan ik dat nou weten :P

Hier is het scriptje nu werkend te zien:
http://www.videokringmeppel.nl/db/

Het PHP-script nu:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

include "connect.php"; //verbinding maken
$query = "SELECT * FROM movies ORDER BY datum ASC";
//query is aangemaakt
$sql = mysql_query($query) or die ( mysql_error( ) );
//query is uitgevoerd

echo    "<table width='800px' cellspacing='0' cellpadding='0'>

<tr><td><strong>Naam:</strong></td><td><strong>Genre:</strong></td><td><strong>Duur:</strong></td><td><strong>Afbeelding:</strong></td><td><strong>Releasedatum:</strong></td></tr>";
while($record = mysql_fetch_object($sql)){

echo"<tr><td>".$record->naam."</td><td>".$record->genre."</td><td>".$record->duur." minuten</td><td><img src=".$record->afbeelding."></img></td><td>".$record->datum."</td></tr>";
}
echo    "</table>";

?>
Als het nu goed werkt, als je de HTML uit de records hebt gehaald, dan moet de fout in je HTML hebben gezeten, niet in je jouw PHP- of SQL-code.

[Voor 65% gewijzigd door CH4OS op 11-10-2010 21:32]


  • TheBorg
  • Registratie: november 2002
  • Laatst online: 16-09 12:36

TheBorg

Resistance is futile.

Wess schreef op maandag 11 oktober 2010 @ 21:26:
heb de HTML nu uit de database gehouden
CptChaos schreef op maandag 11 oktober 2010 @ 21:29:
denken jullie wel SQL injection te herkennen? :?
HTML image tag is de enige tekst met een quote erin.

[Voor 17% gewijzigd door TheBorg op 11-10-2010 21:32]


  • CH4OS
  • Registratie: april 2002
  • Niet online

CH4OS

It's a kind of magic

TheBorg schreef op maandag 11 oktober 2010 @ 21:31:
HTML image tag is de enige tekst met een quote erin.
Wacht, jij had het over iets anders als ik. Ik reageerde op Matis die het onlogisch vind om HTML-code in een record te zetten.

[Voor 57% gewijzigd door CH4OS op 11-10-2010 21:36]


  • Wess
  • Registratie: februari 2005
  • Laatst online: 29-12-2012

Wess

Rookworst zonder R = ook worst

Topicstarter
Heren, de HTML code had ik zelf in de database geplaatst zodat het plaatje
weergegeven zou worden. Ik weet niet eens wat databae-injection is, laat
staan dat ik dat heb gebruikt ;-)

Zoals te zien op eerder genoemde link werk e.e.a. nu naar behoren door de HTML
uit de database te halen en in het PHP-script te plaatsen. Uiteraard vele malen
slimmer, maar zelf gewoon niet aan gedacht.

Hiervoor veel dank!
Als er verder nog op of aanmerkingen zijn dan hoor ik die zeer graag.

  • Aloys
  • Registratie: juni 2005
  • Niet online
Wess schreef op maandag 11 oktober 2010 @ 21:26:
Er worden geen foutmelding gegenereerd en de database laat het dus gewoon zien,
en ik heb de HTML nu uit de database gehouden en in het PHP-script gezet, en nu
werkt alles prima!

Overigens: is het heel verkeerd om enkele HTML-tags in je database te zetten?
Zoals gezegd: ik ben een absolute beginner. Hoe kan ik dat nou weten :P

Hier is het scriptje nu werkend te zien:
http://www.videokringmeppel.nl/db/

Het PHP-script nu:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

include "connect.php"; //verbinding maken
$query = "SELECT * FROM movies ORDER BY datum ASC";
//query is aangemaakt
$sql = mysql_query($query) or die ( mysql_error( ) );
//query is uitgevoerd

echo    "<table width='800px' cellspacing='0' cellpadding='0'>

<tr><td><strong>Naam:</strong></td><td><strong>Genre:</strong></td><td><strong>Duur:</strong></td><td><strong>Afbeelding:</strong></td><td><strong>Releasedatum:</strong></td></tr>";
while($record = mysql_fetch_object($sql)){

echo"<tr><td>".$record->naam."</td><td>".$record->genre."</td><td>".$record->duur." minuten</td><td><img src=".$record->afbeelding."></img></td><td>".$record->datum."</td></tr>";
}
echo    "</table>";

?>
Probeer dit eens?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php

include "connect.php"; //verbinding maken
$query = "SELECT * FROM movies ORDER BY datum ASC";
$sql = mysql_query($query) or die ( mysql_error( ) );

while($record = mysql_fetch_object($sql)){

  echo"<pre>"; 
  print_r($record); 
  echo"</pre>";
}


Dan kunnen we zien wat er fout gaat met je variabelen :) .

EDIT: Naja.. misschien handig om dit voor jezelf toch eens te proberen ;) .

  • AW_Bos
  • Registratie: april 2002
  • Laatst online: 16:42

AW_Bos

Waar ga je heen? ☀

Dan zou ik eerder voor dit gaan. Een object geeft naar weten geen array terug wat print_r() verwacht :P.
Tevens heb ik wat nettere foutafhandeling toegevoegd.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

include "connect.php"; //verbinding maken
$query = "SELECT * FROM movies ORDER BY datum ASC";
$result = mysql_query($query);
if($result) {
  while($record = mysql_fetch_assoc($query)){
   echo "<pre>".print_r($record,1)."</pre>"; 
  } 
} echo {
 echo "Er is een fout opgetreden: ".mysql_error();
}
?>

[Voor 3% gewijzigd door AW_Bos op 11-10-2010 21:53]

Waar ga je heen?


  • Janoz
  • Registratie: oktober 2000
  • Laatst online: 15:13

Janoz

Moderator Devschuur®

!litemod

Wess schreef op maandag 11 oktober 2010 @ 21:37:
Ik weet niet eens wat databae-injection is, laat staan dat ik dat heb gebruikt ;-)
Dat is juist het grote probleem van database injectie. Het is iets dat je niet wilt hebben en mensen die het niet kennen implementeren het per ongeluk uit onwetendheid. Het zorgt er voor dat hackers heel makkelijk toegang tot je database kunnen krijgen. Dat is iets dat je niet wilt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Cartman!
  • Registratie: april 2000
  • Niet online
CptChaos schreef op maandag 11 oktober 2010 @ 21:33:
[...]
Wacht, jij had het over iets anders als ik. Ik reageerde op Matis die het onlogisch vind om HTML-code in een record te zetten.
Dat is het ook. Als je nou over een paar weken denkt dat je een andere frontend wilt dan HTML, wat dan?

  • Janoz
  • Registratie: oktober 2000
  • Laatst online: 15:13

Janoz

Moderator Devschuur®

!litemod

Zover hoeft nog niet eens. Deze oplossing gaat al een probleem opleveren zodra voor een kleine aanpassing in de layout het wel heel handig was geweest dat de image tag een class had gehad.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Gomez12
  • Registratie: maart 2001
  • Laatst online: 23-07 14:44
CptChaos schreef op maandag 11 oktober 2010 @ 21:33:
[...]
Wacht, jij had het over iets anders als ik. Ik reageerde op Matis die het onlogisch vind om HTML-code in een record te zetten.
Het is in 99% van de gevallen ook zo goed als onlogisch.

Je html wil je afhandelen in je templatelaag ( even daargelaten of je php al een template vind ).
Dan kan je makkelijker je templates veranderen als je later een lightbox oid erbij wilt zetten. Of als je opeens een andere uitvoer-template wilt hebben.

  • Cartman!
  • Registratie: april 2000
  • Niet online
Janoz schreef op maandag 11 oktober 2010 @ 22:55:
Zover hoeft nog niet eens. Deze oplossing gaat al een probleem opleveren zodra voor een kleine aanpassing in de layout het wel heel handig was geweest dat de image tag een class had gehad.
Dat zou je nog kunnen 'oplossen' door er een elementje omheen te knallen maar jouw punt gaat zelfs ook al op inderdaad.

@Gomez12: maak daar maar 99,9999% van ;)

  • ajakkes
  • Registratie: maart 2004
  • Laatst online: 05-09 11:21
Html in je database is niet het probleem. Als je opgemaakte tekst wil opslaan is het geen probleem.

Maar in dit geval zou je bij elk plaatje <img src=' '></img> gaan opslaan. Als het bij elk record hetzelfde is moet je het niet in de database op gaan slaan.

Als het een stuk tekst is met een variabel aantal plaatjes op willekeurige plekken kan je prima de html code <img gebruiken.

De fout lag zeer waarschijnlijk bij de ' die je niet escaped. Het niet escapen van dit soort karakters zorgt ervoor dat anderen als ze bij de pagina komen je mysql kunnen injecteren en op die manier je hele database zouden kunnen wissen. Vandaar dat er wordt gesproken over sql injection.

Ik vraag me echter af of je hebt gekeken wat er wel in je database terecht kwam. Als je had gekeken naar de bron van je pagina had je waarschijnlijk kunnen zien wat er fout ging.

👑


  • Janoz
  • Registratie: oktober 2000
  • Laatst online: 15:13

Janoz

Moderator Devschuur®

!litemod

Maar in dat geval is je html ook daadwerkelijk onderdeel van je content, en niet je presentatielaag. In dat geval is het type van je kolom niet '(url naar) plaatje', maar 'rich text in html opmaak'.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • twiFight
  • Registratie: januari 2002
  • Niet online
Ik ben zelf ook een DB nieuweling, maar maak het wel mijn zaak om de beveiliging goed uit te zoeken voor dat ik bezig ga. Nu had ik al van SQL injecties gehoord, dus daar heb ik het e.e.a. over opgezocht. Ik kan je dus wel een paar linkjes geven. Lees de volgende site eens door:

http://www.codeproject.co.../SqlInjectionAttacks.aspx

Dan ben je al een heel eind. Tenslotte heb ik nog een forum post over iemand die ook informatie wil, daar staan een aantal linkjes geplaatst die (bijna) allemaal wel goede informatie geven en tevens duidelijk te lezen zijn. Alles wordt met simpele voorbeelden toegelicht.

http://www.eggheadcafe.co...-statements-with-sql.aspx

Voorkom dit! Je zult maar net zo'n verveelde puber tegenkomen die jou wil naaien en hoppa, je bent 2 maanden werk kwijt. Aan de URL te zien is het ook geen prive projectje, maar wil je een site de lucht in laten gaan voor een videotheek. Dan kun je dat soort ongein niet hebben.

  • alex3305
  • Registratie: januari 2004
  • Laatst online: 09:19
Je zou ook in plaats van MySQL of MySQLi, PDO kunnen gaan gebruiken. Deze laatste is ook wat vriendelijker ten opzichte van beginners en beschermt je al een heel eind tegen nare SQL injectie aanvallen.
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee