foto's uit database tonen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Wouter van

Wouter van

14/11/2014 16:05:42
Quote Anchor link
Dag allemaal ik heb een vraag over het downlaoden van foto,s uit de database.



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)
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
<?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";



?>
 
PHP hulp

PHP hulp

23/12/2024 11:40:15
 
- Ariën  -
Beheerder

- Ariën -

14/11/2014 17:25:57
Quote Anchor link
Je kan toch aan de hand van die id toch die foto per stuk ophalen in je HTML.
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<img src='image.php?id=1' />
<img src='image.php?id=2' />
<img src='image.php?id=3' />


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 -
 
Chris PHP

Chris PHP

14/11/2014 17:28:12
Quote Anchor link
Je zegt alle 3 downloaden, dan ga ik ervan uit dat je ALLE foto's uit je database wil halen. Aangezien je maar 3 foto's in je database hebt staan.

Dat kun je doen met deze query
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= mysql_query ("SELECT Foto FROM opdrachten_gegevens");
?>


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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

14/11/2014 23:29:06
Quote Anchor link
In het stukje PHP code dat je laat zien kun je enkel één foto tegelijkertijd aanbieden als download. Je output is immers geen HTML of iets dergelijks maar de pure binaire inhoud van het bestand. En aangezien een JPEG bestandsindeling gemaakt is om één afbeelding te bevatten kunnen dit er geen twee of drie worden.

Het enigste alternatief dat hiervoor mogelijk is de foto's in een zip plaatsen en deze vervolgens als download aan te bieden.
 
Willem vp

Willem vp

15/11/2014 00:48:29
Quote Anchor link
> Het enigste alternatief

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).
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/11/2014 11:35:51
Quote Anchor link
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

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
 
Wouter van

Wouter van

15/11/2014 15:00:20
Quote Anchor link
Iedereen bedankt voor de tips!

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";
}
}
 
- Ariën  -
Beheerder

- Ariën -

15/11/2014 15:09:10
Quote Anchor link
Waarom geef je ALLE rechten? Liever kan ik 755 aanraden ;)

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 -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/11/2014 15:10:36
Quote Anchor link
Ik zou geen directory in de tmp map aanmaken.

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.
 
Wouter van

Wouter van

15/11/2014 15:35:20
Quote Anchor link
Het is gelukt. de bestanden worden nu ge-upload. Ik heb de rechten aangepast naar 755, ik zal later nog de restricties toe moeten voegen aan het script zodat er inderdaad geen ongewenste bestanden worden geplaatst.


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.
 
- Ariën  -
Beheerder

- Ariën -

15/11/2014 15:37:45
Quote Anchor link
Kan prima met readfile() en een paar handige headers.
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
<?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;
}

?>
Gewijzigd op 15/11/2014 15:41:13 door - Ariën -
 
Wouter van

Wouter van

15/11/2014 16:02:52
Quote Anchor link
alleen dit zou genoeg zijn om de foto te tonen ??

Ik heb het geprobeerd maar het werkt niet.


de foto staat in de map uploads IMG_1068.JPG
 
- Ariën  -
Beheerder

- Ariën -

15/11/2014 16:08:03
Quote Anchor link
Dit laat de foto geforceerd downloaden, niet direct tonen.
Anders kan je gewoon een img-tag in HTML gebruiken.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/11/2014 16:12:03
Quote Anchor link
Indien de foto's publiek toegankelijk zijn kunnen de foto's gewoon met de juiste URL gedownload worden.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
http://jouwdomein.nl/uploads/123456790.jpg


of vanuit je html:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<img src="//uploads/123456790.jpg" alt="test" />


Indien de foto's niet publiek toegankelijk zijn komt het voorbeeld van Aar aan de pas:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<img src="//voorbeeld_van_aar.php?file=123456790.jpg" alt="test" />
Gewijzigd op 15/11/2014 16:16:16 door Frank Nietbelangrijk
 
Wouter van

Wouter van

15/11/2014 16:15:34
Quote Anchor link
Oke, ik zal er eens naar kijken.


Bedankt voor jullie uitleg/moeite.

gr
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/11/2014 16:18:22
Quote Anchor link
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.
 
Wouter van

Wouter van

15/11/2014 16:32:34
Quote Anchor link
Is het ook mogelijk om meedere foto's tegelijk te tonen ??

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.
 
- Ariën  -
Beheerder

- Ariën -

15/11/2014 16:43:59
Quote Anchor link
Hoe upload je meerdere bestanden dan? Laat je HTML-code eens zien?
 
Wouter van

Wouter van

15/11/2014 16:46:35
Quote Anchor link
<input type= file name= file multiple>
 
- Ariën  -
Beheerder

- Ariën -

15/11/2014 16:56:11
Quote Anchor link
Dan moet je de array nog iets dieper uitlezen:

http://www.w3bees.com/2013/02/multiple-file-upload-with-php.html
Gewijzigd op 15/11/2014 16:56:23 door - Ariën -
 
Wouter van

Wouter van

17/11/2014 14:39:32
Quote Anchor link
hoe zou ik dat kunnen doen dan ?

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)
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
<?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
            }
        }
    }
}

?>


- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 17/11/2014 15:18:38 door - Ariën -
 

Pagina: 1 2 3 volgende »



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.