[PHP] Bestandsnaam uit string halen *

Pagina: 1
Acties:
  • 89 views sinds 30-01-2008

  • Gumball
  • Registratie: December 2003
  • Niet online
Kan titel even worden aangepast??

Ik ben bezig een preken uploader te maken voor mijn dominee. Nu heb een simpel upload script waarmee je allerhande files kunt uppen naar de map "bestanden".

Nu zoek ik een manier om de naam van een bestand dat geupload is te filteren en in een MySQL database te zetten. Ik heb de volgende scripts:

Script voor het schrijven naar DB:

code:
1
2
3
4
5
6
7
8
9
10
11
<?php
include ('connect.php');

$datum = $_POST['datum'];
$omschrijving = $_POST['omschrijving'];
$userfile = $_POST['userfile'];

$query = ("INSERT INTO toevoegen (datum,omschrijving,userfile) VALUES ('$datum','$omschrijving','$userfile')");
         mysql_query($query) or die(mysql_error());

         ?>


In dit script staat $userfile, dit is het POST veld van een pagina waar je kan bladeren en een bestand kan selecteren. Buitenom dat dit niet werkt (hij pakt op een of andere manier de text uit het invul vak niet) zou ik dan ook nog iets krijgen als C:\preken\preekvan24oktober2004.doc. Dat is dus ook niet de bedoeling, heb alleen de bestandsnaam.doc nodig.

het upload bestand ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
<?
if ($_POST['Submit'])
{
   $name = $_FILES['userfile']['name'];

    copy($_FILES['userfile']['tmp_name'], "bestanden/$name");
    echo "Bestand geupped";
    }

?>


De invul velden op de html pagina

code:
1
2
3
4
5
<form action="prekentoevoegen.php" method="post" enctype="multipart/form-data" name="form1">
 Selecteer een preek: <input name="userfile"  name="userfile" type="file" id="userfile">      <BR><BR><BR>
     Datum: <input type=text name=datum value="dd-mm-jjjj"><br><br>
preekomschrijving:<input type=text name=omschrijving><br><br>
   <input type="submit" name="Submit" value="Submit">


Ik hoop dat de vraagstelling een beetje duidelijk is. Zal het nog een keer samenvatten:

Ik moet dus de bestandsnaam van de geuploade bestanden hebben, deze in de DB plaatsen, vanwaar ik ze weer kan aanroepen in een ander script om zo links van de files te maken.

[ Voor 0% gewijzigd door Gumball op 14-10-2006 14:43 . Reden: Titel aanpassing plz. ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat ik mis is o.a. wat je zelf al geprobeerd hebt? Heb je al eens naar (b.v.) de string functies van PHP gekeken? Een bestandsnaam uit een string halen is echt zo complex niet als je je even verdiept in de juiste manuals.
Verder vraag ik me af waarom je, in je HTML, sommige attributen wel van quotes voorziet en andere niet.
Heb je dit script zelf geschreven of ergens "geleend"? Heb je al gedebugged? Een keer je values ge-echo'd naar de output?
En dan heb ik het nog niet eens gehad over SQL-injection (genoeg over te vinden) en het controleren van user-input (want dat gaat onherroepelijk fout bij je datum bijvoorbeeld).
Gumball schreef op zaterdag 14 oktober 2006 @ 14:42:
Kan titel even worden aangepast??
Prima, maar doe dan voortaan zelf even een suggestie...

[ Voor 30% gewijzigd door RobIII op 14-10-2006 15:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 16-08-2025

TheLunatic

Ouwe boxen.

Als ik het goed begrijp wil je alle tekst hebben na de laatste backslash in een string? Dat is behoorlijk basic PHP... zonder te hebben getest, in stappen, kan ook in één regel code.

PHP:
1
2
3
4
5
$userfile = 'C:\\preken\\preekvan24oktober2004.doc';
$filename = strrev($userfile); /* String omdraaien. */
$filename = substr($filename, 0, strpos($filename, '\\')); /* Alle tekst tot aan een slash pakken. */
$filename = strrev($filename); /* String terug omdraaien. */
echo($filename);


Met strrpos() kan het zelfs nog netter, want dan kun je strrev() buitenwegen laten.

[ Voor 12% gewijzigd door TheLunatic op 14-10-2006 15:24 ]

Mother, will they like this song?


  • user109731
  • Registratie: Maart 2004
  • Niet online
Of gewoon basename?

Btw, als je een bestand upload krijg je volgens mij altijd enkel de bestandsnaam. Het volledige pad heb je niets mee te maken, dus die word ook niet meegestuurd :)

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 16-08-2025

TheLunatic

Ouwe boxen.

basename() is idd nog netter, dan voorkom je gedoe met verschillende OS'sen...

Mother, will they like this song?


  • Gumball
  • Registratie: December 2003
  • Niet online
Aan de slag gegaan, en de volgende code geprobeerd, wat naar mijn inziens moet werken, alleen blijft Userfile leeg in de DB, het lijkt wel of ie niets haalt uit het form. De code:

[code=php]
<?php
include ('connect.php');

$datum = $_POST['datum'];
$omschrijving = $_POST['omschrijving'];

$userfile = $_POST['userfile'];
$filename = strrev($userfile);
$filename = substr($filename, 0, strpos($filename, '\\'));


$query = ("INSERT INTO toevoegen (datum,omschrijving,userfile) VALUES ('$datum','$omschrijving','$filename')");
mysql_query($query) or die(mysql_error());

?>


[/code=php]

Iemand nog suggesties??

[ Voor 86% gewijzigd door Gumball op 14-10-2006 15:59 ]


  • Atari Paul
  • Registratie: November 2002
  • Laatst online: 13:16
Ik adviseer je om de volgende link eens goed te lezen, hier staat duidelijk uitgelgegd hoe het file uploaden in PHP werkt.
Succes !

Stability ?? My Atari still has it :)


  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 16-08-2025

TheLunatic

Ouwe boxen.

En kijk eens wat er in je $_POST array zit met een print_r($_POST); ... Voordat je spul gaat wegschrijven naar een database is het handiger om te kijken wat voor waarden er in je variabelen zitten, debuggen dus...

Volgens mij krijg je trouwens een array $_FILES terug bij het uploaden van een bestand, dus print_r die ook eens.

Mother, will they like this song?


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:06

Janoz

Moderator Devschuur®

!litemod

Het probleem is hier duidelijk niet 'de filenaam uiteen string halen', maar het compleet niet begrijpen hoe een fileupload in elkaar zit. Ik raad je aan om eerst maar eens de door Atari Paul gegeven link door te lezen. Daarin staat keurig uitgelegd hoe een file upload werkt.

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

Pagina: 1

Dit topic is gesloten.