3.7k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von tomham Mitglied (407 Punkte)
Hallo Leute.

Ich habe in der Firma eine Seite gemacht in der wir unsere PCs verwalten.
Soweit läuft alles, nur möchte ich nun den Pfad zu den Lieferscheinen (welche eingescannt wurden) auch in der DB speichern.

Wenn ich den Pfad über

<tr><td>Lieferschein</td><td><input name="lsfile" type="file" size="150"></td></tr>

"eingebe" und übers Formular dann weitergeben möchte, beinhaltet die Variable "lsfile" nachm POST nur noch den Dateinamen ohne Pfad.
Wie kann ich da den Pfad mitübergeben (wenn möglich gleich mit / statt \) ?

Danke im Voraus!
LG Tom

11 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
das geht (soweit ich weiss) über das <input type="file"> nicht.

Der Benutzer muss den Pfad über ein text input selbst eingeben.
0 Punkte
Beantwortet von tomham Mitglied (407 Punkte)
Dachte ich mir schon ...
Wie kann ich dann allerdings die &#92; in / umwandeln ?
Hätte das mit strtr versucht, allerdings bekomm ich da von &#92; immer // zurück und von / immer &#92;&#92; ... also immer doppelt ...
Hätte auch schon versucht dass ich den &#92; bzw. / auf ein ! austausche und in die DB schreibe, aber auch hier habe ich dann !! im Eintrag stehen ... und wenn ich die !! umwandeln will in / habe ich //// stehen ...
Habe das Problem mit strtr und str_replace ...
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
ich würde auf jeden fall so früh wie möglich in / umwandeln.

zeig mal deinen str_replace code.
0 Punkte
Beantwortet von anowack Einsteiger_in (13 Punkte)
Hey tomham,

ich hoffe doch, dass du diese EIngaben escapst, also überprüfst ob jemand etwas Falsches eingibst. Ansonsten sind Path-Traversal-Attacken einfach möglich ;). So könnte jemand vielleicht die /etc/passwd überschreiben, oder sich andere private Dateien anzeigen lassen.
0 Punkte
Beantwortet von tomham Mitglied (407 Punkte)
$lsfile=str_replace("\","!",$lsfile);
$lsfile=str_replace("/","!",$lsfile); /* bevor ich in die DB schreibe auf ! umwandeln */

wobei $lsfile die Pfadangabe für einen Lieferschein beinhaltet ...
@anowack: is mir eigentlich egal, weil du sowieso erst mal ein Zertifikat brauchst um auf die Seite zugreifen zu können, ausserdem ist das nur für unser Büro intern wo nicht mal andere Büros drauf Zugriff haben (htaccess am Apache) ... weiters ist es auf nem Windows mit xampp und da gibts keine /etc/passwd ;-)
0 Punkte
Beantwortet von anowack Einsteiger_in (13 Punkte)
@tomham

Ich wollte es nur erwähnen, sicher ist sicher. Gut, ich werde jetzt nichts über xampp in einem Live-Environment sagen, da es hier sicher vollkommen in Ordnung ist... oder arbeitest du bei der Polizei? :3

Also in dem Code kann ich kein Fehler erkennen, PHP ist aber auch nicht meine Stärke...
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
ich glaube bei php muss man die backslashes auch escapen, also:
$lsfile=str_replace("\\","!",$lsfile);
statt
$lsfile=str_replace("\","!",$lsfile);

wobei ich nicht verstehe, warum es ein Ausrufezeichen sein muss, aber das mag ja seine Gründe haben.
Wenn das Feld in der Datenbank vom Typ Text (oder string) ist, sollte der forward slash funktionieren, glaub ich. allerdings kenne ich mich auch nicht gut mit den im web üblichen datenbanken aus.
0 Punkte
Beantwortet von tomham Mitglied (407 Punkte)
@anowack: für mich tuts das ... soll nur unsere "Geräteverwaltungsdatenbank" sein ...
@ kicia: stimmt, war ein tippfehler von mir, allerdings funktioniert das auch ned -.-
das Rufzeichen habe ich gewählt, da er im mysql keine \ zulässt und stattm / ein Sonderzeichen einfügt das ich nicht wieder zurückwandeln kann ...
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
da er im mysql keine \ zulässt

das bezweifle ich nicht

stattm / ein Sonderzeichen einfügt

versuche mal herauszufinden, welches sonderzeichen (den ascii code, bzw. charcode, bzw. unicode)

möglicherweise kannst du das doch zurückwandeln.

allerdings funktioniert das auch ned

was passiert denn?
wie sieht der text in der datenbank aus?
wie sieht der code zum zurückwandeln aus?
wie sieht der zurückgewandelte code aus?
0 Punkte
Beantwortet von tomham Mitglied (407 Punkte)
naja, das mitm Sonderzeichen kann ich ned auslesen ... ist ein komisches Viereck, das hat etwa 50 verschiedene ASCII-Codes ...

Der Text zum zurückwandeln sieht so aus:
$lsfile=str_replace("!","/",$lsfile);


Eingegeben wird so: C:/Temp/Datei.pdf
In der DB sieht es so aus: C:!!Temp!!Datei.pdf
Nachm zurückwandeln siehts so aus: C:////Temp////Datei.pdf

Bin echt ratlos, da ich ja nur ein Zeichen umwandle und dann plötzlich alle Zeichen doppelt vorhanden sind ...
...