dirmhirn
Goto Top

Dateipfad mit PHP einlesen

Wie kann ich denn auch den Dateipfad einer Datei speichern, wenn ich sie per post mit PHP übertrage?

HI!

Ich würde gerne in eine DB lokale Dateipfade eintragen.

<form action="test.php" method="post" enctype="multipart/form-data">  
     <input type="hidden" name="ID" value=$row->part_id>  
     <input name="Datei" type="file" size="10"><br>  
     <input type="submit" value="OK">  
</form>

kann ich dann mit

$datei = $_FILES["Datei"]["name"] ;  


leider nur den Dateinamen auslesen.

hätte aber gerne den ganzen Pfad. ob relativ oder absolut wäre einmal egal.

Gibt es hier eine Möglichkeit?

lg Dirm

Content-Key: 90068

Url: https://administrator.de/contentid/90068

Printed on: April 18, 2024 at 05:04 o'clock

Member: vbMaxi
vbMaxi Jun 17, 2008 at 18:22:46 (UTC)
Goto Top
hey Dirmhirn,
des kommt drauf an wo dein php script die Files hin lädt. Schon hast du den Pfad ich erklär das mal kurz an nem Beispiel:
Das PHP Script zum Uploaden:
<?php

   // Prüfen des Array $_FILES
   if (isset($_FILES["datei"])) {  

   // Upload-Status
   if ($_FILES["datei"]["error"] == UPLOAD_ERR_OK) {  

   // Muster zur Überprüfung der im Dateinamen
   // enthaltenen Zeichen
   $regExp = "/^[a-z_]([a-z0-9_-]*\.?[a-z0-9_-])*\.[a-z]{3,4}$/i";  

   // Dateiname und Dateigrösse
   if (preg_match($regExp,$_FILES["datei"]["name"]) && $_FILES["datei"]["size"] > 0 && $_FILES["datei"]["size"] < 10000000) {  

   // Temporäre Datei in das Zielverzeichnis
   // des Servers verschieben.
   move_uploaded_file($_FILES["datei"]["tmp_name"],"images/".$_FILES["datei"]["name"]);  
   
   //ErfolgsMeldung ausgeben
   //echo "Dateiupload erfolgreich abgeschlossen"; 
   header("Location: alle_grafiken.php");  
   }else {
      echo "Fehler: Im Dateinamen oder Dateigrössen Limit!";  
   }
   }else {
      echo "Fehler: Während der Übertragung aufgetreten!";  
   }
   }else {
      echo "Fehler: Dateiupload fehlgeschlagen!";  
   }

?>

Wichtig ist folgende Zeile:
move_uploaded_file($_FILES["datei"]["tmp_name"],"images/".$_FILES["datei"]["name"]);  

Hier wird der relative/absolute Pfad angegeben. Binde ihn einfach in den SQL-Befehl ein und fertig.

mfg Maxi
Member: Dirmhirn
Dirmhirn Jun 18, 2008 at 06:43:58 (UTC)
Goto Top
HI!

hm nein es geht nicht um einen Datei upload. Die daten liegen intern schon am Server. Gedacht ist es jetzt eine Teileliste zu erstellen und dort die ganzen bilder verlinken, ohne sie neu abzuspeichern.

Also ein Button auf den ich klicken kann, --> Datei auswählen --> Pfad+Dateiname in DB ablegen.


Haben jetzt aber nocheinmal besprochen und werden wahrscheinlich doch alle Datein neu abspeichern. Dadurch könnten wr unsere daten gleich zentralisieren - was auch nicht schadet face-wink

Das mit dem Pfad würde mich aber trotzdem noch interessieren.

lg Dirm
Member: vbMaxi
vbMaxi Jun 19, 2008 at 14:03:52 (UTC)
Goto Top
achso jetzt hab ich verstanden wo der hammer hängt^^ ok ich werd mal schaun, ob ich da was find face-wink

lg Maxi
Member: Arano
Arano Jun 22, 2008 at 00:29:07 (UTC)
Goto Top
Hm... wen sie schon auf dem Serve sind, kannst du sie doch sicher auch auslesen !? ..klar, sonst wüsstest du ja nicht welche Bilder eingetragen werden können face-smile
<?php
 $img_dir="/struktur/teile/images";  
 $images =dir($img_dir);
 $x      =0;
 while($img=$images->read()){
  echo '<input id="i_'.$x++.'" type="checkbox" name="img_to_save_in_db" value="'.$img_dir.'/'.$img.'">  
        <label for="i_'.$x.'">'.$img.'</label>';  
 }
?>
Naja, oder du verpackst es eben in einem <select>:
<?php
 echo '<select name="image_to_save_in_db">';  
 while(){
  echo '<option value="'.$img_dir.'/'.$img.'">'.$img.'</option>';  
 }
 echo '</select>';  
?>

Schönen Gruß Arano
Member: Dirmhirn
Dirmhirn Jun 22, 2008 at 12:40:28 (UTC)
Goto Top
Hallo

hmm, ist eine interessante Idee. Der <select>-Befehl gefällt mir. (Nein mit Formularen und HTML-habe ich leider noch nichts gemacht-..)
Diese Methode wäre dann praktisch um Bilder zu ändern.


Das Problem ist halt dass die Bilder derzeit weit verstreut in diversen Unterverzeichnissen liegen und zwischen durch auch Bilder von anderen Dingen. Da wären die Listen recht lang und man findet nichts.
(Oder verstehe ich den Code ganz falsch?!)

Was ich genau suche:
Eine Möglichkeit um diese Variable, per Browser (also wie diese "Datei speichern"-Dialoge) füllen kann. Also Button drücken --> Datei(oder auch nur Verzeichnis, mit der obigen Methode könnte ich ja dann alle Nilder auslesen) auswählen --> Pfad in Variable speichern.
 
$img_dir="/struktur/teile/images";  

lg Dirm
Member: vbMaxi
vbMaxi Jun 22, 2008 at 15:08:27 (UTC)
Goto Top
Ho Dirm,
irgendwo muss doch der pfad schon angegeben sein, sonnst könnte der server die bilda ja nicht ausliefern oder???

lg Maxi
Member: Dirmhirn
Dirmhirn Jun 22, 2008 at 16:19:02 (UTC)
Goto Top
na es geht ja nicht ums ausliefern. Also:

ein datei server:
daten
+-+Preojekt1
| +--Bilder
| +--CAD-Drwings
+-+Preojekt2
| +--Pictures
| +--CAD-Drwings
| +--Testing
+--+--Spezial_projekte
| +-+Preojekt3
| +--Bilder_neu
| +--CAD-Drwings
+--+www
+test.php

Daten und Webserver liegen auf einer Partition. Die Bilder sind bunt in Ordner verstreut (keine klare Struktur)

Ich will jetzt in dem Skript test.php, den Ordner "/Projekt2/Pictures/" auswählen können.
Mit einem Benutzerdialog, also dass der Benutzer einfach den Ordner grafisch auswählen und dann auf laden/speichern/... drücken kann.


Ob ich das Bild dann lade und im Webordner auch noch ablege ist ja egal.
(Ist so mal nur für ein Intranet gedacht, bevor ihr da erschreckt wegen Sicherheit)

lg Dirm
Member: Arano
Arano Jun 22, 2008 at 21:55:01 (UTC)
Goto Top
Jo, alles in einer liste kann lang werden ! Aber das heißt ja nicht das man es auch nur so machen kann face-wink

Übersicht kannst du ja schaffen, indem du es in z.B. drei Schritten machst.

__1. Das Hauptselect__
Ein <select> das alle Projekte auflistet.
__1.1 Der erste Teil__
Auslesen der Ordner aus "daten", der Ordner "Spezial_projekte" wird __ausgelassen__
__1.2 Speizial_projekte__
Eine <optiongrp> die alle Spezialprojekte enthält.

Nun einen "weiter"-Button oder das "onchange" im <select>

__2. Die Unterordner des Projekts__
Ein weiteres <select> das die Unterordner des Projektes enthält. (hier kann man vielleicht ja die ganze Ordnerstruktur abbilden)

Und wieder einen "weiter"-Button oder das "onchange" im <select>

__3. Die Bilder des Projektes / gewählten Ordners__
Das dritte <select> mit allen Bilden des ausgewählten Projektes/Ordners.

Nun der "Speichern"-Button worauf der Hauptpfad des Projektes (select 1), die Unterordner (select 2) und der Name des Bildes (select 3) an den Server geschickt wird.
Der wird es nun in die DB eingetragen und evtl. an einen neuen Ort kopiert.

Die "onchange" habe ich deshalb erwähnt weil man mit ihnen die Inhalte des gewählten Projektes bzw. Unterordner schnell per AJAX in das nachfolgende <select> schreiben kann. (dann muss man nicht immer auf den "weiter"-Button klicken)


Es neu an den Server schicken kann doch nur funktionieren, wenn du direkt am Server sitzen würdest !
Schließlich kannst du mit dem <input file> ja nur Dateien des lokalen Systems auslesen, die dann (nur die Datei) an den Server geschickt wird.


Schönen Gruß Tobias