Uploadscript ausbauen

RageNo1

Erfahrenes Mitglied
Hallo,
ich habe ein Uploadscript zusammengebastelt.
Damit kann ich Bilder des Formates JPG und GIF mit
einer maximalen Größe von 100KB in das Verzeichnis
hochladen indem sich das Script befindet.

Nun möchte ich das Script noch etwas ausbauen.
In erster Linie, möchte ich das die Dateien
in dem Verzeichnis ausgelesen und angezeigt werden.

Indem Fall sieht man also sobald man das Script aufruft,
den Verzeichnisinhalt mit den Dateinamen der einzelnen
Dateien. zusätzlich kann man noch weitere Dateien
hochladen. Nach dem Upload soll dann das Script
wieder geladen werden wobei es nun wieder den
Verzeichnisinhalt ausliest und anzeigt.

Nur weiss ich nicht ganz wie ich das realisieren kann.
Ich hoffe Ihr könnt mir dabei weiterhelfen.

Hier nun noch das Script:
PHP:
<?php
  if($was=="doit") { 

    $size = $bild_size; 
    $name = $bild_name; 
    $type = $bild_type; 

    if (!file_exists($name)) {
    if(eregi("(jpg|gif)$",$name)) { 
    if($size<100000 AND $size!=0) { 
      copy($bild,$name); // Kopiert das Bild 

      echo "Die Datei wurde erfolgreich hochgeladen.<br>"; 
      echo "Dateigröße: ".$size." Byte<br>"; 
      echo "Dateiname: ".$name."<br>";
      echo "Dateitype: ".$type."<br>";
      echo "<br>";
      echo "Bild Ansicht: <br>";
      echo "<img src=".$name."><br>";
    } else { 
      echo "Ihre Datei ist über 100 KB";  
    } 
    } else { 
    echo "Falsche Erweiterung: ".$name; 
    }
    } else { 
    echo "Dieser Dateiname existiert bereits: ".$name; 
	echo "<br>";
	echo "Bitte wähle einen anderen Namen für das Bild.";
    }

  } else { 

    echo "Dateiupload<br>";
	echo "Größe maximal: 100kb<br>";
	echo "Dateiformate: jpg, gif<br>";
    echo "<form action='".$PHP_SELF."' enctype=\"multipart/form-data\" method='post'>"; 
    echo "<input type='hidden' name='was' value='doit'>"; 
    echo "<table>"; 
    echo "<tr>"; 
      echo "<td>Datei</td>"; 
      echo "<td><input type='file' name='bild'></td>"; 
    echo "</tr><tr>"; 
      echo "<td> </td>"; 
      echo "<td><input type='submit' value='Hochladen'></td>"; 
    echo "</tr>"; 
    echo "</form></table>"; 
  } 
?>

Mfg Ragey
 
Hier mal meine downloads.php als Anregung:
PHP:
<?
$view=$_GET["view"];
if ($_SESSION["id"])
	{
		$id=$_SESSION["id"];
		$users=mysql_query("select * from users where id='$id'",$db);
		$user=mysql_fetch_array($users);
		$accesslevel=$user[4];
	}
else
	{
		$accesslevel=0;
	}
if (($accesslevel==255) && (!$view))
	{
		$insert=$_POST["insert"];
		$delete=$_GET["delete"];
		if ($insert)
			{
				$tmpname=$_FILES["uploadfile"]["tmp_name"];
				$filename=$_FILES["uploadfile"]["name"];
				$mimetype=$_FILES["uploadfile"]["type"];
				$filesize=$_FILES["uploadfile"]["size"];
				if ($filesize>0)
					{
						move_uploaded_file($tmpname,"files/".$filename);
						mysql_query("insert into downloads (filename,mimetype,filesize) values ('$filename','$mimetype','$filesize')",$db);
						printf("File <b>%s</b> has been uploaded<br>",$filename);
					}
			}
		if ($delete)
			{
				$downloads=mysql_query("select * from downloads where id='$delete'",$db);
				$download=mysql_fetch_array($downloads);
				mysql_query("delete from downloads where id='$delete'",$db);
				unlink("files/".$download[1]);
				printf("File <b>%s</b> has been deleted<br>",$download[1]);
			}
		?>
		<form method="post" action="index.php?subsite=downloads.php" enctype="multipart/form-data">
		<input type="file" name="uploadfile">
		<input type="submit" name="insert" value="Upload File">
		</form>
		<table class="vistable" border="1">
		<tr><th>Filename</th><th>Size</th><th>Action</th></tr>
		<?
		$downloads=mysql_query("select * from downloads order by filename",$db);
		while ($download=mysql_fetch_row($downloads))
			{
				printf("<tr><td>%s</td><td>%s</td>",$download[1],$download[3]);
				?>
				<td><a href="<? printf('index.php?subsite=downloads.php&amp;delete=%s',$download[0]); ?>">Delete</a></td>
				</tr>
				<?
			}
		?>
		</table>
		<?
	}
else
	{
		?>
		<table class="vistable" border="1">
		<tr><th>Filename</th><th>Size</th></tr>
		<?
		$downloads=mysql_query("select * from downloads order by filename",$db);
		while ($download=mysql_fetch_row($downloads))
			{
				?>
				<tr>
				<td><a href="<? printf('getfile.php?file=%s',$download[0]); ?>"><? printf($download[1]); ?></a></td>
				<?
				printf("<td>%s</td></tr>",$download[3]);
			}
		?>
		</table>
		<?
	}
?>
 
Wenn ich das recht verstehe, wird bei einem
Upload der Dateiname in einer Datenbank gespeichert.

Ich allerdings möchte das ganze ohne
Datenbank haben.
 
Das hast Du richtig verstanden, aber es geht ja im Grunde genommen nur um's Prinzip und nicht um die eigentliche Technik, oder?
Daher dachte ich mir, dass Dir ein Blick auf den Aufbau des Scripts vielleicht helfen kann.
 
So ich habe einen schönen Code gefunden
den ich wunderbar einbauen kann.

Dabei wird das Verzeichnis ausgelesen und
in form von links angzeigt.

Aber eine Sache hätte ich noch.
Wie bekomm ich es hin, das nach dem Upload
die Datei automatisch umbenannt wird?

Und zwar soll vor den jeweiligen Dateinamen
das aktuelle Datum eingefügt werden.

Also aus test.jpg soll nach dem Upload
20050323test.jpg werden.

Mfg Ragey
PS:Sobald das Script komplett ist, werde ich
es nochmal hier Posten das die anderen
auch was davon haben.
 
Geht ganz einfach, ich mach's jetzt mal anhand meines Scripts als Beispiel:
So sieht der Upload jetzt aus (den Kram mit der DB nehm ich mal raus):
PHP:
if ($insert)
 {
  $tmpname=$_FILES["uploadfile"]["tmp_name"];
  $filename=$_FILES["uploadfile"]["name"];
  $mimetype=$_FILES["uploadfile"]["type"];
  $filesize=$_FILES["uploadfile"]["size"];
  if ($filesize>0)
   {
    move_uploaded_file($tmpname,"files/".$filename);
    printf("File <b>%s</b> has been uploaded<br>",$filename);
   }
 }

Mit Datum vor dem Dateinamen sieht es dann so aus:
PHP:
if ($insert)
 {
  $tmpname=$_FILES["uploadfile"]["tmp_name"];
  $filename=$_FILES["uploadfile"]["name"];
  $mimetype=$_FILES["uploadfile"]["type"];
  $filesize=$_FILES["uploadfile"]["size"];
  if ($filesize>0)
   {
    $uploaddate=date("Ymd");
    move_uploaded_file($tmpname,"files/".$uploaddate.$filename);
    printf("File <b>%s</b> has been uploaded<br>",$filename);
   }
 }
 
Hallo,
ich habe nun das Script auf den Müll geschmissen
weil es alles etwas unübersichtlich war.

Nun habe ich ein Script genommen welches
hier in den Tutorials zu finden war, und habe es
erweitert um die Funktion mit dem Datum vor dem
Dateinamen von reptiler (Danke nochmal).

Nun habe ich nur noch ein Problem.
Wenn ich eine Datei gleichen Names hochlade
wird die alte auf dem Server überschrieben.

Wie kann ich das unterbinden?

Hier das Script:
PHP:
<?php 
$tempname = $_FILES['file']['tmp_name']; 
$name = $_FILES['file']['name'];

$type = $_FILES['file']['type']; 
$size = $_FILES['file']['size']; 

if($type != "image/gif" && $type != "image/pjpeg") { 
    $err[] = "Nur gif und jpeg Dateien dürfen hochgeladen werden."; 
} 
if($size > "150000") { 
    $err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 150 KB!"; 
} 

if(empty($err)) { 
    $uploaddate=date("Ymd"); 
    copy($tempname,"upload/".$uploaddate.$name); 
    echo "Die Datei wurde erfolgreich hochgeladen!";
} 
else { 
    foreach($err as $error) 
    echo "$error<br>"; 
} 
?>

Mfg Hendrik
 
Zurück