[solved] Upload form validatie volgorde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

David david

david david

13/05/2009 22:59:00
Quote Anchor link
Hallo,

Ik probeer upload fomulier voor een afbeelding te valideren, maar loop vast op de volgorde van de code.
Nu stopt hij wel bij sommige vreemde bestanden, maar bij psd bijvoorbeeld, komt er wel een errror en vervolgens wel een upload..(niet de bedoeling).

Ik heb al flink lopen schuiven en variëren, maar kom er niet uit.
Kan iemand mij opweg helpen qua structuur, dus dat er daadwerkelijk gestopt wordt bij een error.

Heel erg Bedankt!




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
80
81
<?
include 'library/config.php';
include 'library/opendb.php';

$uploadDir = 'upload/';
$allowed_filetypes = array('.jpg','.gif','.bmp','.png', '.jpeg'); // welke wel
$max_filesize = 524288; // Maximale bestandsgrootte in BYTES (nu 0.5MB).
$errors=0;



if(isset($_POST['upload']))
{


$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

$ext= substr(strrchr($fileName, "."), 1);
$naam = substr($fileName, 0, strrpos($fileName, '.'));
$randName = $naam. '-' .substr(md5(rand() * time()), 0, 6);
$filePath = $uploadDir . $randName . '.' . $ext;

//// extenstie check
<!--  -->
      if(!in_array($ext,$allowed_filetypes))
    {

              echo '<h1>Unknown filtype!</h1>';
             $errors=1;
          }





/////////////// verder.. gaat het ergens fout denk ik zo...


    $result    = move_uploaded_file($tmpName, $filePath);
    $query = "INSERT INTO upload (name, size, type, path ) ".
             "VALUES ('$fileName', '$fileSize', '$fileType', '$filePath')";

    mysql_query($query) or die('Error, query failed : ' . mysql_error());    
    
    if (!$result) {
        echo "Error uploading file";
        $errors=1;
    }

    
  
    if(!get_magic_quotes_gpc())
    {

        $fileName  = addslashes($fileName);
        $filePath  = addslashes($filePath);
    }
  

                  

    include 'library/closedb.php';
    
}
        


if(isset($_POST['Submit']) && !$errors)
 {

     echo "<h1>File Uploaded Successfully! Try again!</h1>";
 }



?>

<form action="" method="post" enctype="multipart/form-data" name="uploadform">
  <table width="350" border="0" cellpadding="1" cellspacing="1" class="box">
    <tr>
      <td width="246"><input type="hidden" name="MAX_FILE_SIZE" value="2000000"><input name="userfile" type="file" class="box" id="userfile">
         </td>
      <td width="80"><input name="upload" type="submit" class="box" id="upload" value="  Upload  "></td>
    </tr>
  </table>
</form>
</body>
</html>
Gewijzigd op 01/01/1970 01:00:00 door David david
 
PHP hulp

PHP hulp

27/11/2024 07:13:44
 
Afra ca

Afra ca

14/05/2009 07:40:00
Quote Anchor link
[not helping mode]

Sorry dat ik de fout niet zie, maar haal in je query de variabelen buiten haakjes

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= "INSERT INTO upload (name, size, type, path ) VALUES ('".$fileName."', '".$fileSize."', '".$fileType."', '".$filePath."')";
?>


[/not helping mode]

edit: Je controleert op file type, en indien die niet herkent word geeft hij een error, en word $errors op 1 gezet, heel prima. Maar voor je gaat inserten, controleer je niet of $errors op 1 staat, en die voert hij dus sowiezo uit. Kwestie van logica in mijn ogen...

edit2: je controleert trouwens wel of move uploaded file gelukt is, maar niet of de query gelukt is. is misschien wel leuk plannetje

edit3: On request, of als vanmiddag om half 1 nog niemand het gedaan heeft, kan ik het hele gefixte script even posten

edit4: Hierbij het werkende script (in theorie). Ben nog niet helemaal wakker (ochtendkrant, daarna slapen), dus is volgens mij nog niet helemaal soepel. Trouwens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
include 'library/closedb.php';
?>


Weet niet of je het echt nodig hebt, maar php.net zegt:
php.net:
Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution. See also freeing resources.


Verder nog: waarom zou je in vredesnaam op het eind nog addslashes doen, aangezien je er daarna verder niks meer mee doet. (ik heb trouwens nog geen mysql_real_escape_string ingebouwd, dat mag je zelf doen.) En geen shorttags gebruiken! (url=http://www.bin-co.com/php/articles/using_php_short_tags.php]klik[/url]

Zoiets moet het worden:
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
80
81
82
83
84
85
86
<?php
include 'library/config.php';
include 'library/opendb.php';

$uploadDir = 'upload/';
$allowed_filetypes = array('.jpg','.gif','.bmp','.png', '.jpeg'); // welke wel
$max_filesize = 524288; // Maximale bestandsgrootte in BYTES (nu 0.5MB).
$errors=0;



if(isset($_POST['upload']))
{


$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

$ext= substr(strrchr($fileName, "."), 1);
$naam = substr($fileName, 0, strrpos($fileName, '.'));
$randName = $naam. '-' .substr(md5(rand() * time()), 0, 6);
$filePath = $uploadDir . $randName . '.' . $ext;

//// extenstie check
<!--  -->
    if(!in_array($ext,$allowed_filetypes))
    {

        echo '<h1>Unknown filtype!</h1>';
        $errors=1;
    }

    else
    {
        $result = move_uploaded_file($tmpName, $filePath);
        if (!$result)
        {

            echo "Error uploading file";
            $errors++;
        }

        else
        {

            $query = "INSERT INTO upload (name, size, type, path ) VALUES ('".$fileName."', '".$fileSize."', '".$fileType."', '".$filePath."')";
        
            $sql = mysql_query($query);
            if(!$sql)
            {

                $errors++;
                trigger_error('Error, query failed : ' . mysql_error());
            }
        }
    }

    
    if(!get_magic_quotes_gpc())
    {

        $fileName  = addslashes($fileName);
        $filePath  = addslashes($filePath);
    }
  

    include 'library/closedb.php';
    
}
        


if(isset($_POST['Submit']) && $errors!=0)
{

    echo "<h1>File Uploaded Successfully! Try again!</h1>";
}

else
{
    echo 'File upload failed. Please reread the rules of uploading and try again.';
}



?>

<form action="" method="post" enctype="multipart/form-data" name="uploadform">
  <table width="350" border="0" cellpadding="1" cellspacing="1" class="box">
    <tr>
      <td width="246"><input type="hidden" name="MAX_FILE_SIZE" value="2000000"><input name="userfile" type="file" class="box" id="userfile">
         </td>
      <td width="80"><input name="upload" type="submit" class="box" id="upload" value="  Upload  "></td>
    </tr>
  </table>
</form>
</body>
</html>
Gewijzigd op 01/01/1970 01:00:00 door Afra ca
 
David david

david david

14/05/2009 20:26:00
Quote Anchor link
bedankt voor de genomen moeite!, ik ga er mee verder puzzelen..
 
David david

david david

14/05/2009 22:05:00
Quote Anchor link
Ok het werkt al beter nu. Alleen werkt de extenstie check niet..

zo is het nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$allowed_filetypes
= array('.jpg','.gif','.bmp','.png', '.jpeg'); // welke wel
///verderop:

$ext= substr(strrchr($fileName, "."), 1);

//verderop:

    if(!in_array($ext,$allowed_filetypes))
            {

            echo '<h1>Unknown filtype!</h1>';
            $errors=1;
        }

?>



maar als dit neerzet werkt het wel..:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
if (($ext != "jpg") && ($ext != "jpeg") && ($ext != "png") && ($ext != "gif"))
    {

            echo '<h1>Unknown filtype!</h1>';
            $errors=1;
        }

?>


iets fout in de array? ik zie het niet..

Gelieve Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door david david
 
Afra ca

Afra ca

15/05/2009 08:03:00
Quote Anchor link
Misschien dat ik achterlijk ben, maar de functie in_array checkt toch echt een array. En naar mijn idee is $ext niet een array maar een string......

En valt me op dat je in de eerste situatie de "allowed filetypes" met een punt aangeeft (.jpeg, .png) en in de tweede situatie slechts met "jpeg" en "png" , miscchien dat dat uitmaakt?
 
David david

david david

15/05/2009 20:45:00
Quote Anchor link
hee dat was het inderdaad !, puntjes weggehaald. Logisch eigenlijk, want dei had ik er eerder uitgestript ;).

Brengt mij op een ander puntje..
Hij blijft nu bij het laden van de script in de browser steeds de tekst tonen dat het niet gelukt is.. "File upload failed..." Dus ook als ik nog niks gedaan heb..


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

if(isset($_POST['Submit']) && $errors!=0)
{
    echo "<h1>File Uploaded Successfully! Try again!</h1>";
}
else
{
    echo 'File upload failed. Please reread the rules of uploading and try again.';
}
 
GaMer B

GaMer B

15/05/2009 21:07:00
Quote Anchor link
Die else wordt steeds uitgevoerd als het formulier niet verzonden is. En wanneer wordt het formulier niet verzonden? Juist ja, bij elke keer dat je de pagina bezoekt.
 
David david

david david

16/05/2009 21:47:00
Quote Anchor link
opgelost zo..voorlopig
Gewijzigd op 01/01/1970 01:00:00 door david david
 



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.