login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Proleem Uploadscript

Offline mvdrunen - 10/02/2011 22:25
Avatar van mvdrunenLid Hoi,

Ik heb een probleem met mijn uploadscript. Volgens mij worden er lege $_FILES variabelen gecontroleerd en ik kan er maar niet achter komen wat het probleem is. De oplossing is vast heel simpel maar ik kom er niet uit. Kan iemand naar onderstaand stukje code kijken en proberen mij te helpen?

  1. <?php
  2. if(isset($_POST['submit'])){
  3. $qid = $_GET['qid'];
  4. if($_POST['type'] == "image"){
  5. if ($_FILES["file"]["error"] > 0){
  6. echo "Error: " . $_FILES["file"]["error"] . "<br />";
  7. } else {
  8. $location = "temp_image/";
  9. $type = $_FILES["file"]["type"];
  10. if($type != "image/jpeg" && $type != "image/gif" && $type != "image/png" && $type != "image/bmp"){
  11. echo "Error: Het bestand moet jpg, jpeg, gif, png of bmp zijn! Het bestand is:".$_FILES["file"]["type"];
  12. echo "<br><a href=\"test_add_attachment.php?qid=".$qid."\">Probeer opnieuw</a>";
  13. } else {
  14. if($_FILES["file"]["size"] <= 150000){
  15. $_FILES["file"]["name"] = "bijlage_".$_SESSION['naam']."_qid_".$qid;
  16. move_uploaded_file($_FILES["file"]["tmp_name"],$location. $_FILES["file"]["name"]);
  17. echo "Bestand geupload. Dit scherm kan nu gesloten worden.";
  18. } else {
  19. echo "Error: De maximum bestandsgrootte is 1,5MB. Verklein het bestand!";
  20. echo "<br><a href=\"test_add_attachment.php?qid=".$qid."\">Probeer opnieuw</a>";
  21. }
  22. }
  23. }
  24. } elseif($_POST['type'] == "text"){
  25. $text = $_POST['text'];
  26. $_SESSION['text_'.$qid] = nl2br($text);
  27. echo "De tekst is opgeslagen. Dit scherm kan nu gesloten worden.";
  28. } elseif($_POST['type'] == ""){
  29. echo "Error: Het veld 'type' mag niet leeg zijn!";
  30. echo "<a href=\"test_add_attachment.php?qid=".$qid."\">Probeer opnieuw</a>";
  31. }
  32. } else {
  33. ?>
  34. <head>
  35. <script type="text/javascript" src="javascript/formuse.js"></script>
  36. </head>
  37. <body>
  38. <table>
  39. <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
  40. <tr>
  41. <td style="width: 75px;">Type:</td>
  42. <td>
  43. <select name="type">
  44. <option value="" rel="none">-- Selecteer --</option>
  45. <option value="image" rel="image">Afbeelding</option>
  46. <option value="text" rel="text">Tekst</option>
  47. </select>
  48. </td>
  49. </tr>
  50. <tr rel="image">
  51. <td>Uploaden:</td>
  52. <td><input type="file" name="file" id="file">1,5MB Max.</td>
  53. </tr>
  54. <tr rel="text">
  55. <td>Tekst:</td>
  56. <td><textarea name="text" rows="4" cols="75"></textarea></td>
  57. </tr>
  58. <tr>
  59. <td>Bevestigen:</td>
  60. <td><input type="submit" name="submit" value="Bevestigen"></td>
  61. </tr>
  62. </form>
  63. </table>
  64. </body>
  65. <?php } ?>


Dankje

4 antwoorden

Gesponsorde links
Offline Frisbee - 11/02/2011 08:54
Avatar van Frisbee HTML beginner Wat werkt er niet? Krijg je een foutmelding of gebeurt er gewoon niks?
Offline ArieMedia - 11/02/2011 09:39 (laatste wijziging 11/02/2011 09:56)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Citaat:
Volgens mij worden er lege $_FILES variabelen gecontroleerd


Volgens mij kan je daar achter komen door:
  1. <?php
  2. var_dump($_FILES); // of
  3.  
  4. echo '<pre>'.print_r($_FILES,1).'</pre>';
  5. ?>


Dus als je dit eerst controleert, zijn we een stapje verder bij de oplossing 
(part of the debugging)

Edit:

  1. if ($_FILES["file"]["error"] > 0){
  2. // lap code
  3. }


vind ik overigens een merkwaardige manier van fouten controleren

  1. move_uploaded_file($_FILES["file"]["tmp_name"],$location. $_FILES["file"]["name"]);
  2. echo "Bestand geupload. Dit scherm kan nu gesloten worden.";

Je gaat er hier van uit dat het altijd goed gaat..

  1. if(move_uploaded_file(....)) {
  2. echo 'Gelukt';
  3. } else {
  4. echo 'Mislukt';
  5. }

is een betere manier van controleren

Citaat:
action="<?php echo $_SERVER['PHP_SELF']; ?>"

Is erg handig voor de (luie) programmeur, maar beveiligingstechnisch erg slecht.


Het lijkt misschien veel, maar pas deze dingen eerst aan. Misschien dat je dan al beter kan achterhalen waar de fout zit  
Offline kilian - 13/02/2011 22:55
Avatar van kilian Lid Over het laatste puntje:
action="" should do the trick 
Offline marten - 13/02/2011 23:55
Avatar van marten Beheerder Action leeg maken zoals kilian zegt en zet je session_start() eens direct na het openen van PHP.

Verder kan var_dump of print_r inderdaad veel problemen bloot leggen. Onder andere mime type problemen kan je hierdoor makkelijk ontdekken.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.222s