Plaatjes (BLOB) uit een database halen
De vraag is nu hoe krijg ik die weer terug op het scherm. Moet ik die nog eerst weer converteren of kan ik gewoon: echo("$content") gebruiken (waar $content de naam van het veld is) of moet ik die BLOB eerst weer omzetten naar het oorspronkelijke bestand.
Greetz Anduril
Elwin
Jepz Kikker heeft daar al topics over gehad :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
/* image.php */
if (!empty($id)) {
include("config.php");
//Haal gegevens op uit de db
$sql = "SELECT type,length,content FROM images WHERE id = '$id' LIMIT 0,1";
$result = @mysql_query($sql) or Die(mysql_error());
while ($row = mysql_fetch_array($result)) {
Header("Content-Length: " . $row[length] . "\nContent-Type: " . $row[type]);
print $row[content];
//wanneer de gegevens zijn opgehaald echo alles!
}
mysql_close($db);
}
?>
/* image.php */
if (!empty($id)) {
include("config.php");
//Haal gegevens op uit de db
$sql = "SELECT type,length,content FROM images WHERE id = '$id' LIMIT 0,1";
$result = @mysql_query($sql) or Die(mysql_error());
while ($row = mysql_fetch_array($result)) {
Header("Content-Length: " . $row[length] . "\nContent-Type: " . $row[type]);
print $row[content];
//wanneer de gegevens zijn opgehaald echo alles!
}
mysql_close($db);
}
?>
Mijn suggestie is deze plaatjes in een map op te slaan en de URL van het plaatje (of de bestandsnaam) vervolgens op te slaan in de database. Je leest dan de URL eruit en haalt het plaatje uit een map ipv een database..
En is daar ook al een script voor aanwezig op deze site?
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
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
<?php
if(!empty($_FILES['bestand']['tmp_name']))
{
// Filename + extensie van geuploade bestand
$filename = $_FILES['bestand']['name'];
$size = $_FILES['bestand']['size'];
$extensie = substr($filename, -3);
// Check of extensie voldoet aan eis (in dit geval .jpg)
if (strtoupper($extensie) != JPG && strtoupper($extensie) != GIF)
{
echo("U kan enkel JPG- en GIF-bestanden uploaden.");
}
else
{
// Check file size
if ($size > 151200){
echo("Uw foto mag niet groter zijn dan 150 Kb");
}else
{
// Upload path
$destination = "uploads/";
$length = strlen($filename);
$name = $filename;
// $name = substr($filename, 0, $length - 4);
$tempname = $name;
// Check of file al bestaat, zo ja, filename 'verhogen'
if(file_exists($destination . $tempname))
{
echo("Deze bestandsnaam staat al op de server, verander je bestandsnaam en probeer het opnieuw");
}
move_uploaded_file($filename, $destination . $name);
echo("File ".$destination.$name." uploaded succesfully!<br>");
include("connect.php");
$query="INSERT INTO fotos ";
$query .="VALUES ('', '";
$query .=$filename ."', '";
$query .=$_POST["omschrijving"] ."', '";
$query .=$_SESSION["userx"] ."', '";
$query .=date ("y-m-d") ."';" ;
$result = mysql_query($query, $db) or die ("FOUT:" . mysql_error());
}
}
} ?>
if(!empty($_FILES['bestand']['tmp_name']))
{
// Filename + extensie van geuploade bestand
$filename = $_FILES['bestand']['name'];
$size = $_FILES['bestand']['size'];
$extensie = substr($filename, -3);
// Check of extensie voldoet aan eis (in dit geval .jpg)
if (strtoupper($extensie) != JPG && strtoupper($extensie) != GIF)
{
echo("U kan enkel JPG- en GIF-bestanden uploaden.");
}
else
{
// Check file size
if ($size > 151200){
echo("Uw foto mag niet groter zijn dan 150 Kb");
}else
{
// Upload path
$destination = "uploads/";
$length = strlen($filename);
$name = $filename;
// $name = substr($filename, 0, $length - 4);
$tempname = $name;
// Check of file al bestaat, zo ja, filename 'verhogen'
if(file_exists($destination . $tempname))
{
echo("Deze bestandsnaam staat al op de server, verander je bestandsnaam en probeer het opnieuw");
}
move_uploaded_file($filename, $destination . $name);
echo("File ".$destination.$name." uploaded succesfully!<br>");
include("connect.php");
$query="INSERT INTO fotos ";
$query .="VALUES ('', '";
$query .=$filename ."', '";
$query .=$_POST["omschrijving"] ."', '";
$query .=$_SESSION["userx"] ."', '";
$query .=date ("y-m-d") ."';" ;
$result = mysql_query($query, $db) or die ("FOUT:" . mysql_error());
}
}
} ?>
Maar ik krijg nu steeds de foutmelding:
File uploads/annie2.jpg uploaded succesfully!
FOUT:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Hij zegt dat het bestand succesvol ge "upload is", maar hij staat niet in de betreffende map. En aan de foutmelding na "FOUT:" maak ik op dat er ook iets fout gaat in het schrijven naar de datbase ergens bij een " (aanhalingstaken) in line 1, maar ik kan hier geen fout in ontdekken.
Iemand een idee, want ik ben hier al de hele morgen mee bezig en ik kom er nog niet uit!!
Anduril
File uploads/annie2.jpg uploaded succesfully!
FOUT:You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'filename = 'annie2.jpg', omschrijving = 'voorbereiding', userna
Oplossing MySql prob:
$db = mysql_connect("$dbhost","$user","$pass") or die ("Sorry geen sql connectie:".mysql_error());
mysql_select_db("$dbname", $db) or die ("Database kan niet aangesporken worden:".mysql_error());
$query="insert into fotos (bestand, omschrijving, username, datum)";
$query .="VALUES ('";
$query .=$_FILES['bestand']['name'] ."', '";
$query .=$_POST["omschrijving"] ."', '";
$query .=$_SESSION["userx"] ."', '";
$query .=date("y-m-d") ."');" ;
$result = mysql_query($query) or die ("FOUT:" . mysql_error());
echo("<br>Uitgevoerd: $query ");
Quote:
Eigenlijk is een database niet echt super geschikt voor plaatjes en het wordt er ook niet sneller op..
Mijn suggestie is deze plaatjes in een map op te slaan en de URL van het plaatje (of de bestandsnaam) vervolgens op te slaan in de database. Je leest dan de URL eruit en haalt het plaatje uit een map ipv een database..
Mijn suggestie is deze plaatjes in een map op te slaan en de URL van het plaatje (of de bestandsnaam) vervolgens op te slaan in de database. Je leest dan de URL eruit en haalt het plaatje uit een map ipv een database..
Eigenlijk wou ik deze slimme opmerking ook nog maken.
De afweging voor BLOB voor plaatjes kan je volgens mij het beste laten afhangen van het feit of de plaatjes openbaar te zien mogen zijn. Als dat niet zo is heeft men nog altijd een connectie naar de DB nodig waarvoor een wachtwoord vereist is, dus dan is het niet meer openbaar.
Hetzelfde geld natuurlijk voor 'gewone' bestanden (downloads zoals PDF, DOC, etc).
Elwin