upload + datenbank
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
beitrag
byte
date
datei
dateiname
daten
fehlermeldung
formular
fragen
gleiche datei
gre
hochladen
kommentar
laufzeit
letzte
meinst
result
schreibfehler
speicher
zeile
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
1: Zum Testen, ob man hier uploaden kann:
<?php echo "Uploads zugelassen: " . get_cfg_var("file_uploads") . "<br>"; echo "Max. Upload Größe (Dateigröße der hochzuladenen Datei): " . get_cfg_var("upload_max_filesize") . "<br>"; echo "Max. Script Speicher (Speicher den ein Script benutzen darf): " . get_cfg_var("memory_limit") . "<br>"; echo "Max. \"post\" Daten (Menge an Daten die per \"post\" übermittelt werden): " . get_cfg_var("post_max_size") . "<br>"; echo "Max. Laufzeit (Zeit des Ausführens eines Scripts): " . get_cfg_var("max_execution_time") . " Sek"; ?>
2: Tabelle erstellen:
<?php //Verbindung mit Mysql: (Die Daten ersetzen oder irgendwo definieren) @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error()); mysql_select_db(MYSQL_DATABASE) OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error()); $sql = "CREATE TABLE namen ( ID INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(60) );"; $result = mysql_query($sql) OR die(mysql_error()); ?>
3: Formular zum Datei hochladen:
<form action="upload.php" method="post" enctype="multipart/form-data" name="upload"> <input type="text" name="name"> <input type="file" name="file"> <input type="submit" name="submit" value="Upload"> </form>
4: Datei upload.php
<?php // Variabeln festlegen $max_byte_size = 2097152; $allowed_types = "(jpg|jpeg|gif|bmp|png)"; // Formular wurde abgeschickt if($_POST["submit"] == "Upload") { // Wurde wirklich eine Datei hochgeladen? if(is_uploaded_file($_FILES["file"]["tmp_name"])) { // Gültige Endung? ($ = Am Ende des Dateinamens) (/i = Groß- Kleinschreibung nicht berücksichtigen) if(preg_match("/\." . $allowed_types . "$/i", $_FILES["file"]["name"])) { // Datei auch nicht zu groß if($_FILES["file"]["size"] <= $max_byte_size) { // Alles OK -> Datei kopieren if(copy($_FILES["file"]["tmp_name"], $_FILES["file"]["name"])) { echo "Datei erfolgreich hochgeladen!<br>"; echo "Name: " . $_FILES["file"]["name"] . "<br>"; echo "Größe: " . $_FILES["file"]["size"] . " Byte<br>"; echo "MIME-Type: " . $_FILES["file"]["type"] . "<br>"; echo "Link: <a href=\"" . $_FILES["file"]["name"] . "\">" . $_FILES["file"]["name"] . "</a>"; } else { echo "Datei konnte nicht hochgeladen werden."; } } else { echo "Die Datei darf nur eine Größe von " . $max_byte_size . " Byte besitzen."; } } else { echo "Die Datei besitzt keine ungültige Endung."; } } else { echo "Keine Datei zum Hochladen angegeben."; } } else { echo "Bitte benutzen Sie das Upload Formular."; } //Jetzt noch in der DB-Speichern //Verbindung mit Mysql: (Die Daten ersetzen oder irgendwo definieren) @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error()); mysql_select_db(MYSQL_DATABASE) OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error()); $sql = "INSERT INTO uploads (name) VALUES ('".$_POST['name']."');"; $result = mysql_query($sql) OR die(mysql_error());
Edit: Hier noch ein paar Infos zum Upload: http://www.it-academy.cc/article/1359/PHP:+Upload+per+HTTP.html
Beitrag geaendert: 7.4.2007 12:34:30 von nigolaz -
dankeschön, werde ich mir mal anschauen :)
-
theoretisch würd' ich ihm ja mit diesem Script Recht geben,
aber in der Datei upload.php in Zeile '3' ist ihm ein schreibfehler unterlaufen (hehe) -
wo bitte? in upload.php in zeile 3 steht ein kommentar, und der kommentar ist korrekt.
-
Ich hab gleich noch ne frage...
wie mache ich das, ne datei nicht zwei mal vorkommt, also z. b. unbenannt wird? -
Du könntest allgemein an alle hochgeladenen Datein noch einen Timestamp dranhängen, somit kommt kein Name zweimal vor. Oder nicht den Timestamp direkt, sondern vll das aktuelle Datum, was wohl übersichtlicher ist.
Allerdings musst du dafür erst die Endung "abschneiden" und dann wieder dransetzen
Also irgendwie so
<? $file=$_FILES['file']['name']; $name=substr($file,0,-(strrpos($file,'.'))-1); // sucht nach dem letzten . und schneidet alles danach ab $type=strrchr($file,'.'); // sucht nach dem letzten . und schneidet alles davor ab $datum=date('_H_i_d_m_Y',time()); // Datum im Format _Stunde_Minuten_Tag_Monat_Jahr if(copy($_FILES['file']['tmp_name'], $name.$datum.$type)){ //... ?>
Beitrag geaendert: 9.4.2007 14:39:09 von tct -
Meinst du das nicht 2 mal die gleiche Datei hochgeladen wird, oder das nicht 2 mal eine Datei mit dem gleichen Namen hochgeladen wird?
MFG -
Meinst du das nicht 2 mal die gleiche Datei hochgeladen wird, oder das nicht 2 mal eine Datei mit dem gleichen Namen hochgeladen wird?
MFG
das nicht zweimal eine datei mit gleichem namen im ordner ist, das führt ja zu verwirrung *g*
@tct:so mein ichs .. ich kucks mir mal an. Oder so ... -
Ahh noch ne frage, wie gebe ich an wo hin die datei kommt?
-
Versuch mal:
copy($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name'])
--> http://ch2.php.net/manual/de/function.copy.php
EDIT: In upload.php, Zeile 20
Beitrag geaendert: 11.4.2007 23:41:02 von nigolaz -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage