foto's als thumbnails toevoegen in de database.
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)
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
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>
<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)
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
$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.";
}
}
?>
$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.
$_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.
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.
Kan dit met php ? In welke richting moet ik mijn oplossing zoeken?
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.
- 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.
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
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
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)
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
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)
1
2
3
4
5
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>
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)
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
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.";
}
}
?>
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.
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)
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
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.";
}
}
?>
$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
UPLOAD_ERR_INI_SIZE
Value: 1; The uploaded file exceeds the upload_max_filesize directive in php.ini.
Zie PHP.net