Probleme beim Upload
Negro
- php
Hallo zusammen,
ich habe ein Problem. Und zwar habe ich eine kleine Artikeldatenbank (MySQL). Nun möchte ich zu jedem Artikel den ich eingebe auch ein Bild in die Datenabank laden bzw. eingeben.
Also, natürlich sollten die Bilder nicht direkt in der DB gespeichert werden, sondern in dem Ordner "img_news" auf dem Webserver. Ledilich der Pfad zu den Bildern bzw. der Dateiname soll in der DB gespeichert werden.
Bisher hat meine Datenbank (db_News) folgende Tabelle (tblnews). Die Tabelle hat folgende Felder:
Nur jetzt weiss ich nicht mehr weiter. Die Bilder bekomme ich zwar hochgeladen, allerdings was ist mit dem Pfad in die Datenbank und der Ausgabe der Datensätze mit den dazu passenden Bidlern? Wie mache ich das denn dann ?
Hier mal mein Upload-Code: Ist der Eurer Meinung nach so in Ordnung ?
<html>
<head>
<title>Neues Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$filepath = $DOCUMENT_ROOT."/img_news/";
if ($upfile_name != ""){
if (!file_exists($filepath.$upfile_name)){
if (copy($upfile, $filepath.$upfile_name)){
echo "Datei gespeichert!";}
else {
echo "Upload fehlgeschlagen!";}
}
else {
echo "Datei bereits vorhanden.";
}
}
echo "<hr>";
unset($files);
if ($dh = opendir($filepath)){
while ($file = readdir($dh)){
if (!ereg("^.+$",$file)){
$files[] = $file;}
}
closedir($dh);
}
if (is_array($files)){
sort($files);
reset($files);
foreach($files as $file){
echo $file, "<br>";
}
}
$webpath = "upload/";
if (is_array($files)){
echo "<table border="0" cellpadding="2" cellspacing="0" width="100%">\r\n";
echo "<tr bgcolor="#EEEEFF">";
echo "<th>Datei</th>";
echo "<th>Größe</th>";
echo "<th>Datum</th>";
echo "<th colspan="2">Aktionen</th></tr>\r\n";
natcasesort($files);
reset($files);
foreach ($files as $idx=>$file){
if ($idx % 2){
echo "<tr bgcolor="#EEEEFF">";
}
else{
echo "<tr bgcolor="#FFFFFF">";
}
printf ("<td><a href="%s%s" target="_blank">%s</a></td>", $webpath, $file, $file);
printf ("<td align="right">%s Bytes</td>", number_format(filesize($filepath.$file), 0, ",", "."));
printf ("<td align="center">%s</td>", date("d.m.Y H:i:s", filemtime($filepath.$file)));
printf ("<td><a href="%s?file=%s">Löschen</a></td>","delete.php", $file);
printf ("<td><a href="%s?file=%s">Umbennenen</a></td>", "rename.php", $file);
}
echo "</table>";
}
?>
<hr>
<form action"upload,php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="25000">
<input type="file" name="upfile">
<input name="submit" type="submit" value="Hochladen">
</form>
</body>
</html>
Ich weiss, das Thema ist schon so oft gestellt worden und ich habe mich auch schon hier im Forum sowie auf anderen Seiten im Web umgesehen, aber als Anfänger fehlt mir einfach der Durchblick für dieses Problem mit dem Upload.
Wer könnte mir da weiterhelfen ? Bedanke mich schon jetzt für jeden Tipp !
MFG
Negro
Hallo,
ich würde sagen du musst ja den Pfad des Bildes in die DB schreiben also:
$image = $DOCUMENT_ROOT."/img_news/".$image_name;
$Query = "INSERT INTO tblnews (Bildpfad) ";
$Query .= "VALUES ('$image')";
mysql_query ($Query) or die ("Insert Failed!");
jetzt ist das Verzeichnis und der Dateiname des Bildes in der DB!
Dann musst du ihn natürlich noch auslesen aber dass sollte kein Problem weden!
samy,
Hello,
da sind mir gleich so viele Dinge aufgefallen, dass ich 90% schon weider vergessen habe. Ich versuchs trotzdem mal:
1. Überarbeite das Script mit "register_globals = off".
2. benutze wenigstens das Filearray $_FILES
3. kontrolliere, was man Dir da hochlädt.
mit get_imagesize()
http://de3.php.net/manual/de/function.getimagesize.php
stellt PHP huier schon ein mächtiges Werkzeug zur Verfügung
Wichtig sind der Filetyp den DIE FUNKTION liefert und die
Dateieindung. Beides sollte der Wahrheit entsprechen, wenn Du nicht
verkappte *.php oder *.exe oder Unix-ausführbare Dateien o.ä.
auf den Server haben willst
4. Der Pfad zu den Bildern gehört nicht in die Bildtabelle derDB.
Der gehört in die Konstantendefinitionsdatei des jeweiligen Projektes,
wenn er für alle Bilder dieser DB gleich ist, oder aber in eine
separate Tabelle, sollte es z.B. Bildklassen geben, die jeweils
eigene Verzeichnisse haben
5. Schreib den Bildnamen des Users mit in die Tabelle
vergib zusätzlich einen Fantasienamen: "B_".$zufallstring
http://de3.php.net/manual/de/function.srand.php
Du ersparst Dir aufwändige Zugriffskontrollen auf das Bildverzeichnis,
wenn Du später in die Image-Tags für alle "öffentlichen Bilder" nur
diese Bild-ID einbindest.
Unter dieser ID werden die Bilder dann abgelegt, und es wird sehr
mühselig sein, das Verzeichnis danach zu grabben. Die "Sicherheit"
steigt exponentiiell mit der länge Deines Unique-Strings
Es empfiehlt sich ggf. auch, unter ähnlichem Namen die passenden Thumbs generieren zu lassen. "M_".$zufallsstring
Man kann dann das Verzeichnis mit einem Script danach absuchen und hat eine schöne Übersicht.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
erstmal Danke für deine Tipps !
Nur, gibt es da eventuell irgendwo ein KOMPLETTES Beispiel, weil so mit den einzelnen Tipps kann ich als Anfänger nicht so viel anfangen . . .
DANKE !!
Hello,
Nur, gibt es da eventuell irgendwo ein KOMPLETTES Beispiel, weil so mit den einzelnen Tipps kann ich als Anfänger nicht so viel anfangen . . .
Sorry, hatte den wichtigsten Link vergessen:http://www.google.com/search?hl=de&ie=ISO-8859-1&q=file+upload+site%3Awww.php.net&btnG=Google+Suche&lr=
Liebe Grüße aus http://www.braunschweig.de
Tom