foto's uit database tonen
Ik upload de foto's (3 foto's) naar de database in een blob exentie.
Als ik de foto's download dan krijg ik netjes 1 foto te zien. Maar ik zou graag willen dat ze alle drie worden getoond.
is er iemand die weet hoe dit kan ?. Ik heb zelf al wat rondgespeurd op internet maar kon niet echt iets vinden.
dit script gebruik ik om te downlaoden.
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
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
<?php
$test = $_GET['id'];
mysql_connect("xxxx");
mysql_select_db("xxxx");
$query = mysql_query ("SELECT Foto FROM opdrachten_gegevens WHERE Opdracht_ID = '$test'");
while ($row = mysql_fetch_assoc($query))
{
$imageData = $row ["Foto"];
}
header("content-type: image/jpeg");
echo "$imageData";
?>
$test = $_GET['id'];
mysql_connect("xxxx");
mysql_select_db("xxxx");
$query = mysql_query ("SELECT Foto FROM opdrachten_gegevens WHERE Opdracht_ID = '$test'");
while ($row = mysql_fetch_assoc($query))
{
$imageData = $row ["Foto"];
}
header("content-type: image/jpeg");
echo "$imageData";
?>
Dan zou je voor de zekerheid ook gewoon die while() eruit kunnen halen, want met een mysql_fetch_assoc() alleen heb je het eerste item van je query.
Let wel op SQL-injection. Je bent nu behoorlijk vatbaar voor hacking.
Dus pas even mysql_real_escape_string() toe op je $_GET['id'].
tevens wordt het gebruik van de MySQL-functies afgeraden. Gebruik liever MySQLi of PDO.
Gewijzigd op 14/11/2014 17:27:46 door - Ariën -
Dat kun je doen met deze query
Toevoeging op 14/11/2014 17:32:42:
Let wel dat wanneer je foto's in je database gaat zetten, en je database groeit je queries veel resources zullen gaan gebruiken van de server.
Mijn advies zou zijn, zet de afbeeldingen in een folder op je webserver, en sla de bestandsnamen met extentie op als text in je database. Zijn je queries niet zo zwaar bij grote databases.
Het enigste alternatief dat hiervoor mogelijk is de foto's in een zip plaatsen en deze vervolgens als download aan te bieden.
Nou, ik kán nog een ander alternatief bedenken... ;-)
Je zou met behulp van bijvoorbeeld de GD-libraries een nieuwe image kunnen maken (imagecreatetruecolor) met een afmeting die zo groot is dat alle drie de plaatjes erin passen. Vervolgens kopieer je de plaatjes naar een eigen plek in de nieuwe image (imagecopy) en stuur je het nieuwe plaatje naar de browser (imagejpeg of imagepng).
Toevoeging op 15/11/2014 11:36:16:
Klopt willem maar dan verandert het onderwerp naar bewerken van bestanden in plaats van het downloaden. Daarbij zitten daar wat haken en ogen aan het bewerken van foto's met de GD lib
Ik heb er toch voor gekozen om de foto's op de webserver te uploaden om zo de sql server minder zwaar te belasten.
ik heb nu een upload scriptje gemaakt die de foto's op de webserver zet.
ik heb op de webserver een map aangemaakt waar de foto's in gezet moeten worden deze map hangt onder de tmp map.
Het lijkt allemaal goed te gaan maar als ik vervolgens die map open om te kijken of de foto erin staat is de map leeg.
Ook heb ik de map rechten 777 gegeven. is er iemand die nog een goede tip heeft ?
dit is het script die ik gebruik.
$name = mysql_real_escape_string ($_FILES["file"]["name"]);
$type = mysql_real_escape_string ($_FILES["file"]["type"]);
$size = mysql_real_escape_string ($_FILES["file"]["size"]);
$tmp_name = mysql_real_escape_string ($_FILES["file"]["tmp_name"]);
if (isset($name)){
if(!empty($name)){
$location = 'uploads';
if (move_uploaded_file($tmp_name,$location.$name)){
echo"Uploaded";
}
}else{
echo"selecteer een bestand";
}
}
Controleer ook op mimetype+extentie. Nu kan iedereen die kan uploaden ook .php bestanden uploaden met mogelijke kwade gevolgen van dien!
Gewijzigd op 15/11/2014 15:09:58 door - Ariën -
Indien de bestanden publiekelijk gedownload mogen worden zou ik gewoon een map 'uploads' maken op de webroot. (daar waar je website zichtbaar is)
Indien de bestanden geheim (kunnen) zijn en alleen via PHP gedownload kunnen en mogen worden dan zou ik een map aanmaken net ONDER de webroot zodat ze niet zichtbaar zijn van buitenaf.
Pas op met 777. Iedereen mag dan schrijven in de map. 755 is volgens mij voldoende.
Let ook op dat er geen PHP bestanden en/of .htaccess bestanden geplaatst kunnen worden.
Ik adviseer vervolgens de bestanden onder een timpestamp+randomnummer op te slaan maar wel met de geldige extensie.
De bestandsnaam, omschrijving en al wat je wil zou ik dan opslaan in de database.
Ik vraag me alleen af hoe ik dan deze foto kan downloaden. dat word dan gewoon een soort link naar de locatie van de foto denk ik.
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
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>
Gewijzigd op 15/11/2014 15:41:13 door - Ariën -
Ik heb het geprobeerd maar het werkt niet.
de foto staat in de map uploads IMG_1068.JPG
Anders kan je gewoon een img-tag in HTML gebruiken.
of vanuit je html:
Indien de foto's niet publiek toegankelijk zijn komt het voorbeeld van Aar aan de pas:
Gewijzigd op 15/11/2014 16:16:16 door Frank Nietbelangrijk
Bedankt voor jullie uitleg/moeite.
gr
Het voorbeeld van Aar mag geen andere output genereren dan de inhoud van het bestand. Wel kun je dit voorbeeld uitbreiden met een test of de gebruiker die het bestand opvraagt wel is ingelogd.
Ik heb nu een linkje http://jouwdomein.nl/uploads/123456790.jpg dan laat hij alleen die foto zien zeg maar.
als ik meerdere foto's upload zet hij ook maar 1 in de map uploads.
Hoe upload je meerdere bestanden dan? Laat je HTML-code eens zien?
<input type= file name= file multiple>
http://www.w3bees.com/2013/02/multiple-file-upload-with-php.html
Gewijzigd op 15/11/2014 16:56:23 door - Ariën -
ik gebruik nu dit onderstaande script om foto's te uploaden, Alleen het probleem is dat hij niks upload en hij geeft ook geen foutmelding. iemand een idee ?
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
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
<?php
$name = ($_FILES["files"]["name"]);
$type = ($_FILES["files"]["type"]);
$size = ($_FILES["files"]["size"]);
$tmp_name = ($_FILES["files"]["tmp_name"]);
$valid_formats = array("jpg", "png", "gif", "zip", "bmp");
$max_file_size = 1024*100; //100 kb
$path = 'Uploads/'; // Upload directory
$count = 0;
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
// Loop $_FILES to exeicute all files
foreach ($_FILES['files']['name'] as $f => $name) {
if ($_FILES['files']['error'][$f] == 4) {
continue; // Skip file if any error found
}
if ($_FILES['files']['error'][$f] == 0) {
if ($_FILES['files']['size'][$f] > $max_file_size) {
$message[] = "$name is too large!.";
continue; // Skip large files
}
elseif( ! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats) ){
$message[] = "$name is not a valid format";
continue; // Skip invalid file formats
}
else{ // No error found! Move uploaded files
if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path.$name))
// if (move_uploaded_file($tmp_name,$path.$name))
$count++; // Number of successfully uploaded file
}
}
}
}
?>
$name = ($_FILES["files"]["name"]);
$type = ($_FILES["files"]["type"]);
$size = ($_FILES["files"]["size"]);
$tmp_name = ($_FILES["files"]["tmp_name"]);
$valid_formats = array("jpg", "png", "gif", "zip", "bmp");
$max_file_size = 1024*100; //100 kb
$path = 'Uploads/'; // Upload directory
$count = 0;
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
// Loop $_FILES to exeicute all files
foreach ($_FILES['files']['name'] as $f => $name) {
if ($_FILES['files']['error'][$f] == 4) {
continue; // Skip file if any error found
}
if ($_FILES['files']['error'][$f] == 0) {
if ($_FILES['files']['size'][$f] > $max_file_size) {
$message[] = "$name is too large!.";
continue; // Skip large files
}
elseif( ! in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats) ){
$message[] = "$name is not a valid format";
continue; // Skip invalid file formats
}
else{ // No error found! Move uploaded files
if(move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path.$name))
// if (move_uploaded_file($tmp_name,$path.$name))
$count++; // Number of successfully uploaded file
}
}
}
}
?>
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 17/11/2014 15:18:38 door - Ariën -