fout bij tonen afbeelding in php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Luuk Schouten

Luuk Schouten

01/07/2011 14:30:19
Quote Anchor link
Beste mensen,

Ik heb een script waarin ik een afbeelding kan uploaden naar mijn database en daarnaast een script die de afbeelding zou moeten tonen.

Nu toont de browser echter allemaal code i.p.v. de afbeelding. Kan iemand een fout ontdekken in mijn scripts? zie onderstaand

ps. excuses voor het onoverzichtelijke overzicht hieronder, hoe sluit ik een script af?

image.php (deze moet i.c.m. een id de foto tonen, bijv: image.php?id=12)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
include('connection.php');
$id= $_REQUEST["id"];
$q = 'SELECT (`foto`) FROM `gastenboek` where ID='.$id;
$result = mysql_query($q);
while ($row = mysql_fetch_array($result) ) {
$img = $row["foto"];
}

echo base64_decode($img);
?>
[\CODE]

Viewer.php:
[CODE]<?php
include('connection.php');
$q = 'SELECT ID FROM `gastenboek`' ;
$result = mysql_query($q) or die(mysql_error());
echo $result;
$content='';
while($row = mysql_fetch_array( $result )) {
$content.= '<img src='.DOMAIN.'/image.php?id='.$row['ID'].'>';
}

?>


<html>
<body>
<?echo $content;?>
</body>
</html>[CODE]

insert.php
[CODE]<?php
include('connection.php');
$image = basename( $_FILES['imagefile']['name']);
$sizeimage=$_FILES['imagefile']['size'];
if(move_uploaded_file($_FILES['imagefile']['tmp_name'], $image))
{

$handle = fopen($image,'r');
$file_content = fread($handle,$_FILES['imagefile']['size']);
fclose($handle);
$encodedimg = chunk_split(base64_encode($file_content));
$sql = "INSERT INTO gastenboek SET foto='$encodedimg'";
mysql_query($sql);
unlink($image);
$success=1;
}

else
{
$reason.= "<p>There was an error uploading the file, please try again!</p>";
}

?>

<html>
<body>
<? if($success==1) {?>
<p>Upload success.</p>
<a href="javascript:history. go(-1)">Back</a>
<? }
else {echo $reason;}?>

</body>
</html>[/CODE]

en dan nog fotouploaden, maar deze is overbodig hier. De data komt namelijk wel in de database terecht. de foto komt in een Longtext kolom van een standaard mysql database.

Wie kan mij helpen? bedankt!

Gr. Luuk
Gewijzigd op 01/07/2011 14:32:07 door Luuk Schouten
 
PHP hulp

PHP hulp

21/11/2024 20:50:18
 
Noppes Homeland

Noppes Homeland

01/07/2011 18:49:11
Quote Anchor link
Eens kijken:
1. include behoeft geen ()
2. maak geen overbodige variabelen aan
3. gebruik niet $_REQUEST dat is de vergaarbak van meerdere superglobals waarbij je niet meer weet welke
4. om tabel velden in de select clause zet je geen ()
5. backticks horen niet thuis in sql, weg ermee
6. je vergeet in totaliteit te controleren en valideren wat er van buiten jouw script ingetrapt wordt, waardoor het o.a. mogelijk wordt sql injectie te pelgen
7. pas fatsoenlijke foutafhandeling to, or die() is hetzelfde als rouwmuziek draaien op een "blij"-feest
8. gebruik geen shorttags
9. redirect op correcte wijze na het uploaden en link met daarin javascript garandeerd niets

10. plaats php variabelen buiten quotes
11. maak gebruik van standaard sql, INSERT INTO SET is dat in ieder geval niet
12. ook bij uploaden vergeet je de noodzakelijke controles en validaties te doen
13. je moet images niet opslaan in je database, en seer zeker niet op de manier waarop jij het nu doet, sla gewoon de info op in de database welke je nodig hebt met een verwijzing waar het plaatje op de schijf te vinden is.

enz enz enz

oh en als je code een rommeltje is, upgrade het dan eerst naar iets fatsoenlijks alvorens je het post.

Advies: gooi dit in de prullenbak en zoek iets op waarbij bovenstaande in ieder geval in acht genomen is.
 



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.