Upload Script: Ordner erstellen

nchristoph

Erfahrenes Mitglied
Hallo zusammen,

Ich bin gerade am erstellen eines Uploadscripts, welches so weit so gut eigentlich schon funktioniet.

Eine Sache krieg ich nicht zum laufen: Der Ordner wird ja Anhand von Verschiedenen Parametern ausgewählt. Wenn ein Pfad jetzt nicht Existiert, dann krieg ich eine Fehlermeldung.

Wie kann ich das vorhandensein des Pfades testen und gegebenenfalls den Pfad erstellen?

Hier mal mein Script bis jetzt:

PHP:
<?php

$holzart = $_POST['holzart'];
$starke = $_POST['starke'];
$klasse = $_POST['klasse'];
$trocken = $_POST['trockenheit'];
$partie = $_POST['partienummer'];
$kubik = $_POST['kubik'];
$hauptl = $_POST['hauptlange'];
$liste = $_FILES['massliste'];

echo("/Masslisten".$holzart."/".$klasse."/".$starke."/".$trocken."/".$liste."<br/>");

echo("Partienummer:".$partie."<br/>");
echo("M3:".$kubik."<br/>");
echo("Hauptlänge".$hauptl."");


if (isset($_FILES['massliste']) and ! $_FILES['massliste']['error']) {
    // Alternativ:            and   $_FILES['probe']['size']
   move_uploaded_file($_FILES['massliste']['tmp_name'], "./Masslisten/".$holzart."/".$klasse."/".$trocken."/".$starke."/".$partie.".pdf");
}
?>

mfg
 
Anhand Deiner Ordner-Variablen überprüfst Du, ob es existiert. (is_dir()), Wenn nicht, dann erstellst Du es, in Deinem Fall sollte es zwangsläufig rekursiv sein, was seit php5 gehen sollte (mkdir()).

Thema Sicherheit, übergib keine POST oder GET-Daten ungeprüft zur Ausführung!

mfg chmee
 
Danke chmee,

zum Thema Sicherheit: Das ganze ist ein Abteilungsinternes Script und da bin ich der einzige, der mit Code was anfangen kann. Der Server, wo das Script nacher drauf läuft, ist ein reiner Netzwerkserver ohne Internetanbindung.

Ich werds mir aber zu merken.
 
nchristoph: Das ist das falsche Argument, sorry. Blindes Vertrauen gegenüber den Mitarbeitern ist weder großherzig noch -unter geschäftlichen Attributen- nötig.

Trauriger Spitzenreiter ist dabei der Datenklau durch Mitarbeiter eines Unternehmens
http://www.compliancemagazin.de/complianceservices/beratung/convista-consulting070211.html

Ich dreh aber das Argument des unwissenden Mitarbeiters mal um: Jener ist sich nicht im Klaren, wie wichtig eindeutige Eingaben sind und kann das System zum Stolpern bringen. Auch da ist es wichtig, wenn es eine Überprüfung der Eingabe -und vor Allem eine Rückmeldung über die Art des Fehlers gibt.

mfg chmee
 
Zuletzt bearbeitet:
Ok Überzeugt.

Ich versuch mal mein schlechtestes:P

Danke erstmal

//edit

PHP:
<?php

$holzart = $_POST['holzart'];
$starke = $_POST['starke'];
$klasse = $_POST['klasse'];
$trocken = $_POST['trockenheit'];
$partie = $_POST['partienummer'];
$kubik = $_POST['kubik'];
$hauptl = $_POST['hauptlange'];
$liste = $_FILES['massliste'];

echo("/Masslisten".$holzart."/".$klasse."/".$starke."/".$trocken."/".$liste."<br/>");

echo("Partienummer:".$partie."<br/>");
echo("M3:".$kubik."<br/>");
echo("Hauptlänge".$hauptl."");

$pfad = ("./Masslisten/".$holzart."/".$klasse."/".$trocken."/".$starke."/");
$pfad1 = ("./Masslisten/".$holzart."/".$klasse."/".$trocken."/".$starke."/".$partie.".pdf");

if (isset($_FILES['massliste']) and ! $_FILES['massliste']['error']) {
	if(!is_dir($pfad)){
	mkdir($pfad,0, 0777);
	}
    // Alternativ:            and   $_FILES['probe']['size']
   move_uploaded_file($_FILES['massliste']['tmp_name'], "./Masslisten/".$holzart."/".$klasse."/".$trocken."/".$starke."/".$partie.".pdf");
}

$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("suchmaschine", $con);

$sql="INSERT INTO Suchmaschine (Holzart, Klasse, Trockenheit, Partie, Kubik, Hauptlange, Starke, Pfad)
VALUES
('$holzart','$klasse','$trocken','$partie','$kubik','$hauptl','$starke','$pfad1')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con)
?>
Hier ist mein fast fertiges Script. Ich komm nicht drauf, wie ich meine $_Post prüfen soll. Kann mir wer auf die Sprünge helfen?

Achja: was ist besser: mysql_real_escape_string oder mysql_escape_string? Das ist der Grund, warum ich es noch nicht eingebaut hab.
 
Zuletzt bearbeitet:
Es gibt viele Möglichkeiten

(A) Eingaben überprüfen, indem man zB mit Regex den Zeichenvorrat begrenzt oder sogar den Aufbau der Eingabe vorgibt und überprüft.

Links:
google Ergebnisse
Eingabe mit Echtzeitüberprüfung mittels Ajax

(B) die Weitergabe an verarbeitende Funktionen entschärfen, dass keine Fehler aufkommen - oder sogar unerwünschte/beschränkte Informationen ausgeworfen werden.

Links:
SQL-Injection - http://de.wikipedia.org/wiki/SQL-Injection
real escape - http://php.net/manual/de/function.mysql-real-escape-string.php (Injection-Beispiel inne)
mysql_escape_string() ist seit php4.3 deprecated, also veraltet und sollte nicht mehr benutzt werden.

Das Thema ist so lang wie es breit ist, in aller Kürze kann man nicht alles sagen :)
mfg chmee
 
Ok ich hätte vielleicht erwähnen sollen, das Holzart, Stärke, Trockenheit und Klasse Dropdownmenüs sind.

Da kann man ja nicht viel falsch machen bei der Eingabe, mit Ajax steh ich auf Kriegsfuss, liegt aber wahrscheinlich auch dran, das ich 0 Ahnung von Javascript hab.

Danke für die Links chmee, ich werd mich da mal dransetzen.
 
Hi

noch ergänzend dazu: Auch die Dropdown-Auswahl muss geprüft werden, weil:
Wer garantiert denn, dass niemand unabhängig vom Browser über ein eigenes Programm ungültige Werte verschickt?
 
Es ist gerade ein Problem aufgetreten:

Ich entwickle mit Xampp, der Server ist aber IIS. Local funktioniert alles einwandfrei, auf dem Server will er allerdings nicht die Datei kopieren.

PHP:
if (isset($_FILES['massliste']) and ! $_FILES['massliste']['error']) {
	if(!is_dir($pfad)){
	mkdir($pfad,0, 0777);
	}
    // Alternativ:            and   $_FILES['probe']['size']
   move_uploaded_file($_FILES['massliste']['tmp_name'], "./Masslisten/".$holzart."/".$klasse."/".$trocken."/".$starke."/".$partie.".pdf");
}

Upload_tmp_dir ist bei mir c:\temp.

Kann es sein, das ich da irgendwo falsche Einstellungen gemacht hab bei PHP oder beim Server direkt oder funktioniert der Code unter IIS nicht?

Es kommt keine Fehlermeldung, auch wenn ich E_Reporting einschalte.
 
Zurück