Upload script gaat fout
Ik zat te googelen voor een uploadscript en ik kwam er hier op PHPhulp een tegen (link).
Dit script ben ik nu een beetje aan het ombouwen naar mijn eigen PHP style, maar er gaat iets fout.
Hieronder is het script te zien wat ik nu heb.
Ik krijg de echo's van path, name, type en size niet zien. Ik kom er niet uit.. kan iemand misschien kijken en mij vertellen wat er fout is waardoor de echo's niet worden weergeven en de rest daarna ook niet word uitgevoerd?
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<form name="form1" method="post">
<table>
<tr> <td> Omschrijving </td> <td> <input type="text" name="omschrijving" size="50"></td> </tr>
<tr> <td> Afbeelding </td> <td> <input type="file" name="afbeelding"> </td> </tr>
<tr> <td> </td> <td> <input type="submit" name="upload" value="Uploaden"> </tr>
</table>
</form>
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
if(isset($_POST['upload'])) { // Als er op de submit knop word geklikt bij het inloggen
include("filter.php");
$post_afbeelding = $_POST['afbeelding'];
$chek_afbeelding = mysql_query("SELECT afbeelding FROM `afbeeldingen` WHERE afbeelding = '".$_POST['afbeelding']."'");
$directory = getcwd();
$file_dir = ($directory . "/images/");
if(empty($_POST['afbeelding'])) {
$error[] = 'Er is geen afbeelding geselecteerd';
} elseif(!ereg('[]0-9a-zA-Z_[-]+(.jpg)|(.gif)|(.bmp)|(.png)', $post_afbeelding)) {
$error[] = 'De geselecteerde file is geen .jpg, .gif, .bmp of .png bestand, en dit moet wel zo zijn!';
} elseif(mysql_num_rows($chek_afbeelding) >= 1) {
$error[] = 'Er bestaat al een een afbeelding met deze naam';
}
$fouten = sizeof($error);
if($fouten != 0) { // Er is minstens 1 error
echo '<b>Oeps daar ging iets mis..</b><br/>';
for($i = 0; $i < $fouten; $i++) {
echo ''.$error[$i].' <br/> '; // Alle errors weergeven
}
} else {
// Bepaalt de huidige directory
echo 'gelukt';
foreach($_FILES as $file_name => $file_array) {
$file_name=str_replace("'", "_", $file_array['name']);
$file_name=str_replace(" ", "_", $file_array['name']);
$file_name=stripslashes ($file_name);
$file_name=trim($file_name);
$file_name=strtolower($file_name);
echo "path: " .$file_array['tmp_name'] . "<br>\n";
echo "name: " .$file_name . "<br>\n";
echo "type: " .$file_array['type'] ."<br>\n";
echo "size: " .$file_array['size'] ."<br>\n";
$test = afbeeldingen($file_name);
if ($test !="") {
echo $file_name . " dit is een afbeelding<br>";
if (is_uploaded_file($file_array['tmp_name'])) {
move_uploaded_file($file_array['tmp_name'], "$file_dir/$file_name") or die ("Couldn't copy");
echo "Afbeelding staat op de server<br><br>";
$afbeelding = "images/" . $file_name;
$query = "INSERT INTO afbeelding (nummer, omschrijving, afbeelding) VALUES ('', '$_POST[omschrijving]','$afbeelding')";
echo $afbeelding . " is toegevoegd aan de database met als omschrijving : <br>";
echo $_POST[omschrijving];
}
}
}
}
}
?>
<table>
<tr> <td> Omschrijving </td> <td> <input type="text" name="omschrijving" size="50"></td> </tr>
<tr> <td> Afbeelding </td> <td> <input type="file" name="afbeelding"> </td> </tr>
<tr> <td> </td> <td> <input type="submit" name="upload" value="Uploaden"> </tr>
</table>
</form>
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
if(isset($_POST['upload'])) { // Als er op de submit knop word geklikt bij het inloggen
include("filter.php");
$post_afbeelding = $_POST['afbeelding'];
$chek_afbeelding = mysql_query("SELECT afbeelding FROM `afbeeldingen` WHERE afbeelding = '".$_POST['afbeelding']."'");
$directory = getcwd();
$file_dir = ($directory . "/images/");
if(empty($_POST['afbeelding'])) {
$error[] = 'Er is geen afbeelding geselecteerd';
} elseif(!ereg('[]0-9a-zA-Z_[-]+(.jpg)|(.gif)|(.bmp)|(.png)', $post_afbeelding)) {
$error[] = 'De geselecteerde file is geen .jpg, .gif, .bmp of .png bestand, en dit moet wel zo zijn!';
} elseif(mysql_num_rows($chek_afbeelding) >= 1) {
$error[] = 'Er bestaat al een een afbeelding met deze naam';
}
$fouten = sizeof($error);
if($fouten != 0) { // Er is minstens 1 error
echo '<b>Oeps daar ging iets mis..</b><br/>';
for($i = 0; $i < $fouten; $i++) {
echo ''.$error[$i].' <br/> '; // Alle errors weergeven
}
} else {
// Bepaalt de huidige directory
echo 'gelukt';
foreach($_FILES as $file_name => $file_array) {
$file_name=str_replace("'", "_", $file_array['name']);
$file_name=str_replace(" ", "_", $file_array['name']);
$file_name=stripslashes ($file_name);
$file_name=trim($file_name);
$file_name=strtolower($file_name);
echo "path: " .$file_array['tmp_name'] . "<br>\n";
echo "name: " .$file_name . "<br>\n";
echo "type: " .$file_array['type'] ."<br>\n";
echo "size: " .$file_array['size'] ."<br>\n";
$test = afbeeldingen($file_name);
if ($test !="") {
echo $file_name . " dit is een afbeelding<br>";
if (is_uploaded_file($file_array['tmp_name'])) {
move_uploaded_file($file_array['tmp_name'], "$file_dir/$file_name") or die ("Couldn't copy");
echo "Afbeelding staat op de server<br><br>";
$afbeelding = "images/" . $file_name;
$query = "INSERT INTO afbeelding (nummer, omschrijving, afbeelding) VALUES ('', '$_POST[omschrijving]','$afbeelding')";
echo $afbeelding . " is toegevoegd aan de database met als omschrijving : <br>";
echo $_POST[omschrijving];
}
}
}
}
}
?>
Gewijzigd op 30/01/2013 19:07:00 door Machiel K
Bovenin je script:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// rest
?>
Notice: Undefined index: afbeelding in /home/user/public_html/pagina/upload.php on line 20
Klopt, $_POST['afbeelding'] is leeg, daarom krijg je ook niet de echo gelukt.
Als ik wel een file selecteer:
Notice: Undefined variable: error in /home/user/public_html/pagina/upload.php on line 34
Uit deze errors word ik zelf niet veel wijzer? :\
Gewijzigd op 30/01/2013 19:54:09 door Machiel K
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if(empty($_POST['afbeelding'])) {
$error[] = 'Er is geen afbeelding geselecteerd';
} elseif(!ereg('[]0-9a-zA-Z_[-]+(.jpg)|(.gif)|(.bmp)|(.png)', $post_afbeelding)) {
$error[] = 'De geselecteerde file is geen .jpg, .gif, .bmp of .png bestand, en dit moet wel zo zijn!';
} elseif(mysql_num_rows($chek_afbeelding) >= 1) {
$error[] = 'Er bestaat al een een afbeelding met deze naam';
}
$fouten = sizeof($error);
if($fouten != 0) { // Er is minstens 1 error
echo '<b>Oeps daar ging iets mis..</b><br/>';
for($i = 0; $i < $fouten; $i++) {
echo ''.$error[$i].' <br/> '; // Alle errors weergeven
}
} else {
?>
if(empty($_POST['afbeelding'])) {
$error[] = 'Er is geen afbeelding geselecteerd';
} elseif(!ereg('[]0-9a-zA-Z_[-]+(.jpg)|(.gif)|(.bmp)|(.png)', $post_afbeelding)) {
$error[] = 'De geselecteerde file is geen .jpg, .gif, .bmp of .png bestand, en dit moet wel zo zijn!';
} elseif(mysql_num_rows($chek_afbeelding) >= 1) {
$error[] = 'Er bestaat al een een afbeelding met deze naam';
}
$fouten = sizeof($error);
if($fouten != 0) { // Er is minstens 1 error
echo '<b>Oeps daar ging iets mis..</b><br/>';
for($i = 0; $i < $fouten; $i++) {
echo ''.$error[$i].' <br/> '; // Alle errors weergeven
}
} else {
?>
Vervangen door:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$error = array();
if(empty($_POST['afbeelding'])) {
$error[] = 'Er is geen afbeelding geselecteerd';
} elseif(!ereg('[]0-9a-zA-Z_[-]+(.jpg)|(.gif)|(.bmp)|(.png)', $post_afbeelding)) {
$error[] = 'De geselecteerde file is geen .jpg, .gif, .bmp of .png bestand, en dit moet wel zo zijn!';
} elseif(mysql_num_rows($chek_afbeelding) >= 1) {
$error[] = 'Er bestaat al een een afbeelding met deze naam';
}
if(count($error) != 0) { // Er is minstens 1 error
echo '<b>Oeps daar ging iets mis..</b><br/>';
for($i = 0; $i < count($error); $i++) {
echo ''.$error[$i].' <br/> '; // Alle errors weergeven
}
} else {
?>
$error = array();
if(empty($_POST['afbeelding'])) {
$error[] = 'Er is geen afbeelding geselecteerd';
} elseif(!ereg('[]0-9a-zA-Z_[-]+(.jpg)|(.gif)|(.bmp)|(.png)', $post_afbeelding)) {
$error[] = 'De geselecteerde file is geen .jpg, .gif, .bmp of .png bestand, en dit moet wel zo zijn!';
} elseif(mysql_num_rows($chek_afbeelding) >= 1) {
$error[] = 'Er bestaat al een een afbeelding met deze naam';
}
if(count($error) != 0) { // Er is minstens 1 error
echo '<b>Oeps daar ging iets mis..</b><br/>';
for($i = 0; $i < count($error); $i++) {
echo ''.$error[$i].' <br/> '; // Alle errors weergeven
}
} else {
?>
Alleen mijn probleem is nog niet opgelost, ik krijg de echo's van path, name, type en size nog steeds niet te zien.
De fout zit dan denk ik in dit deel:
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
foreach($_FILES as $file_name => $file_array) {
$file_name=str_replace("'", "_", $file_array['name']);
$file_name=str_replace(" ", "_", $file_array['name']);
$file_name=stripslashes ($file_name);
$file_name=trim($file_name);
$file_name=strtolower($file_name);
echo "path: " .$file_array['tmp_name'] . "<br>\n";
echo "name: " .$file_name . "<br>\n";
echo "type: " .$file_array['type'] ."<br>\n";
echo "size: " .$file_array['size'] ."<br>\n";
}
?>
foreach($_FILES as $file_name => $file_array) {
$file_name=str_replace("'", "_", $file_array['name']);
$file_name=str_replace(" ", "_", $file_array['name']);
$file_name=stripslashes ($file_name);
$file_name=trim($file_name);
$file_name=strtolower($file_name);
echo "path: " .$file_array['tmp_name'] . "<br>\n";
echo "name: " .$file_name . "<br>\n";
echo "type: " .$file_array['type'] ."<br>\n";
echo "size: " .$file_array['size'] ."<br>\n";
}
?>
Iemand die hier een fout in ziet? Als ik het script letterlijk van hier overneem, dan werkt 'ie wel en ik heb het daar letterlijk van gekopieerd, er is niks aan veranderd.
Gewijzigd op 30/01/2013 19:14:34 door Machiel K
echo 'gelukt';
Toevoeging: Vandaar dat ik al zei het moet aan die foreach liggen.
Gewijzigd op 30/01/2013 19:22:22 door Machiel K
Zet op regel 45 eens: print_r($_FILES);
Machiel K op 30/01/2013 18:05:40:
ereg is toch verouderd?! Kijk naar preg_match.
print_r($_FILES); geeft: Array ( )
Dan zijn er geen files om te uploaden.
Ik zie het probleem al.
Je mist enctype in <form name="form1" method="post">
Zie: http://www.handleidinghtml.nl/html/elementen/form.html#ENCTYPE
Gewijzigd op 30/01/2013 20:06:42 door - SanThe -
Code (php)
1
2
3
2
3
<?php
} elseif(!preg_match('/\.(jpg|gif|bmp|png)(?:[\?\#].*)?$/i', $post_afbeelding)) { }
?>
} elseif(!preg_match('/\.(jpg|gif|bmp|png)(?:[\?\#].*)?$/i', $post_afbeelding)) { }
?>
Toevoeging op 30/01/2013 20:09:48:
Aha, top! Ik heb er nu dus van gemaakt.
Ik loop nu alleen tegen het volgende probleem aan: als ik een (geldige, .png, .gif, ect.) afbeelding upload geeft hij de error 'Er is geen afbeelding geselecteerd' terwijl ik dat wel heb gedaan? .. :|
Gewijzigd op 30/01/2013 20:10:11 door Machiel K
De uploads zitten niet in $_POST maar in $_FILES.
vervang door
blijf ik alleen de error 'Er is geen afbeelding geselecteerd' krijgen, ook als ik wel een file selecteer.
- SanThe - op 30/01/2013 20:14:21:
De uploads zitten niet in $_POST maar in $_FILES.
Gewijzigd op 30/01/2013 20:29:06 door - SanThe -
Te snel overgetypt.. hij slaat nu de error 'Er is geen afbeelding geselecteerd' over en gaat meteen door naar 'De geselecteerde file is geen .jpg, .gif, .bmp of .png bestand, en dit moet wel zo zijn! '..
De preg_match() is volgens mij heel anders dan de originele ereg().
Daarnaast moet je ook nog even controleren of de afbeelding een hoogte en een breedte heeft middels het volgende stukje code:
Gr,
Niels
Niels Kieviet op 30/01/2013 20:50:10:
Daar heb ik dus
Code (php)
1
2
3
2
3
<?php
if(!in_array(strtolower(strrchr($file, '.')), array('png', 'gif'))) { error }
?>
if(!in_array(strtolower(strrchr($file, '.')), array('png', 'gif'))) { error }
?>
van gemaakt, maar dit werkt niet? Nieuwe manier voor me.. zou je het kunnen uitleggen / kunnen vertellen of ik het goed heb 'veranderd'?
Gewijzigd op 30/01/2013 21:34:56 door Machiel K
Daarnaast, var_dump(strtolower(strrchr($file, '.')) eens? Wat komt daaruit? Oftewel wat moet er nog aangepast worden in de array ;-)
Ik krijg bij elke file die ik invoer 'De geselecteerde file is geen .png of .gif bestand'. Met de 'error' bedoel ik $error[] 'De geselecteerde file is geen .png of .gif bestand';.