plaatje uit mysql halen
Hieronder de totale code van mijn script. (upload en download). Misschien heeft iemand een goede suggestie.
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
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
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
<?php
ob_start();
echo "<html><head><title></title></head><body>";
if ($action=="") {
echo "
<form enctype='multipart/form-data' method='POST' action='$_SERVER[PHP_SELF]'>
<input type='hidden' name='MAX_FILE_SIZE' value='16777216'>
<input type='hidden' name='action' value='insert'>
<input type='file' name='bindata' value=''>
<input type='submit'>
</form>";}
if ($action=="insert") {
$fname = $_FILES[bindata][name];
$ftype = $_FILES[bindata][type];
$fsize = $_FILES[bindata][size];
$temp = $_FILES[bindata][tmp_name];
echo "$fname <BR>";
echo "$ftype <BR>";
echo "$fsize <BR>";
echo "$temp <BR>";
$file = file_get_contents("$temp");
require "connect.php3";
$update=mysql_query ($query = "INSERT INTO test SET bin='$file', fname='$fname', fsize='$fsize', ftype='$ftype'") or die ('Error: ' . mysql_error());
require "connect.php3";
/* Performing SQL query */
$query = "SELECT * FROM test WHERE id='1'";
$result = mysql_query($query) or die ('Error: ' . mysql_error());
echo "";
/* Printing results in HTML */
if ($result) {
while ($r = mysql_fetch_array($result)) {
$id = $r["id"];
$bin = $r["bin"];
$fname = $r["fname"];
$fsize = $r["fsize"];
$ftype = $r["ftype"];
header ("Content-type: $ftype");
echo "<img src='$bin'>";
}
echo "";
} else {
echo "Niets gevonden.";
}
echo "";
/* Free resultset */
mysql_free_result($result);
}
ob_end_flush();
ob_end_clean();
?>
ob_start();
echo "<html><head><title></title></head><body>";
if ($action=="") {
echo "
<form enctype='multipart/form-data' method='POST' action='$_SERVER[PHP_SELF]'>
<input type='hidden' name='MAX_FILE_SIZE' value='16777216'>
<input type='hidden' name='action' value='insert'>
<input type='file' name='bindata' value=''>
<input type='submit'>
</form>";}
if ($action=="insert") {
$fname = $_FILES[bindata][name];
$ftype = $_FILES[bindata][type];
$fsize = $_FILES[bindata][size];
$temp = $_FILES[bindata][tmp_name];
echo "$fname <BR>";
echo "$ftype <BR>";
echo "$fsize <BR>";
echo "$temp <BR>";
$file = file_get_contents("$temp");
require "connect.php3";
$update=mysql_query ($query = "INSERT INTO test SET bin='$file', fname='$fname', fsize='$fsize', ftype='$ftype'") or die ('Error: ' . mysql_error());
require "connect.php3";
/* Performing SQL query */
$query = "SELECT * FROM test WHERE id='1'";
$result = mysql_query($query) or die ('Error: ' . mysql_error());
echo "";
/* Printing results in HTML */
if ($result) {
while ($r = mysql_fetch_array($result)) {
$id = $r["id"];
$bin = $r["bin"];
$fname = $r["fname"];
$fsize = $r["fsize"];
$ftype = $r["ftype"];
header ("Content-type: $ftype");
echo "<img src='$bin'>";
}
echo "";
} else {
echo "Niets gevonden.";
}
echo "";
/* Free resultset */
mysql_free_result($result);
}
ob_end_flush();
ob_end_clean();
?>
echo '<img src="'.$bin.'" alt="" />'; is valid..
Daarnaast (upload), een MAX FILE SIZE aangeven in een input type is makkelijk te omzeilen... gewoon netjes checken met PHP is beter...
Het probleem lijkt te zijn dat de waarde van $bin hetzelfde is als wat je ziet als je het plaatje in wordpad zou openen. Ik krijg het niet voor elkaar om het als plaatje in de browser te laten zien, zonder het eerst in een bestand weg te schrijven.
Ik had de max file size er alleen in staan voor de normale afhandeling, ik zet de instelling in php.ini ook op die waarde. :)
Maar waarom zou je een plaatje opslaan in je database. Hoewel het mogelijk is, is een database daar eigenlijk niet voor bedoeld. Plaats de afbeeldingen gewoon in een bepaalde map en zet alleen de link naar (of de naam van) de afbeelding in je database...
En begin je scripts altijd met de volgende regels:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL); // Toon alle fouten en waarschuwingen
// rest van je script
?>
ini_set('display_errors', 1);
error_reporting(E_ALL); // Toon alle fouten en waarschuwingen
// rest van je script
?>
En waarom dat geen html is? Kijk maar eens in de broncode... Variabelen zet je niet tussen quotes en al helemaal niet tussen enkele quotes, dan wordt de naam van de variabele gewoon als een stuk tekst weergegeven. Oplossing: Nooit meer variabelen tussen quotes zetten.
Bij gebruik van variabelen en html heb ik de variabelen altijd tussen enkele quotes staan. Dit heeft mij tot nu toe nooit problemen opgeleverd. Ik vind het eenvoudiger dan steeds met escape characters de dubbele quotes te omzeilen. En ik had gelezen dat sommige browsers het niet leuk vinden als je geen quotes gebruikt. Vandaar dus.
Maar wat is dan wel de juiste manier om dat plaatje weer te geven vanuit mysql?
Quote:
Bij gebruik van variabelen en html heb ik de variabelen altijd tussen enkele quotes staan. Dit heeft mij tot nu toe nooit problemen opgeleverd. Ik vind het eenvoudiger dan steeds met escape characters de dubbele quotes te omzeilen. En ik had gelezen dat sommige browsers het niet leuk vinden als je geen quotes gebruikt. Vandaar dus.
Yeah, right. Dat zal dan iets nieuws zijn. Probeer het volgende maar eens:
Code (php)
Resultaten:
dit is een stukje tekst
dit is een stukje $var
Dit heeft helemaal niets met de browser te maken, maar alles met de server. Ik snap dus niet wat jouw probleem met de quotes is.
En plaatjes in de database zetten, maakt de database zo snel als dikke stront door een trechtertje! Geen aanrader dus. Daarnaast moet je altijd zorgen voor de juiste headers, anders snapt de browser niet dat het een plaatje betreft.
Maar je punt is erg duidelijk :)
Wim:
- Lees ook even wat over superglobals
- connect3.php hoef je maar 1 keer te includen.
- Variabelen horen niet tussen quotes, dat het werkt is alleen lastig, want als het dan een keer niet werkt, kan jij niet vinden wat er mis is.
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
En ik ben er nog steeds niet uit hoe ik dat verrekte plaatje kan weergeven. :P
Vaak werkt het inderdaad wel, maar het is gewoon niet netjes, en brengt je vroeger of later gegarandeerd de problemen.