Bildupload

Da ich im Internet nie etwas richtiges gefunden habe, versuche hier jemanden zu finden, der mir helfen kann.

Ich möchte einen Bildupload machen, bei dem die dateien ins verzeichnis bilder/upload/
hochgeladen werden. Der name des bildes soll so bleiben. Falls die Datei schon vorhanden ist einen text anzeigen “Bild schon vorhaden”.
Wenn das Bild hochgeladen ist auch einen Link zum Bild anzeigen.

Es sollte die möglichkeit bestehen auch 10 bilder gleichzeitig hochladen zu können.

Viele Grüße

willst du ein bilderuploadscript oder einen hoster?

nur upload kein hoster

Wie willst du feststellen können das ein Bild doppelt ist?
Am Dateinamen ist das schwirig da man diesen ja sehr leicht ändern kann. Du kannst den Hochgeladenen Dateien auch automatisch eine Fortlaufende Nummer geben damit Dateinamenkonflikte vermiden werden.

mit den nummern möchte ich nicht.
Und der Dateinamen wird grundsätzlich nicht geändert.

Ob eine Datei existiert ist doch kein Problem mit file_exists()
Ich habe mal ein kleines Script geschrieben. Zu sehen hier:
http://hummer.bplaced.net/uploadpic/

Ich denke, das ist genau das, was du suchst :slight_smile:

Falls Interesse besteht, poste ich den Quelltext.

ja ist perfekt

[code]<?php
if(isset($_POST[‘upload’])) {
$err_msg = array();
$msg = array();
$folder = “bilder/upload”;
for($i = 0; $i < count($_FILES[‘datei’][‘tmp_name’]); $i++) {
if(!empty($_FILES[‘datei’][‘tmp_name’][$i])) {
$imageSize = getImageSize($_FILES[‘datei’][‘tmp_name’][$i]);
if($imageSize[0] != 0) {
if(!file_exists($folder."/".$_FILES[‘datei’][‘name’][$i])) {
if(move_uploaded_file($_FILES[‘datei’][‘tmp_name’][$i], $folder."/".$_FILES[‘datei’][‘name’][$i])) {
$msg[] = $_FILES[‘datei’][‘name’][$i];
} else {
$err_msg[] = $_FILES[‘datei’][‘name’][$i];
}
} else {
$err_msg[] = $_FILES[‘datei’][‘name’][$i]." : Bild schon vorhanden!";
}
} else {
$err_msg[] = $_FILES[‘datei’][‘name’][$i]." : Nur gif, jpg oder png erlaubt!";
}
}
}
if(!empty($msg)) {
echo “

Erfolgreich hochgeladen:

\n”;
echo “
    \n”;
    foreach($msg as $file) {
    echo "
  • <a href=“http://”.$_SERVER[‘HTTP_HOST’].dirname($_SERVER[‘PHP_SELF’])."/".$folder."/".$file."">".$file."
  • \n";
    }
    echo “
\n”;
} else {
echo “

keine Dateien hochgeladen!

\n”;
}
if(!empty($err_msg)) {
echo “

Fehler:

\n”;
echo “
    \n”;
    foreach($err_msg as $file) {
    echo "
  • “.$file.”
  • \n";
    }
    echo “
\n”;
}
}
?>
<?php $maxImages = 10; for($i = 1; $i <= $maxImages; $i++) { echo "\t
Bild ".$i.":
\n"; } ?>

[/code]

thx

[quote=“hummer”][code]<?php
if(isset($_POST[‘upload’])) {
$err_msg = array();
$msg = array();
$folder = “bilder/upload”;
for($i = 0; $i < count($_FILES[‘datei’][‘tmp_name’]); $i++) {
if(!empty($_FILES[‘datei’][‘tmp_name’][$i])) {
$imageSize = getImageSize($_FILES[‘datei’][‘tmp_name’][$i]);
if($imageSize[0] != 0) {
if(!file_exists($folder."/".$_FILES[‘datei’][‘name’][$i])) {
if(move_uploaded_file($_FILES[‘datei’][‘tmp_name’][$i], $folder."/".$_FILES[‘datei’][‘name’][$i])) {
$msg[] = $_FILES[‘datei’][‘name’][$i];
} else {
$err_msg[] = $_FILES[‘datei’][‘name’][$i];
}
} else {
$err_msg[] = $_FILES[‘datei’][‘name’][$i]." : Bild schon vorhanden!";
}
} else {
$err_msg[] = $_FILES[‘datei’][‘name’][$i]." : Nur gif, jpg oder png erlaubt!";
}
}
}
if(!empty($msg)) {
echo “

Erfolgreich hochgeladen:

\n”;
echo “
    \n”;
    foreach($msg as $file) {
    echo "
  • <a href=“http://”.$_SERVER[‘HTTP_HOST’].dirname($_SERVER[‘PHP_SELF’])."/".$folder."/".$file."">".$file."
  • \n";
    }
    echo “
\n”;
} else {
echo “

keine Dateien hochgeladen!

\n”;
}
if(!empty($err_msg)) {
echo “

Fehler:

\n”;
echo “
    \n”;
    foreach($err_msg as $file) {
    echo "
  • “.$file.”
  • \n";
    }
    echo “
\n”;
}
}
?>
<?php $maxImages = 10; for($i = 1; $i <= $maxImages; $i++) { echo "\t
Bild ".$i.":
\n"; } ?>

[/code][/quote]

Kann man eine Begrenzung für 100 MB machen (Die große des Ordners)? Man sollte sehen können, wieviel speicher man noch frei hat.

Hier eine kleine funktion welche die Größe eines Verzeichnisses ermittelt, und rekusiv auch die Unterverzeichnisse mit einbezieht.

Ob versteckte Dateien mit einbezogen werden weiß ich nicht, hab ich nicht getestet und überhaupt ob es dafür ne einfachere Methode gibt weiß ich nicht :3.

Um den Byte-Wert in Mega Byte umzurechnen musst du einfach zweimal durch 1024 teilen.

<? $mb = $size / (1024 * 1024); ?>

mfg Balmung

[quote]<?php
include (“checkuser.inc.php”);
echo("<font size=“4”>Bilder verwalten => Bilder anzeigen | <a href="?bilder2">Bilder hochladen

"); $verz = opendir('./bilder/upload/'.$username.'/'); while($file = readdir($verz)){$info = @getimagesize($file); if($file != "." && $file != ".." && !is_dir($file) && $file != "index.php") {$path = dirname(__FILE__);echo(" ");}} closedir($verz); echo("
$file Löschen
"); if(isset($_GET["delete"])) {echo("
Wollen sie die Datei ".$_GET['delete']." wirklich löschen?
Ja | Nein doch nicht
");} if(isset($_GET["delete2"])){$somefile = $_GET["delete2"];unlink($somefile);header("location:?bilder");} ?>[/quote]

Bei mir funktioniert das löschen nicht. Woran liegt das?

schonmal daran gedacht übersichtlich zu arbeiten?
hier das ganze nochmal ein bissel strukturierter:

[code]<?php
include (“checkuser.inc.php”);

echo("<font size=“4”>Bilder verwalten => Bilder anzeigen | <a href="?bilder2">Bilder hochladen

");
$verz = opendir(’./bilder/upload/’.$username.’/’);

while($file = readdir($verz)){
$info = @getimagesize($file);
if($file != “.” && $file != “…” && !is_dir($file) && $file != “index.php”){
$path = dirname(FILE);
echo("

".
"".
"".
"");
}
}

closedir($verz);
echo("

<font size=“2”>$file <font size=“2”><a href="?bilder&delete=$file">Löschen
");

if(isset($_GET[“delete”])){
echo("
<font size=“2”>Wollen sie die Datei “.
$_GET[‘delete’].”
wirklich löschen?
<a href="?bilder&delete2=".
$_GET[‘delete’]."">Ja | <a href="?bilder">Nein doch nicht");
}

if(isset($_GET[“delete2”])){
$somefile = $_GET[“delete2”];
unlink($somefile);
header(“location:?bilder”);
}
?>[/code]

Drei Dinge

Erstens:
Da fällt mir nur auf, dass der Link natürlich nicht ganz stimmt:

Wenn die Datei “bild.jpg” heißt, würde der so nachher beim unlink natürlich versuchen bild.jpg im Verzeichniss zu löschen, in dem das Script liegt.
Damit es beim unlink passt am besten direkt dort ändern:

Zweitens:
am ende muss noch ein Leerfeld im header() befehl, dass es so ausschaut:

Davon mal abgesehen funktioniert der header() Befehl an dieser Stelle nicht, da vorher im Script bereits die Ausgabe begonnen hat.

Drittens:
Das Script ist absolut unsicher!
Es hindert niemanden daran einfach folgende URL aufzurufen:
"?bilder&delete2=…/…/…/checkuser.inc.php"
und deine Scriptdatei wäre unmittelbar gelöscht.
Ich an deiner Stelle würde jede hochgeladene Datei in einer Tabelle eintragen lassen, und die Dateien über die eindeutigen IDs abrufen und löschen.

mfg Balmung

Ich selbst habe das Script nicht geschrieben, aber danke für deine Hilfe!

Noch eine Frage: Wie kann man das anzeigen nach dem ABC sortieren?

Und wie kann ich anstatt löschen einen Checkbutton einzufügen um zu löschen?