login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleem: bestandsnaam

Offline roy - 17/01/2005 22:02 (laatste wijziging 01/03/2005 18:43)
Avatar van royPHP gevorderde Hallo,

Dit soort bestanden moeten worden geupload:
CycleDream-'spring rd 3'-Roy de Kleijn(Tacx) 20-03-2004.im (met aanhalingstekens)
En het bestand moet dezelfde naam houden.


Ik heb zelf een uploadsysteem gemaakt en dat werkt voor alle andere bestanden, behalve voor dit soort met aanhalingstekens.

Weet iemand hier raad mee? Stuur dan een e-mail, als het werkt wil ik er best wat voor betalen. rdekleijn@zonnet.nl


ps. ik heb de connectie hieronder uitgehaald, en ook alle opties uit de meerkeuze lijstjes, ander zou het heeel lang worden.

  1. <html>
  2.  
  3. <head>
  4. <meta http-equiv="Content-Language" content="nl">
  5. <title></title>
  6. </head>
  7. <base target="_self">
  8. <BODY text=black vLink=navy aLink=blue link=blue background="" bgproperties="fixed">
  9. <?
  10.  
  11. mysql_connect(); //Connecten met DB
  12. ?>
  13. <form method="POST" enctype="multipart/form-data" title="Om kans te maken op een prijs">
  14. <hr>
  15. <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
  16. <tr>
  17. <td width="13%" align="right"><b><font size="2">Name:</font></b></td>
  18. <td width="87%">&nbsp;<input type="text" name="name" size="20"></td>
  19. </tr>
  20. <tr>
  21. <td width="13%" align="right"><b><font size="2">E-mail:</font></b></td>
  22. <td width="87%">&nbsp;<input type="text" name="mail" size="20"></td>
  23. </tr>
  24. <tr>
  25. <td width="13%" align="right"><b><font size="2">Country:</font></b></td>
  26. <td width="87%">&nbsp;<select size="1" name="country">
  27. <option value="Select Here...">Select Here...</option>
  28. <option value="Afghanistan">Afghanistan</option>
  29.  
  30. <option value="Zimbabwe">Zimbabwe</option>
  31. </select></td>
  32. </tr>
  33. <tr>
  34. <td width="13%" align="right"><b><font size="2">Date:</font></b></td>
  35. <td width="87%">&nbsp;<select size="1" name="Dd">
  36. <option value="01" selected>01</option>
  37. <option value="02">02</option>
  38.  
  39. <option value="31">31</option>
  40. </select> - <select size="1" name="Dm">
  41. <option value="01" selected>01</option>
  42. <option value="02">02</option>
  43.  
  44. <option value="12">12</option>
  45. </select> -
  46. <select size="1" name="Dy">
  47. <option selected value="2002">2002</option>
  48.  
  49. <option value="2009">2009</option>
  50. <option value="2010">2010</option>
  51. </select></td>
  52. </tr>
  53. <tr>
  54. <td width="13%" align="right"><b><font size="2">Time:</font></b></td>
  55. <td width="87%">&nbsp;<select size="1" name="Th">
  56. <option selected value="00">00</option>
  57. <option value="01">01</option>
  58. </select>
  59. :
  60. <select size="1" name="Tm">
  61. <option selected value="00">00</option>
  62. <option value="01">01</option>
  63.  
  64.  
  65. </select>
  66. :
  67. <select size="1" name="Ts">
  68. <option selected value="00">00</option>
  69.  
  70. </select></td>
  71. </tr>
  72. <tr>
  73. <td width="13%" align="right"><b><font size="2">Terrain:</font></b></td>
  74. <td width="87%">&nbsp;<select size="1" name="parcours">
  75. <option selected value="Select Here">Select Here</option>
  76.  
  77. </select>
  78. </td>
  79. </tr>
  80. <tr>
  81. <tr>
  82. <td width="13%" align="right"><b><font size="2">Parcours:</font></b></td>
  83. <td width="87%">&nbsp;<input name="terrein" type="text" id="terrein"> </td>
  84. </tr>
  85. <tr>
  86. <td width="13%" align="right"><b><font size="2">Distance:</font></b></td>
  87. <td width="87%">&nbsp;<input name="afstand" type="text" id="terrein"> </td>
  88. </tr>
  89. <tr>
  90. <td width="13%" align="right"><b><font size="2">File:</font></b></td>
  91. <td width="87%">
  92. &nbsp;<input type="file" name="file" size="20"></td>
  93. </tr>
  94. <tr>
  95. <td width="13%" align="right">&nbsp;</td>
  96. <td width="87%">&nbsp;
  97. </td>
  98. </tr>
  99. <tr>
  100. <td width="13%" align="right">&nbsp;</td>
  101. <td width="87%">
  102. <input type="submit" value="Submit" name="B1"></td>
  103. </tr>
  104. </table>
  105. <hr>
  106. </form>
  107. <?
  108.  
  109. ?>
  110. <?
  111. //vars:
  112. $query_nhon = mysql_query("SELECT * FROM tacx") or die(mysql_error());
  113. $npics = mysql_num_rows($query_nhon)or die(mysql_error()); // AANTAL FOTO'S
  114. $max = $npics; //MAXIMALE FOTOGETAL
  115. $id = $max+1; //VOLGEND GETAL
  116. $toegelaten = "im ca";
  117. $toegelaten = explode(" ",strtolower($toegelaten));
  118. //toegelaten bestandsextensies(in een array), als je er geen wilt, comment je deze twee lijnen uit!
  119. $locatie = "files/tacx/"; //zie info hierboven
  120. $maxgrootte = "1000"; //aantal Kilobytes (1000 KB != 1MB!!!!! onthoud dit!!!, omdat ik lui ben, beweer ik dat het wel zo is ;)
  121. //als je je afvraag vanwaar dit komt, in 1 byte gaan er 8 bits, in 2 kilobyte, gaan er dus 1600 bits enzovoorts
  122. $maxgrootte .= "000"; //ik voeg er 3 nulletjes aan toe, om er kilobytes van te maken (denk ik, ik HAAT bestandsgrootes op computers)
  123. $geldig_bestand = false;
  124. //het bestand moet juist zijn, indien het uit de temporary dir naar de uiteindelijke locatie bewaard moet worden
  125.  
  126.  
  127. if ($REQUEST_METHOD == 'POST') {
  128. //heb ik al een suitgelegd
  129. if($file) {
  130. //logisch
  131. $image = $HTTP_POST_FILES[file][name];
  132. // Filename + extensie van geuploade bestand
  133. //$grootte = $HTTP_POST_FILES[file][size];
  134. //geeft de grootte in een array, [0] = breedte en [1] = hoogte
  135. $extentie = substr($image, -2);
  136. //neem de extensie van het bestand
  137.  
  138. mysql_query("INSERT INTO tacx (id,name,mail,country,Dd,Dm,Dy,Th,Tm,Ts,terrein,parcours,image,afstand) VALUES ('" . $id . "','" . $name . "','" . $mail . "','" . $country . "','" . $Dd . "','" . $Dm . "','" . $Dy . "','" . $Th . "','" . $Tm . "','" . $Ts . "','" . $terrein . "','" . $parcours . "','" . $image . "','" . $afstand . "')") or die(mysql_error());
  139.  
  140.  
  141. if ($grootte <= $maxgrootte) {
  142. //indien de bestandsgrootte al niet klopt, is het onnuttig van de rest te controleren
  143. for ($i=0;$i<sizeof($toegelaten);$i++) {
  144. //herhaal zoveel keer als er toegelaten bestandsextensies zijn
  145. if ($extensie = $toegelaten[$i]) {
  146. //$afmetingen = getimagesize($image);
  147. //if ($plaatje[0] <= $width || $plaatje[1] <= $height) //gn accolade, want mr 1 opdracht!
  148. $geldig_bestand = true; //aangezien ik gn accolade gebruik gebruik ik geen tab vooraan, dit zou alles onduidelijk maken!
  149. //alle voorwarden gaven direct een true, en dus het bestand is door alle beproengen geraakt
  150. break;
  151. //fuck die for loop, het bestand is toch al goed
  152. //als ik dit niet zet, zal het script nog x keren door de lus gaan, wat de uitvoer een paar microseconden vertraagt
  153. //en dus ook de server ook een beetje meer belast! probeer dus altijd zo braaf mogelijk te zijn voor de server
  154. }
  155. }
  156. }
  157.  
  158.  
  159.  
  160. if ($geldig_bestand = true)
  161. copy($file, $locatie . $image);
  162. //copieer van het temporary dir naar de uiteindelijke dir!
  163. $plaats = "";
  164. echo "";
  165. exit();
  166. //stoppen, anders toot hij het formuliertje!
  167. ?>
  168.  
  169. <?
  170. }
  171. }
  172. ?>
  173. </body>
  174. </html>


Met vriendelijke Groet,
R. de Kleijn

22 antwoorden

Gesponsorde links
Offline Heracles - 18/01/2005 09:50
Avatar van Heracles HTML beginner bedoel je dat hij een bestand met quotes in de bestands naam niet upload? Want kan je dan niet gewoon met addslashes() doen?
Offline roy - 18/01/2005 15:59 (laatste wijziging 18/01/2005 18:49)
Avatar van roy PHP gevorderde Ja de bestands naam wordt anders.
zo moet het worden:
CycleDream-'spring rd 3'-Roy de Kleijn(Tacx) 20-03-2004.im
en zo is het:
'-Roy de Kleijn(Tacx) 20-03-2004.im

Hoe kan ik ervoor zorgen dat de naam hetzelfde blijft?
Het zou leuk zijn als iemand hier het antwoord op weet, ben er al zo lang naar opzoek.

Met Vriendelijk Groet,
R. de Kleijn
Offline Thomas - 18/01/2005 19:37 (laatste wijziging 18/01/2005 19:37)
Avatar van Thomas Moderator Kijk eens met phpinfo() of magic_quotes_gpc aan staat, anders moet je misschien addslashes gebruiken, of htmlentities ofzo ? Zodat die ' geslashed wordt of naar een 'veiliger karakter' vertaald wordt ?
Offline roy - 18/01/2005 21:09 (laatste wijziging 19/01/2005 15:02)
Avatar van roy PHP gevorderde Ja maar de hele bestandsnaam moet hetzelfde blijven. het is namelijk voor een programma die het anders niet kan lezen.

hoe gebruik je addslashes dan?

Zo?

de wijziging staat onder het formulier.
Ik krijg nu volgense de foutmelding:

Warning: copy(files/tacx/): failed to open stream: Is a directory in /var/www/html/tacx/load.php on line 578

dat is hier:
  1. copy($file, $locatie . $image);


niet helemaal goed dus, wat is er fout?
  1. <html>
  2.  
  3. <head>
  4. <meta http-equiv="Content-Language" content="nl">
  5. <title></title>
  6. </head>
  7. <base target="_self">
  8. <BODY text=black vLink=navy aLink=blue link=blue background="" bgproperties="fixed">
  9. <?
  10.  
  11. mysql_connect(); //Connecten met DB
  12. ?>
  13. <form method="POST" enctype="multipart/form-data" title="Om kans te maken op een prijs">
  14. <hr>
  15. <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
  16. <tr>
  17. <td width="13%" align="right"><b><font size="2">Name:</font></b></td>
  18. <td width="87%">&nbsp;<input type="text" name="name" size="20"></td>
  19. </tr>
  20. <tr>
  21. <td width="13%" align="right"><b><font size="2">E-mail:</font></b></td>
  22. <td width="87%">&nbsp;<input type="text" name="mail" size="20"></td>
  23. </tr>
  24. <tr>
  25. <td width="13%" align="right"><b><font size="2">Country:</font></b></td>
  26. <td width="87%">&nbsp;<select size="1" name="country">
  27. <option value="Select Here...">Select Here...</option>
  28. <option value="Afghanistan">Afghanistan</option>
  29.  
  30. <option value="Zimbabwe">Zimbabwe</option>
  31. </select></td>
  32. </tr>
  33. <tr>
  34. <td width="13%" align="right"><b><font size="2">Date:</font></b></td>
  35. <td width="87%">&nbsp;<select size="1" name="Dd">
  36. <option value="01" selected>01</option>
  37. <option value="02">02</option>
  38.  
  39. <option value="31">31</option>
  40. </select> - <select size="1" name="Dm">
  41. <option value="01" selected>01</option>
  42. <option value="02">02</option>
  43.  
  44. <option value="12">12</option>
  45. </select> -
  46. <select size="1" name="Dy">
  47. <option selected value="2002">2002</option>
  48.  
  49. <option value="2009">2009</option>
  50. <option value="2010">2010</option>
  51. </select></td>
  52. </tr>
  53. <tr>
  54. <td width="13%" align="right"><b><font size="2">Time:</font></b></td>
  55. <td width="87%">&nbsp;<select size="1" name="Th">
  56. <option selected value="00">00</option>
  57. <option value="01">01</option>
  58. </select>
  59. :
  60. <select size="1" name="Tm">
  61. <option selected value="00">00</option>
  62. <option value="01">01</option>
  63.  
  64.  
  65. </select>
  66. :
  67. <select size="1" name="Ts">
  68. <option selected value="00">00</option>
  69.  
  70. </select></td>
  71. </tr>
  72. <tr>
  73. <td width="13%" align="right"><b><font size="2">Terrain:</font></b></td>
  74. <td width="87%">&nbsp;<select size="1" name="parcours">
  75. <option selected value="Select Here">Select Here</option>
  76.  
  77. </select>
  78. </td>
  79. </tr>
  80. <tr>
  81. <tr>
  82. <td width="13%" align="right"><b><font size="2">Parcours:</font></b></td>
  83. <td width="87%">&nbsp;<input name="terrein" type="text" id="terrein"> </td>
  84. </tr>
  85. <tr>
  86. <td width="13%" align="right"><b><font size="2">Distance:</font></b></td>
  87. <td width="87%">&nbsp;<input name="afstand" type="text" id="terrein"> </td>
  88. </tr>
  89. <tr>
  90. <td width="13%" align="right"><b><font size="2">File:</font></b></td>
  91. <td width="87%">
  92. &nbsp;<input type="file" name="file" size="20"></td>
  93. </tr>
  94. <tr>
  95. <td width="13%" align="right">&nbsp;</td>
  96. <td width="87%">&nbsp;
  97. </td>
  98. </tr>
  99. <tr>
  100. <td width="13%" align="right">&nbsp;</td>
  101. <td width="87%">
  102. <input type="submit" value="Submit" name="B1"></td>
  103. </tr>
  104. </table>
  105. <hr>
  106. </form>
  107. <?
  108.  
  109. ?>
  110. <?
  111.  
  112. $file1=$file1;
  113. $file = Addslashes($file1);
  114. //vars:
  115. $query_nhon = mysql_query("SELECT * FROM tacx") or die(mysql_error());
  116. $npics = mysql_num_rows($query_nhon)or die(mysql_error()); // AANTAL FOTO'S
  117. $max = $npics; //MAXIMALE FOTOGETAL
  118. $id = $max+1; //VOLGEND GETAL
  119. $toegelaten = "im ca";
  120. $toegelaten = explode(" ",strtolower($toegelaten));
  121. //toegelaten bestandsextensies(in een array), als je er geen wilt, comment je deze twee lijnen uit!
  122. $locatie = "files/tacx/"; //zie info hierboven
  123. $maxgrootte = "1000"; //aantal Kilobytes (1000 KB != 1MB!!!!! onthoud dit!!!, omdat ik lui ben, beweer ik dat het wel zo is ;)
  124. //als je je afvraag vanwaar dit komt, in 1 byte gaan er 8 bits, in 2 kilobyte, gaan er dus 1600 bits enzovoorts
  125. $maxgrootte .= "000"; //ik voeg er 3 nulletjes aan toe, om er kilobytes van te maken (denk ik, ik HAAT bestandsgrootes op computers)
  126. $geldig_bestand = false;
  127. //het bestand moet juist zijn, indien het uit de temporary dir naar de uiteindelijke locatie bewaard moet worden
  128.  
  129.  
  130. if ($REQUEST_METHOD == 'POST') {
  131. //heb ik al een suitgelegd
  132. if($file) {
  133. //logisch
  134. $image = $HTTP_POST_FILES[file][name];
  135. // Filename + extensie van geuploade bestand
  136. //$grootte = $HTTP_POST_FILES[file][size];
  137. //geeft de grootte in een array, [0] = breedte en [1] = hoogte
  138. $extentie = substr($image, -2);
  139. //neem de extensie van het bestand
  140.  
  141. mysql_query("INSERT INTO tacx (id,name,mail,country,Dd,Dm,Dy,Th,Tm,Ts,terrein,parcours,image,afstand) VALUES ('" . $id . "','" . $name . "','" . $mail . "','" . $country . "','" . $Dd . "','" . $Dm . "','" . $Dy . "','" . $Th . "','" . $Tm . "','" . $Ts . "','" . $terrein . "','" . $parcours . "','" . $image . "','" . $afstand . "')") or die(mysql_error());
  142.  
  143.  
  144. if ($grootte <= $maxgrootte) {
  145. //indien de bestandsgrootte al niet klopt, is het onnuttig van de rest te controleren
  146. for ($i=0;$i<sizeof($toegelaten);$i++) {
  147. //herhaal zoveel keer als er toegelaten bestandsextensies zijn
  148. if ($extensie = $toegelaten[$i]) {
  149. //$afmetingen = getimagesize($image);
  150. //if ($plaatje[0] <= $width || $plaatje[1] <= $height) //gn accolade, want mr 1 opdracht!
  151. $geldig_bestand = true; //aangezien ik gn accolade gebruik gebruik ik geen tab vooraan, dit zou alles onduidelijk maken!
  152. //alle voorwarden gaven direct een true, en dus het bestand is door alle beproengen geraakt
  153. break;
  154. //fuck die for loop, het bestand is toch al goed
  155. //als ik dit niet zet, zal het script nog x keren door de lus gaan, wat de uitvoer een paar microseconden vertraagt
  156. //en dus ook de server ook een beetje meer belast! probeer dus altijd zo braaf mogelijk te zijn voor de server
  157. }
  158. }
  159. }
  160.  
  161.  
  162.  
  163. if ($geldig_bestand = true)
  164. copy($file, $locatie . $image);
  165. //copieer van het temporary dir naar de uiteindelijke dir!
  166. $plaats = "";
  167. echo "";
  168. exit();
  169. //stoppen, anders toot hij het formuliertje!
  170. ?>
  171.  
  172. <?
  173. }
  174. }
  175. ?>
  176. </body>
  177. </html>
Offline Thomas - 20/01/2005 12:57 (laatste wijziging 20/01/2005 12:58)
Avatar van Thomas Moderator if ($extensie = $toegelaten[$i]) {

Dat (die =) zal overigens in geen geval de bedoeling zijn...
Offline roy - 20/01/2005 16:56
Avatar van roy PHP gevorderde Ja daar heb je gelijk..

maar het werkt nog steeds niet.
de bestandsnaam wordt zo:
'-Roy de Kleijn(Tacx) 20-03-2004.im

en zo herkent het progamma het niet.
Offline Tuinstoel - 20/01/2005 20:04
Avatar van Tuinstoel PHP expert Een ' lijkt me anders ook niet echt geldig, zou je de ' niet kunnen vervangen met een _ ? Lijkt me veel beter. Dus gewoon str_replace(); gebruiken.
Offline twopeak - 20/01/2005 20:12
Avatar van twopeak Gouden medaille

PHP ver gevorderde
@Tuinstoel, hij heeft heel duidelijk gezegd dat dat niet mocht

Roy; geef wat meer info rond je probleem!
Dat bestand staat nu op je (windows)computer

Je wilt het uploaden naar een web-server of naar een andere computer?

Zou de mogelijkheid bestaan om het bestand een andere naam te geven; maar de originele naam wordt bewaard?
Of bijvoorbeeld dat het bestand upgeload wordt naar de server en pas daar zijn definitieve naam krijgt met een rename-commando?

Indien het op een webserver wordt geplaatst en dat mensen het moeten downloaden, lijkt het me perfect mogelijk om de naam op de webserver te vervangen, maar als er gedownload wordt, de originele naam te geven.



Andere vraag;
Als je het bestand upload; wat staat er in $_FILES['uploadveldnaam']['name']
De juiste naam of de verkeerde naam?
Offline roy - 20/01/2005 21:29 (laatste wijziging 21/01/2005 12:41)
Avatar van roy PHP gevorderde Het bestand staat inderdaad op mijn computer en moet geupload worden naar de webserver.

het maakt mij inderdaad niet zoveel uit hoe het bestad heet op de webserver, maar als ze het gaan downloaden dan moet het dezelfde naam hebben als hoe het werd geupload.

wat bedoel je precies met die andere vraag?

ja als ik het echo dan is het de juiste naam, want hij moet het ook in een database opslaan en daar komt ook de goede naam.

alleen het bestand zelf krijgt de verkeerde naam.

bedankt voor jullie reactie!!
Offline xSc - 21/01/2005 12:43
Avatar van xSc Onbekend Het wordt absoluut afgeraden om bestandsnamen na het uploaden te behouden (ivm overschrijving, verwarring, etc.). Je kunt er beter een volgnaam/nummer aan geven.
Offline roy - 21/01/2005 15:59
Avatar van roy PHP gevorderde het is de bedoeling dat de bestandsnaam het zelfde blijkt.
het programma leverd alleen identieke bestanden.
Offline Heracles - 21/01/2005 16:15
Avatar van Heracles HTML beginner sorry maar ik denk dat als je addslashes() gebruikt dat de bestandsnaam er zo uit komt te zien:

CycleDream-\'spring rd 3\'-Roy de Kleijn(Tacx) 20-03-2004.im

Maar het is te proberen, mischien dat het wel werkt...

addslashes($devariabele);

Offline roy - 21/01/2005 16:45 (laatste wijziging 21/01/2005 16:49)
Avatar van roy PHP gevorderde dat klopt.
Maar als bestandsnaam mag je geen \-tekens in de naam hebben.

tenminste onder windows, en het is een windows-based programma
Offline twopeak - 21/01/2005 16:58
Avatar van twopeak Gouden medaille

PHP ver gevorderde
ok, roy, ik denk dat we in de buurt van een mogelijke oplossing zitten:

Je maakt je uploadformuliertje, en je upload het bestand, dat je een unieke naam geeft (bv. 20050121164912; jaarmaanddaguurminutenseconden)

Maar in een tabel in je database link je die nieuwe naam aan de originele naam! (dus maak een tabel met de velden 'origineel' en 'uniek')

in het veld 'origineel' steek je de naam van je bestand; MAAR je MOET addslashes gebruiken.
Wanneer je het er terug uithaald, dan gebruik je stripslashes!

Wanneer iemand het download, maak je daar een phpscript voor (die alle downloads in een lijstje zet, en aanklikbaar maakt.)

Dan heb je een scriptje dat de download forceert; je begint je phpscript met deze lijnen: (dit komt uit een script van mij)

  1. <?
  2. header('Content-type: application/'.$mimetype[$ext].'\n');
  3. header('Content-Disposition: attachment; filename="'.$dir.'"\n');
  4. header("Content-length: " . filesize($dir) . "\n");
  5. readfile($dir);
  6. ?>

in de eerste lijn moet je $mimetype[ext] veranderen naar wat je ziet bij een upload in
$_FILES['upload_veld_naam']['type']

Tweede lijn; $dir verander je in de naam die je bestand zal krijgen (de originele moeilijke naam)

derde lijn verander je $dir in de hele pad naar je bestand met de unieke naam (dus DOCUMENT_ROOT en dan nog een paar subdirs)
(die lijn is gewoon om je downloaders blij te maken, eigenlijk is het overbodig)

laatste lijn, zelfde als hierboven.



Let us know if it worked!
Offline roy - 21/01/2005 21:00 (laatste wijziging 21/01/2005 23:40)
Avatar van roy PHP gevorderde Ik heb gedaan wat je zei, een kolom unieke namen en een kolom met originele namen.
Dat staat allemaal goed.

Maar ik begrijp niet hoe het downloaden werkt. Een bestand downloaden en dan meteen de bestandsnaam veranderen, dat is voor mij echt abbacadabra.

Zou je er nog eens naar willen kijken. Als je een vergoeding wil, moet je maar even een e-mail sturen: rdekleijn@zonnet.nl

  1. <?PHP ob_start(); ?>
  2. //afstand=de unieke naam
  3. //image=de originele naam
  4. Dit werkt uiteraard niet wat hieronder staat.
  5. <?php
  6.  
  7. ?>
  8.  
  9. <?php
  10. $query = "SELECT * FROM tacx ORDER BY afstand ASC";
  11. $resultaat = mysql_query($query) or die (mysql_error());
  12. while ($obj = mysql_fetch_object($resultaat)) {
  13. $id = $obj->id;
  14. $image = $obj->image;
  15. $afstand = $obj->afstand;
  16.  
  17. ?><? $image1=stripslashes($image);
  18. header('Content-type: application/'.$image.'\n');
  19. header('Content-Disposition: attachment; filename="'.$image1.'"\n');
  20. header("Content-length: " . filesize($dir) . "\n");
  21. readfile($dir);
  22. ?>
  23. <a href="http://www.tacx.klikgo.nl/<?PHP echo $afstand; ?>" name="<?PHP echo $image; ?>" target="_blank" style="text-decoration: none"><font size="1" face="Verdana"><?PHP echo $image; ?></font></a><BR>
  24. <? }
  25. ?>


Alvast bedankt voor je hulp!! super.

Groeten,
Roy
Offline Heracles - 22/01/2005 11:20 (laatste wijziging 22/01/2005 11:28)
Avatar van Heracles HTML beginner Ik dnek dat twopeak dit bedoeld:

  1. <?PHP
  2.  
  3.  
  4. //afstand=de unieke naam
  5. //image=de originele naam
  6. Dit werkt uiteraard niet wat hieronder staat.
  7.  
  8. $query = "SELECT * FROM tacx ORDER BY afstand ASC";
  9. $resultaat = mysql_query($query) or die (mysql_error());
  10. while ($obj = mysql_fetch_object($resultaat)) {
  11. $id = $obj->id;
  12. $image = $obj->image;
  13. $afstand = $obj->afstand;
  14. $ext = $obj->ext;
  15.  
  16. ?>
  17. <a href="http://www.tacx.klikgo.nl/dowload.php?file=<?PHP echo $afstand; ?>&ext=<?=$ext?>" name="<?PHP echo $image; ?>" target="_blank" style="text-decoration: none"><font size="1" face="Verdana"><?PHP echo $image; ?></font></a><BR>
  18. <? }
  19. ?>


en dan download.php:

  1. <? $image1 = stripslashes($_GET['file']);
  2. $mimetype = $_GET['ext'];
  3. header('Content-type: application/'.$mimetype.'\n');
  4. header('Content-Disposition: attachment; filename="'.$image1.'"\n');
  5. header("Content-length: " . filesize($image1) . "\n");
  6. readfile($image1);
  7. ?>

je moet download.php dan wel in dezelfde dir hebben staan als de downloads.

ook moet je zodra je de file in de db zet in de extra kolom 'ext' de waarde $_FILES['upload_veld_naam']['type'] zetten.

hierbij moet je 'upload_veld_naam' wel ff aanpassen.

Ik hoop dat het werkt 
Offline roy - 22/01/2005 11:36 (laatste wijziging 22/01/2005 12:14)
Avatar van roy PHP gevorderde helaas dat werkt niet, elke download krijgt dan de bestandsnaam "download" in plaats van de originele naam en hij download een leeg bestand. Ik heb met een echo gekeken en $image1 is wel de goede naam. Hij zet hem alleen verkeerd neer...

En waarom moet er een kolom met de extensie worden toegevoegd? die staat toch al in de originele naam?

ja, het download file staat waar ook de bestanden staan..
Offline twopeak - 22/01/2005 12:45 (laatste wijziging 22/01/2005 13:05)
Avatar van twopeak Gouden medaille

PHP ver gevorderde
Als het voor professionele doeleinden is (dat jij er geld uit gaat verdienen) dan wil ik wel een vergoeding, als het als hobby of om mensen een dienst aan te bieden is, dan interesseert een vergoeding me niet. (aaaah, jeugdig enthousiasme )


upload.php
  1. <?
  2. if ($_FILES['bestand']) {
  3. //naar db connecteren!
  4. echo "er is een bestand<br>";
  5. $bestandsgrootte = 15; //kb max bestandsgrootte
  6. $toegelaten = Array('gif', 'jpg', 'jpeg', 'png', 'pdf', 'dot', 'doc', 'tpl', 'htm', 'html'); //toegelaten bestandsextensies! (jij moet daar .msi in zetten!)
  7. $extensie = array_pop( explode( "/" , $_FILES['bestand']['type'] ) );
  8. $eindlocatie = "/user/downloadsysteem/bestanden/";
  9.  
  10. if ( $_FILES['bestand']['size'] <= $bestandsgrootte * 1000000) {
  11. echo "juiste grootte<br>";
  12. if (in_array($extensie, $toegelaten) ) {
  13. echo "juiste extensie<br>";
  14. $uniekenaam = date("YmdHis");
  15. if ( move_uploaded_file($_FILES['bestand']['tmp_name'], $eindlocatie.$uniekenaam) ) {
  16. mysql_query("INSERT INTO downloads (uniek, origineel, type) VALUES ('".$uniekenaam."', '".$_FILES['bestand']['name']."','".$_FILES['bestand']['type']."')") or die(mysql_error());
  17. echo "goodie, het bestand werd goed getransporteerd<br>";
  18. } else {
  19. //gn transport
  20. echo "<font color=red>geen transport</font><br>";
  21. }
  22. } else {
  23. //verkeerd bestandstype
  24. echo "<font color=red>verkeerd bestandstype</font><br>";
  25. }
  26.  
  27. } else {
  28. //bestand is te groot
  29. echo "<font color=red>te groot bestand</font><br>";
  30. }
  31. }
  32.  
  33. ?>
  34.  
  35.  
  36.  
  37. }
  38. ?>
  39. <form action="index.php" method="post" enctype="multipart/form-data">
  40. <input type="file" name="bestand"><br>
  41. <input type="submit" name="versturen" value="versturen">
  42. </form>

download.php (hiervoor maakte ik gebruik van de prefab functie directory uitlezen van hier)
  1. <?
  2. function uitlezen($dir){
  3. //$dir is de directory dat 'm moet uitlezen
  4. $uitlees=opendir($dir);
  5. //open de directory
  6. $bestanden=array();
  7. //maak vd var bestanden een array waarin de hele directory inhoud komt (ook verborgen bestanden)
  8. while(($dit_bestand = readdir($uitlees))!==false){
  9. //zolang hij een bestand uitleest uit $uitlees, zal hij doorgaan
  10. /*wanneer je een while loop uitvoert,
  11.   zet php de pointer (waar hij ergens is) naar het volgende ding, dus hij heeft alle bestanden "opgeslagen" in uitlees
  12.   en dan in de while loop gaat hij ze een voor een af, tot hij eens krijgt dat er een bestand niet bestaat
  13.   */
  14. $bestanden[] = $dit_bestand;
  15. //voeg dit_bestand toe aan de array
  16. }
  17. closedir($uitlees);
  18. //voor de schoonheid, sluit de directory
  19. return $bestanden;
  20. //en stuurt het resultaat terug
  21. }
  22. //naar db connecteren
  23. $arree = uitlezen("/user/downloadsysteem/bestanden/");
  24. foreach ($arree as $url) {
  25. $basename = basename($url);
  26. $q = mysql_query("SELECT origineel FROM downloads WHERE uniek='".$basename."'") or die (mysql_errro());
  27. if (mysql_num_rows($q) == 1) {
  28. echo "<a href=bestand.php?bestand=".$basename.">".$a[0]."</a><br>";
  29. }
  30. }
  31. ?>

bovenstaande heb ik niet getest!

bestand.php
  1. <?
  2.  
  3. //deze pagina wordt ingeroepen vanuit een andere pagina.
  4. //op die andere pagina staat een lijst met alle downloadbare bestanden
  5. //dus je leest de directory met alle downloads (ik heb hier een scriptje voor gemaakt, tss snippets of handige scripts ofzo: "dir uitlezen")
  6. //en dit bestand wordt zo opgeroepen:
  7. // download.php?bestand=20050122123001
  8.  
  9.  
  10. $download_dir = "/users/downloadsysteem/bestanden";
  11. //in deze dir zitten de bestanden; met als naam 20050122123001
  12. //die string is de datum als date('YmdHis')
  13.  
  14. mysql_connect() or die('gn connectie');
  15. mysql_select_db('jfoprae') or die ('gn database');
  16.  
  17. $tabelnaam = "downloads"; //naam vd tabel
  18. $origineel = "origineel"; //tabelveld met originele naam
  19. $uniek = "uniek"; //tabelveld met unieke naam
  20. $type = "type"; //tabelveld met het type bestand
  21.  
  22. //vanaf nu zou je niets meer moeten editen denk ik...
  23.  
  24. $sendfile = $download_dir.$_GET['bestand'];
  25. if (!is_numeric($_GET['bestand'] || !file_exists($sendfile)) {
  26. die('verkeerde bestandsnaam');
  27. } //dit is een minimum aan veiligheid, ik raad je aan het te verbeteren.
  28.  
  29.  
  30. $q = "SELECT ".$origineel.", ".$type." FROM ".$tabelnaam." WHERE ".$uniek."='".$_GET['bestand']."' LIMIT 1";
  31. $query = mysql_query($q) or die("foute query".$q);
  32.  
  33. if (mysql_num_rows($query) == 1) {
  34. $a = mysql_fetch_array($query);
  35. header('Content-type: application/'.$a[1].'\n');
  36. header('Content-Disposition: attachment; filename="'.$a[0].'"\n');
  37. header("Content-length: " . filesize($sendfile) . "\n");
  38. readfile($sendfile);
  39. } else {
  40. die("gn rijen");
  41. }
  42.  
  43.  
  44. ?>

(hehehe, Henry gaat gek worden als hij mijn varnamen ziet! in dit geval heeft hij wel volledig gelijk: gebruik nooit dergelijke namen )
het is allemaal maar heel rap gecoded, maar op het eerste zicht werkt het op mijn computer.
Ik heb er wat veiligheid aan toegevoegd, maar je zou het zelf strenger moeten maken!!!!

ok, ik heb wat geknoeid aan het einde om de sql er nog bij te krijgen (die was ik vergeten) dus dat is dan ongetest...
als het niet werkt zal ik het properkes hermaken!
Offline roy - 22/01/2005 15:03 (laatste wijziging 22/01/2005 15:11)
Avatar van roy PHP gevorderde Ik heb gedaan zoals je schreef, mijn extensie er neerzetten dat is .im
en dan geeft hij de melding "verkeerd bestandstype" dat is overigens ook als ik een jpg-plaatje upload.


Nee ik verdien er geen geld mee, het is puur voor de hobby.
Offline twopeak - 22/01/2005 15:31
Avatar van twopeak Gouden medaille

PHP ver gevorderde
Als je niet wilt checken op bestandstype (in het begin als je test is dat makkelijker, je wilt nu eerst dat het werkt, en dan dat het veilig werkt)
Doe je volgende lijnen weg:


$toegelaten = Array('gif', 'jpg', 'jpeg', 'png', 'pdf', 'dot', 'doc', 'tpl', 'htm', 'html'); //toegelaten bestandsextensies! (jij moet daar .msi in zetten!)
$extensie = array_pop( explode( "/" , $_FILES['bestand']['type'] ) );
[...]

if (in_array($extensie, $toegelaten) ) {
echo "juiste extensie<br>";

[...]

} else {
//verkeerd bestandstype
echo "<font color=red>verkeerd bestandstype</font><br>";


o ja, dat van die check voor de filesize lijkt mij zo niet helemaal meer juist!
Als ik me just vergis moet je de grootte vermenigvuldigen met 1024 en niet 1000000 zoals ik heb gedaan ;)
Offline twopeak - 22/01/2005 15:32
Avatar van twopeak Gouden medaille

PHP ver gevorderde
@roy: als het niet werkt, dan code ik het deze avond werkend terug, en contacteer ik je per pm om de scripts door te sturen, we zijn deze topic wat aan het opblazen!

Als er andere mensen dit een interessante discussie vinden en willen volgen, laat me iets weten!
Offline roy - 23/01/2005 00:24
Avatar van roy PHP gevorderde Het downloaden wil niet lukken nog.

de bestandsnaam is "bestand" en is niet gekoppeld aan een file maar een leeg iets?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.307s