Upload script gaat fout

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Machiel K

Machiel K

30/01/2013 18:05:40
Quote Anchor link
Hallo,

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)
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
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];
                }
            }                    
        }
    
    }
  
}

  
?>
Gewijzigd op 30/01/2013 19:07:00 door Machiel K
 
PHP hulp

PHP hulp

24/11/2024 11:15:53
 
- SanThe -

- SanThe -

30/01/2013 18:36:14
Quote Anchor link
Zet je errors eens aan.

Bovenin je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest
?>
 
Machiel K

Machiel K

30/01/2013 18:47:40
Quote Anchor link
Als ik geen file selecteer:
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
 
- SanThe -

- SanThe -

30/01/2013 18:57:32
Quote Anchor link
Regel 26 t/m 40:
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
<?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 {
?>


Vervangen door:
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
<?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 {
?>
 
Machiel K

Machiel K

30/01/2013 19:14:04
Quote Anchor link
Dankjewel, hiermee is iniedergeval de error '' weg.

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)
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
    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
 
- SanThe -

- SanThe -

30/01/2013 19:15:38
Quote Anchor link
Krijg je dit te zien?

echo 'gelukt';
 
Machiel K

Machiel K

30/01/2013 19:21:56
Quote Anchor link
Ja, dat wel.

Toevoeging: Vandaar dat ik al zei het moet aan die foreach liggen.
Gewijzigd op 30/01/2013 19:22:22 door Machiel K
 
- SanThe -

- SanThe -

30/01/2013 19:25:40
Quote Anchor link
Zet op regel 45 eens: print_r($_FILES);
 
Obelix Idefix

Obelix Idefix

30/01/2013 19:29:01
Quote Anchor link
Machiel K op 30/01/2013 18:05:40:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<?php
    } elseif(!ereg('[]0-9a-zA-Z_[-]+(.jpg)|(.gif)|(.bmp)|(.png)', ?>

ereg is toch verouderd?! Kijk naar preg_match.
 
Machiel K

Machiel K

30/01/2013 19:56:00
Quote Anchor link
print_r($_FILES); geeft: Array ( )
 
- SanThe -

- SanThe -

30/01/2013 19:59:16
Quote Anchor link
Simpel: Dan is ie leeg.
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 -
 
Machiel K

Machiel K

30/01/2013 20:03:56
Quote Anchor link
@Obelix : Heb het al veranderd! :)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    } 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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form method="post" enctype="multipart/form-data"> ... </form>
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
 
- SanThe -

- SanThe -

30/01/2013 20:14:21
Quote Anchor link
De uploads zitten niet in $_POST maar in $_FILES.
 
Machiel K

Machiel K

30/01/2013 20:22:29
Quote Anchor link
Als ik
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if(empty($_POST['afbeelding'])) { ... }
vervang door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if(empty($_FILE['afbeelding'])) { ... }

blijf ik alleen de error 'Er is geen afbeelding geselecteerd' krijgen, ook als ik wel een file selecteer.
 
- SanThe -

- SanThe -

30/01/2013 20:26:00
Quote Anchor link
- 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 -
 
Machiel K

Machiel K

30/01/2013 20:28:51
Quote Anchor link
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! '..
 
- SanThe -

- SanThe -

30/01/2013 20:30:37
Quote Anchor link
De preg_match() is volgens mij heel anders dan de originele ereg().
 
Niels K

Niels K

30/01/2013 20:50:10
Quote Anchor link
Inderdaad en je preg_match kan je beter omzetten naar het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

if (!in_array(strtolower(strrchr($file, '.')), array('...'))) {

}


?>


Daarnaast moet je ook nog even controleren of de afbeelding een hoogte en een breedte heeft middels het volgende stukje code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

if (!getimagesize($file)) {
    // afbeelding heeft geen hoogte of breedte
}

?>


Gr,

Niels
 
Machiel K

Machiel K

30/01/2013 20:56:48
Quote Anchor link
Niels Kieviet op 30/01/2013 20:50:10:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

if (!in_array(strtolower(strrchr($file, '.')), array('...'))) {

}


?>


Daar heb ik dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 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
 
Niels K

Niels K

30/01/2013 21:59:53
Quote Anchor link
Wat werkt precies niet? En wat doet 'error' precies? Dat geeft sowieso een error ;-)

Daarnaast, var_dump(strtolower(strrchr($file, '.')) eens? Wat komt daaruit? Oftewel wat moet er nog aangepast worden in de array ;-)
 
Machiel K

Machiel K

30/01/2013 22:11:03
Quote Anchor link
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';.
 



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.