[PHP] Image upload werkt niet.

Pagina: 1
Acties:
  • 300 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een form gemaakt waarin de admin producten toe kan voegen aan de database. In dit form kan hij aanvinken of hij een default image wilt gebruiken, of er zelf 1 wilt uploaden. Ik handle dit als volgt:

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
// Form validation etc, niet belangrijk hier

// Insert query
mysql_query
("INSERT INTO items(name, cid, notes, userimg) 
VALUES('".$name."', '".$_POST['category']."', '".$notes."', '".$userimg."')") 
or die(mysql_error());
                
$img_name = mysql_insert_id();
            
echo "<h2>Success!</h2>";
echo "<p>";
                
// Move image 
if(isset($_POST['userimg'])) // Hier kijk ik dus of de checkbox aangevinkt is
{
   $target_path = "/images/items/".$img_name.".jpg";
                    
   if(move_uploaded_file($_FILES['img']['tmp_name'], $target_path))
   {
     echo $upload_succesfully;
   }
   else
   {
     echo $upload_error;
   }
}


Hij voegt netjes het product toe, maar echo'd dus $upload_error als ik probeer een image up te loaden. De map bestaat en heeft de juiste CHMOD settings.

Ziet iemand misschien wat ik fout doe?

[ Voor 5% gewijzigd door Verwijderd op 08-04-2007 23:12 ]


Acties:
  • 0 Henk 'm!

  • Sebas-
  • Registratie: Augustus 2006
  • Laatst online: 16-06 21:35
target path, als dat een linux systeem is, dan is de map images in de root van het systeem? (/ dus)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je bedoelt dus de / voor /images weghalen? Werkt niet als dat is wat je bedoelde.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Sebas- schreef op zondag 08 april 2007 @ 23:14:
target path, als dat een linux systeem is, dan is de map images in de root van het systeem? (/ dus)
nee, home dir, en als jij als user op een normale host zit, dan klopt dit

edit:
en wat is $_FILES['img']['error'] ?

[ Voor 9% gewijzigd door BasieP op 08-04-2007 23:18 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
2.

Ik zie het al! Het hidden field MAX_FILE_SIZE stond te laag...

Erg stom van me, bedankt voor de opheldering!

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Verwijderd schreef op zondag 08 april 2007 @ 23:21:
2.

Ik zie het al! Het hidden field MAX_FILE_SIZE stond te laag...

Erg stom van me, bedankt voor de opheldering!
tip: check die errors, en laat de bijbehoorende foutmelding zien in je script. Dan kan je tenminste zien wat er fout gaat.
ook erg makkelijk voor hergebruik van je script

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Wellicht ten overvloede, maar let op met het gebruik van string concatenation. Direct POST gegevens in je query stoppen is vragen om een SQL injectie :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Klopt, ik heb een functie clean_text gemaakt. Maar $_POST['category'] komt van een select en heeft dus alleen een nummer als waarde (het ID).

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op dinsdag 10 april 2007 @ 13:37:
Klopt, ik heb een functie clean_text gemaakt. Maar $_POST['category'] komt van een select en heeft dus alleen een nummer als waarde (het ID).
En dat is dus de stomste aanname welke je wat betreft de user input kan maken. Een andere waarde posten is 2 seconden werk. Altijd _alles_ dat vanaf de user binnenkomt checken.

[ Voor 6% gewijzigd door Voutloos op 10-04-2007 13:42 ]

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
<select id="category" name="category">
<?php
$qry = mysql_query("SELECT * FROM category ORDER BY name ASC");

  while($data = mysql_fetch_array($qry))
  {
    echo "<option value=\"".$data['cid']."\">".stripslashes($data['name'])."</option>";
  }
?>
</select>


Hoe kan iemand dan de value van die option veranderen als ik vragen mag?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Html opslaan, met notepad de html code aanpassen, html openen in je browser, op de submit knop drukken.

Dat is allemaal wel binnen een minutje te doen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20:32
Verwijderd schreef op dinsdag 10 april 2007 @ 13:55:
PHP:
1
2
3
4
5
6
7
8
9
10
<select id="category" name="category">
<?php
$qry = mysql_query("SELECT * FROM category ORDER BY name ASC");

  while($data = mysql_fetch_array($qry))
  {
    echo "<option value=\"".$data['cid']."\">".stripslashes($data['name'])."</option>";
  }
?>
</select>


Hoe kan iemand dan de value van die option veranderen als ik vragen mag?
De HTML lokaal opslaan en wijzigen? :)

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah ok, ik wist niet dat dan de scripts ook blijven werken (die linken naar dezelde pagina namelijk).

Maar goed ik zal ze beveiligen vanaf nu.

Acties:
  • 0 Henk 'm!

Verwijderd

Om er snel achter te komen wat er fout gaat bij het uploaden van een file kun je onderstaande code fragment gebruiken dat de foutcode bekijkt:

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
if (is_uploaded_file($userfile)) {
  
  //include code to copy tmp file to final location here...
  
}else{
  switch($HTTP_POST_FILES['userfile']['error']){
   case 0: //no error; possible file attack!
     echo "There was a problem with your upload.";
     break;
   case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini
     echo "The file you are trying to upload is too big according to upload_max_filesize in php.ini.";
     break;
   case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
     echo "The file you are trying to upload is too big according to MAX_FILE_SIZE in the HTML form.";
     break;
   case 3: //uploaded file was only partially uploaded
     echo "The file you are trying upload was only partially uploaded.";
     break;
   case 4: //no file was uploaded
     echo "You must select an image for upload.";
     break;
   default: //a default error, just in case!  :)
     echo "There was a problem with your upload.";
     break;
}


Succes verder.
Pagina: 1