Wird häufiger mal nachgefragt und damit wir dann immer nen schönen Link zur Hand haben, schreibe ich dieses Tutorial
Für Tipps, Fehler, Verbesserungen und so weiter bin ich natürlich offen, postet einfach hier
Das ist mein erstes Richtiges Turorial also nit zu streng mit mir sein
Was soll das Script alles leisten ?
1. Ein Formular bereitstellen, mit dem die Datei ausgewählt werden kann
2. Die Datei in einen bestimmten Ordner hochladen
3. Den Namen des Uploaders und den Pfad in einer Textdatei/MySQL-Tabelle speichern (optional)
Ich werde alle wichtigen Funktionen des Script erklären, aber ich setze voraus, das bekannt is, wie Schleifen, Bedingungen und so weiter funktionieren..
Also Voraussetzung ist eine gewisse PHP-Grundkenntnis.
1. Das Formular (upload1.php):
<form action="upload2.php" method="post" enctype="multipart/form-data" name="Upload-Form">
<table><tr><td>
Bild</td><td>
<input type="file" name="bild" size="30">
</td></tr><tr><td height="5"></td></tr><tr><td>
Upper</td><td>
<input type="text" name="upper" size="30">
</td></tr></table>
<input type="submit" name="submit" value="Hochladen!">
<input type="reset" name="reset" value="Zurücketzen!">
</form>
Alles anzeigen
damit ist das Formular auch schon fertig...
Zitatenctype="multipart/form-data"
das ist notwendig, damit erkannt wird, dass Files mit gesand werden...
file hat ausserdem einen eigenen Input-Typ, womit automatisch auch der Durchsuchen-Button erscheint und ein Feld in dem der Pfad steht.
2. Das Script (upload2.php):
Files werden wie die anderen POST-Daten in einem array gespeichert, doch heisst dieses Array $_FILES[][] und ist Zweidimensional, wodurch mehrere Files mit einem Formular geuppt werden können...
$_FILES['input_name']['name etc'] ist der Aufbau.
mehr dazu HIER.
nun zum code:
<?php
## Einstellungen:
$max_size = "300000"; //In Bytes
$ordner = "upload"; //In den Ordner wird das Bild geladen
$save = true; //false wenn der Bildpfad nicht gespeichert werden soll
$save_typ = "text"; // "datenbank" oder "text" hier eintragen
$save_name = "upload"; /*Name des Textfiles/der MySQL-Tabelle, in
dem die URL zum Bild gespeichert werden soll.
Wenn Text gewählt ist, wird die Datei angelegt, wenn sie nicht existiert*/
## Zur Datenbank connecten, wenn nötig
if($save_typ == "datenbank") {
$dbh=mysql_connect("localhost","............","..........");
mysql_select_db("db_name",$dbh);
}
## Bild-Daten werden aus $_FILES "geholt"
$bild_typ = $_FILES['bild']['type'];
$bild_groesse = $_FILES['bild']['size'];
$bild = $_FILES['bild']['tmp_name'];
$bild_name = $_FILES['bild']['name'];
$upper = $_POST['upper'];
## Überprüfe, ob alle Kriterien erfüllt
## Hier kann alles Mögliche ausgetauscht werden
if(($bild_groesse <= $max_size) && ($bild_typ == "image/gif" ||
$bild_typ == "image/jpg" || $bild_typ == "image/jpeg" ||
$bild_typ == "image/png" || $bild_typ == "image/pjpeg")) {
/* Hier nichts ändern, wenn man nicht weiss was man tut ^^ */
$dest = $ordner."/".$bild_name;
if(move_uploaded_file($bild, $dest)) {
## Pfad soll nicht gespeichert werden
if(!$save) {
echo "Das Bild wurde erfolgreich hochgeladen
";
echo "Ordner: ".$ordner."
";
echo "Name: ".$bild_name."
";
echo "Typ: ".$bild_typ."
";
}
## Pfad wird gespeichert
else {
if($save_typ == "datenbank") {
mysql_query("INSERT INTO ".$save_name." SET upper = '".$upper."', bild = '".$bild_name."'");
}
else {
$sn = $save_name.".txt";
$insert = $dest."|".$upper."\n";
$datei = fopen($sn, "a+"); //zum schreiben und ans ende der Datei
$inhalt = fread($datei, filesize($sn));
$inhalt .= $insert;
fwrite($datei, $inhalt);
fclose($datei);
}
echo "Das Bild wurde erfolgreich hochgeladen
";
echo "Ordner: ".$ordner."
";
echo "Name: ".$bild_name."
";
echo "Typ: ".$bild_typ."
";
}
}
}
else {
if($bild_groesse > $max_size) {
echo "Das Bild ist zu groß";
}
else {
echo "Die Datei muss ein Bild sein
";
echo "Typ: ".$bild_typ;
}
}
?>
Alles anzeigen
OK, das wars eigentlich, an unteren code muss eigentlich nichts verändert werden und ich glaube das meisste erklärt sich von alleine
ich werde hier jetzt nicht jede einzelne funktion beschreiben, das ganze kann man wunderbar unter
http://www.php.net nachlesen
vll kann mir hier noch jemand helfen, es wäre natürlich schöner mit preg_match die typ-abfrage zu machen, aber ich hab mir noch nicht so mit reg. ausdücken / preg_match beschäftigt
ausserdem bin ich mir bei dem eintrag in die files nicht sicher, da ich lange nicht mehr damit gearbeitet habe
aber dafür seit ihr ja da, meine fehler berichtigen
ich werde das ganze bei gelegenheit noch mal als .zip oder .rar auf meinen space hochladen (mit diesem script )
ich glaub der upload sollte damit funktionieren, ich hab im mom leider keine möglichkeit das zu testen, werds aber nachholen (vieles is so frei hand geschrieben...)
is ja doch ganz schön was zusammengekommen und ich behaupte einfach mal, dass es nicht zu schwer zu verstehen ist
mfg
*Updated
*Läuft nu
** neustes update, für alle die das Problem haben, dass die hochgeladene datei nicht heruntergeladen werden kann etc !!!
-->
folgende zeilen finden :
/* Hier nichts ändern, wenn man nicht weiss was man tut ^^ */
$dest = $ordner."/".$bild_name;
if(move_uploaded_file($bild, $dest)) {
und damit ersetzen !!