foto's als thumbnails toevoegen in de database.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tony Tony

Tony Tony

17/04/2015 16:38:06
Quote Anchor link
Wat ik wil:
Reeds een bestaande database "vangst", (zie topic van 12/3/2015)waarin ik de gegevens bijhoud van elke keer als ik en mijn zoon gaan vissen.(Dit was een eindwerk voor het volwasseneonderwijs,deze module is reeds afgelopen, maar php boeit me zodanig dat ik steeds meer mogelijkheden wil ontdekken.)
Elke record in mijn database is een gevangen vis.
Indien ik geen vissen gevangen heb,voeg ik ook een record toe, maar met vangst = 0.
Ik wil bij de records waar ik vis gevangen heb een kolom waar een thumbnail komt te staan van de gevangen vis. Dit is geen verplicht veld, indien ik niks van, bestaat er geen foto.

Wat ik heb:
een pagina waar ik de gegevens verzamel, bestaat momenteel uit 2 form's :
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
<form class="zoeken2" align="left" method="post" action="vis_sessie_toevoegen_sql.php">
<table >
 <tr>
 <th> <input type="hidden" name="datum" value="<?php echo($_POST["datum"]);?>"><br></th>
 </tr>
  <tr>
<th><input type="hidden" name="begin_uur"  value="<?php echo($_POST["begin_uur"]);?>"><br></th>
 </tr>
<tr>
<th><input type="hidden" name="eind_uur"  value="<?php echo($_POST["eind_uur"]);?>"><br></th>
 </tr>
<tr>
<th><input type="hidden" name="type_hengel"  value="<?php echo($_POST["type_hengel"]);?>"><br></th>
 </tr>
<tr>
<th><input type="hidden" name="water"  value="<?php echo($_POST["water"]);?>"><br></th>
 </tr>
<tr>
<th><input type="hidden" name="stek"  value="<?php echo($_POST["stek"]);?>"><br></th>
 </tr>
<tr>
<th><input type="hidden" name="vangst"  value="<?php echo($_POST["vangst"]);?>"><th></th><br></th>
 </tr>
 <tr>
<th><input type="hidden" name="aas"  value="<?php echo($_POST["aas"]);?>"><br></th>
 </tr>
 

<tr>
<th>Tijdstip vangst</th> <th><input type="Time" name="tijdstip_vangst" size="10" required><br></th>
 </tr>
 <tr>
<th>Soort</th> <th><input type="Text" name="soort" size="20" required><br></th>
 </tr>
<tr>
<th>Gewicht in kg</th> <th><input type="Text" name="gewicht" size="5" required><br></th>
 </tr>
 <tr>
<th>Lengte in cm</th> <th><input type="Text" name="lengte" size="5" required><br></th>
 </tr>

 </table>
<hr>
<input type="submit" value="Invoegen">
<input type="Reset" value="Leegmaken">
</form>

 <form class="zoeken2" action="upload.php" method="post" enctype="multipart/form-data">
    Voeg een foto toe:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>


Krijg ik deze 2 in 1 form?

Mijn verwerkingscode "upload.php" bestand/
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
<?php
$target_dir
= "toegevoegde_foto";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    }
else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}

// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    }
else {
        echo "Sorry, there was an error uploading your file.";
    }
}

?>


De foto's wil ik bewaren in de map "toegevoegde_foto".

Als ik op de knop upload image druk , krijg ik deze foutmelding (ik doe dit met een jpg bestand):

Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in C:\Users\Tony\Desktop\USBWebserver v8.5 - kopie\8.5\root\Eigen website120\publiek\Mijn_gezin\Rens\upload.php on line 8
File is not an image.Sorry, only JPG, JPEG, PNG & GIF files are allowed.Sorry, your file was not uploaded.
 
PHP hulp

PHP hulp

28/11/2024 16:11:56
 
- Ariën  -
Beheerder

- Ariën -

17/04/2015 16:39:53
Quote Anchor link
$_FILES["fileToUpload"]["tmp_name"] is leeg, en ik vermoed dat je de dimensies pas kan achterhalen als het bestand daadwerkelijk geupload is naar de juiste locatie.
 
Tony Tony

Tony Tony

17/04/2015 16:40:12
Quote Anchor link
vergeten vermelden, ik heb deze link gebruikt als leidraad
http://www.w3schools.com/php/php_file_upload.asp
 
- Ariën  -
Beheerder

- Ariën -

17/04/2015 17:20:08
Quote Anchor link
Je, maar een afbeelding in de /tmp-map is niet zichtbaar voor iedereen. Dus ik denk dat hij daarvan niet de dimensies op kan halen.
 
Tony Tony

Tony Tony

17/04/2015 17:28:37
Quote Anchor link
Kan dit met php ? In welke richting moet ik mijn oplossing zoeken?
 
- Ariën  -
Beheerder

- Ariën -

17/04/2015 17:31:03
Quote Anchor link
De tmp-map is tijdelijk, en staat buiten de webroot. Dus verhuis die controle/functie eens naar de plek waar je bestand geupload is op de juiste plek.
 
Thomas van den Heuvel

Thomas van den Heuvel

17/04/2015 19:24:51
Quote Anchor link
- Aar - op 17/04/2015 17:20:08:
Je, maar een afbeelding in de /tmp-map is niet zichtbaar voor iedereen. Dus ik denk dat hij daarvan niet de dimensies op kan halen.

Voor het script wel, maar het is enkel dat - een naam. Ik denk dat je het pad naar de tmp-map nog moet toevoegen. Je draait immers het script zelf niet in je tmp-map... :)
EDIT: never mind, tmp_name zou alle informatie moeten bevatten - ik zou zeggen, loop de foutmeldingen na, aan welke conditie(s) wordt niet voldaan die zorgen voor de melding(en)?

Het bestand bestaat gedurende de "lifetime" van het script, daarna zal deze opgeruimd worden. Daarom move je ook meteen het bestand in hetzelfde script naar zijn uiteindelijke locatie.

Maar dit is een prima (en bij uitstek de) plek om een bestand te inspecteren - als deze niet voldoet kun je deze laten staan, na afloop van het script wordt deze (als het goed is) automatisch opgeruimd.
Gewijzigd op 17/04/2015 19:34:34 door Thomas van den Heuvel
 
Bert Lasker

Bert Lasker

18/04/2015 08:50:44
Quote Anchor link
Hoi Tony, ik gebruik "bijna" exact dezelfde code om mijn afbeeldingen in een directory te zetten. Ik kan maar twee dingen verzinnen als ik naar je code kijk, namelijk in regel 2, de target directory. -- $target_dir = "toegevoegde_foto"; -- Als je daar eens $target_dir = "toegevoegde_foto/"; -- Dus een slash toevoegen. Ook moet zorgen dat je target directory de juiste autorisatie heeft voor PHP om erin te schrijven, ik zet de autorisatie naar 777, anders mag PHP er niet in schrijven. Andere dingen kan ik niet verzinnen, je code is op een paar kleine dingen na gelijk aan die van mij.

Je kunt ook even kijken in je PHP error log om te kijken wat er mis gaat.

Succes, Bert
Gewijzigd op 18/04/2015 08:53:29 door Bert Lasker
 
Thomas van den Heuvel

Thomas van den Heuvel

18/04/2015 14:41:14
Quote Anchor link
Allereerst, zet het volgende bovenaan je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>

Ik zou gewoon bij het begin beginnen. Je eerste foutmelding is:
Quote:
Warning: getimagesize() [function.getimagesize]: Filename cannot be empty

Dit is een interessant gegeven. $_FILES['fileToUpload']['tmp_name'] is dus blijkbaar leeg, oftewel, er is waarschijnlijk een probleem met het uploaden.

Heb je gekeken naar de upload error status code in $_FILES['fileToUpload']['error']? Deze moet gelijk zijn aan 0. Dit is eigenlijk het eerste wat je zou moeten controleren bij de verwerking van een upload denk ik, maar dat terzijde.

In mijn Usbwebserver (versie 8.6, waar ik de bovenstaande code mee heb gecontroleerd) staat er geen standaard upload_tmp_directory ingesteld. Het gevolg hiervan is dat er teruggevallen wordt op een default, in mijn geval C:\Users\MijnUserName\AppData\Local\Temp\. Mogelijk heb jij daar geen lees- of schrijfrechten of bestaat deze directory niet?

Dump anders eens het hele $_FILES array in je verwerk-stap wanneer je een geldige afbeelding upload:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
...
if (isset($_POST["submit"])) {
    echo '<pre>'.print_r($_FILES, true).'</pre>';
    ...
}

?>

Wat zie je op je scherm verschijnen?
En met de eerdergenoemde toevoeging van ini_set + error_reporting bovenaan je script, mogelijk zie je nu notices/warnings?

EDIT: en wat @Bert zegt - errorlogs zijn je vriend. Ook zijn verbetering met een slash klopt. In zijn algemeenheid: als je dit soort dingen wilt gaan debuggen: dump gewoon veel en vaak informatie naar je scherm, deze vertelt je meer over de "toestand" van je applicatie / variabelen die je meestal in de richting van het probleem (en daarmee de oplossing) stuurt.
Gewijzigd op 18/04/2015 16:05:02 door Thomas van den Heuvel
 
Tony Tony

Tony Tony

19/04/2015 22:57:37
Quote Anchor link
Ik heb even het uploaden van foto's losgekoppeld van mijn site om zo mijn vorig werk te vrijwaren van prutsen.
Ik heb in het php.ini bestand dit aangevuld :;upload_tmp_dir =C:\Users\Tony\Desktop\USBWebserver v8.5 - kopie\8.5\root\Eigen website120\publiek\Mijn_gezin\Rens\toegevoegde_foto

ik post even de aangepaste code: (heb de raad van thomas toegepast, en de schuine streep van Bert werd aangepast)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<form class="zoeken2" action="upload.php" method="post" enctype="multipart/form-data">
    Voeg een foto toe:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>


het verwerk bestand
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
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>

<!-- dit aanpassen in het php.ini bestand
; http://php.net/upload-tmp-dir
;upload_tmp_dir =C:\Users\Tony\Desktop\USBWebserver v8.5 - kopie\8.5\root\Eigen website120\publiek\Mijn_gezin\Rens\toegevoegde_foto
-->
<?php
if (isset($_POST["submit"])) {
echo '<pre>'.print_r($_FILES, true).'</pre>';}
$target_dir = "toegevoegde_foto/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    }
else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}

// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    }
else {
        echo "Sorry, there was an error uploading your file.";
    }
}


?>


en deze fout krijg ik :
Array
(
[fileToUpload] => Array
(
[name] => IMG_3745.jpg
[type] =>
[tmp_name] =>
[error] => 1
=> 0
)

)

Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in C:\Users\Tony\Desktop\USBWebserver v8.5 - kopie\8.5\root\upload zelf foto\upload.php on line 18
File is not an image.Sorry, your file was not uploaded.

Toevoeging op 19/04/2015 23:01:22:

ik weet er niet zo veel van maar loopt het in de richting dat de tmp_name leeg is en dat dit de naam word van het bestand dat geupload word. dus met andere woorden dat hij niet weet onder welke naam hij het bestand moet wegschrijven.
 
Bert Lasker

Bert Lasker

20/04/2015 13:03:02
Quote Anchor link
Hierbeneden de code van mij die zeker weten werkt. Ik heb alleen in het begin wat aanpassingen gemaakt omdat ik de directory aanpas naar de userID. Maar dat is niet belangrijk.

Tevens laat ik PHP checken of de directory bestaat en zo niet dan wordt de DIR aangemaakt met de juist autorisatie.

Ik denk nog steeds dat je een autorisatie probleem hebt. Ik zou voorstellen dat je je directory verwijderd en de code de directory laat aanmaken.

Dus voor jou :

$filename = "toegevoegde_foto/";

if (!file_exists($filename)) {
mkdir($filename, 0777);
}

Je laat dan PHP de DIR aanmaken en dan ben je zeker dat de autorisatie goed staat.

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
<?php

$dirname
= $_SESSION['id'];
$filename = "upload/" . $dirname . "/";

if (!file_exists($filename)) {
    mkdir("upload/" . $dirname, 0777);
}


$target_file = $filename . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        $uploadOk = 1;
    }
else {
        echo "De file is geen afbeelding.";
        $uploadOk = 0;
    }
}

// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, deze file bestaat al.";
    $uploadOk = 0;
}

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, deze file is te groot.";
    $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, alleen JPG, JPEG, PNG & GIF files zijn toegestaan.";
    $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, uw file is niet geladen.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        header( "Location: invoer-aanbieding.php" );
    }
else {
        echo "Sorry, er was een fout in het uploaden van uw file.";
    }
}



?>
Gewijzigd op 20/04/2015 13:08:25 door Bert Lasker
 
Thomas van den Heuvel

Thomas van den Heuvel

20/04/2015 14:01:10
Quote Anchor link
Error code 1:
UPLOAD_ERR_INI_SIZE
Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.

Zie PHP.net
 



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.