upload - download

nilox

Grünschnabel
Hallo allerseits,

kurze Problembeschreibung:

für ein privates Projekt habe ich ein Uploadformular erstellt, welches in einem via Ftp angelegten Ordner liegt und Dateien hochladet, so weit funktioniert dies auch. Auch das Abrufen und Anzeigen des Inhalts dieses Ordners funktioniert problemlos. Es gibt mehrere User, jeder benutzt sein eigenes Uploadformular(quasi hat jeder User seinen eigenen Ordner auf dem Server). Nun trat man an mich heran und möchte von mir folgendes:

1.Es wird eine Funktion gewünscht das der User diese Dateien im Browser selbst wieder löschen kann, ohne FTP Programm.

2. Sollen alle Downloads aller Ordner in einem sagen wir mal Pool gelistet werden, also auf einer seperaten Seite, auf der alle User Zugriff haben.

Leider reicht mein Verständis der PHP/SQL Programmierung nicht aus und dennoch möchte ich meinen Freunden helfen. Mein Ansatz ist jedem Upload eine automatische ID zu geben, welche in meiner Datenbank auf dem Server abgespeichert werden soll. Aber wie setze ich das am besten um? Wäre Euch sehr dankbar für jede Hilfestellung, Gruß Danilo, der es auch noch lernt, irgendwann^^....

Es gibt 3 Dateien in dem Ordner

form.php (ist das Interface zum Upload und Download)
upload.php
files.php


Hier die Scripte dazu:

form.php:

PHP:
<html>
<table width="100%" border="0" height="100">
  <tr>
    <td valign="middle" align="center" height="480">
      <table width="500" border="0" align="center" height="344">
        <tr valign="top"> 
          <td height="64"> 
            <form action="upload.php" method="post" enctype="multipart/form-data" name="upload" style='font:8pt Arial, Helvetica, sans-serif,; letter-spacing:1pt; border:1 solid #ffffff; background:#000033; color: #ffffff; '>
              <input type="file" name="file" style='font:8pt Arial, Helvetica, sans-serif,; letter-spacing:1pt; border:1 solid #ffffff; background:#000033; color: #ffffff; '>
              &nbsp;&nbsp; 
              <input type="submit" name="submit" value="Upload"style='font:8pt Arial, Helvetica, sans-serif,; letter-spacing:1pt; border:1 solid #ffffff; background:#000033; color: #ffffff; '>
              <input type="reset" name="reset" value="reset"style='font:8pt Arial, Helvetica, sans-serif,; letter-spacing:1pt; border:1 solid #ffffff; background:#000033; color: #ffffff; '>
            </form>
          </td>
        </tr>
      </table>
      <br>
      <table width="500" border="0" align="center">
        <tr> 
          <td class="weiss_10px"> 
            <p> 
            <font size="1" color="#CCCCCC" face="Verdana, Arial, Helvetica, sans-serif"> 
            <?php
$verzeichnis = "."; // Name des Verzeichnises
$action=opendir($verzeichnis);

while($datei=readdir($action)){
if(!preg_match("!(\.|\..)$!", $datei)){
?>
            <span class="rot_10px"> </span> 
            <table width="500" border="0" cellpadding="0" cellspacing="0">
              <tr> 
                <td width="151" height="16" class="weiss_10px"> <font face="Verdana, Arial, Helvetica, sans-serif" color="#CCCCCC" size="1"> 
                  <?=$datei ?>
                  </font></td>
                <td width="148" height="16" class="weiss_10px"><a href="<?=$verzeichnis.'/'.$datei ?>"><font face="Verdana, Arial, Helvetica, sans-serif" color="#CCCCCC" size="1"> <img src="../img/download.jpg" border="0" width="15" height="18"></font></a></td>
                <br>
              </tr>
            </table>
            <?php
}
}
?>
            <i></i>
            </font> </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
</body>
</html>


_________________________

upload.php:

PHP:
<body bgcolor="#000000" text="#FFFFFF">
<?php 

// Variabeln festlegen 
$max_byte_size = 300097152; 
$allowed_types = "(jpg|jpeg|gif|bmp|png|psd|ai|fla|swf|tif|tiff|avi|mpg|mpeg|txt|doc|xls|arr|all|drm|mix|sng|flp|wav|mp3|mp4|mid|zip|rar|exe|cpr)"; 

// 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 "die Datei upload.php und form.php <br>stehen nicht zum Download zur Verfügung!"; 

} 

?>

___________________________

files.php:

PHP:
<html>
<body bgcolor="#FFFFFF" text="#000000">
<?php
$verzeichnis = "files/"; // Name des Verzeichnises
$action=opendir($verzeichnis);

while($datei=readdir($action)){
if(!preg_match("!(\.|\..)$!", $datei)){
?>
<table width="389" border="1" cellpadding="0" cellspacing="0">
<tr>
<td width="155" height="23" valign="top"><?=$datei ?></td>
<td width="82" valign="top">counter</td>
<td width="152" valign="top"><a href="<?=$verzeichnis.'/'.$datei ?>"><img src="button.jpg" border="0"></a></td><br>
</tr>
</table>
<?php
}
}
?>
</body>
</html>
 
Bezüglich des löschens kannst du es dir ganz leicht machen...
Zur Datei machste nen Link mit dem Namen der Datei, oder der ID aussa DB oder wie du es auch immer strukturierst...
Dieser Link ruft dann nen Skript auf, der erst mal schaut, ob denn auch alles ok is, ob der User das darf etc...

Und dann benutzt du einfach unlink() um die Datei zu löschen ;)

[EDIT]
Zu der upload.php...
Warum packst du die Fehler aus gaben nich in nen Array und prüfst das danach, ob was drin is... Wenn Inhalt is, dann Fehler ausgeben, sprich den Inhalt des Fehler-Arrays und sonst gibste halt das ok aus und führst die gewünschten Operationen aus ^^

Damit sparste dir solche relativ unübersichtlichen if/else Strukturen ;)
 
Zuletzt bearbeitet:
Vielen Dank,

ich werde das direkt ausprobieren und naja bin halt noch ein "" in PHP^^

thx nochmal... (o:
 
Mmh also die Scripte sind Codeschnipsel die ich aus anderen Projekten rausgenommen hatte, da es soweit funktioniert möchte ich diese unangetastet lassen, da ich mich wie gesagt net so wirklich damit auskenne.

Diese unlink Funktion würde ganz gut zum ersten Problem passen denke ich nun habe ich das ganze ja so aufgebaut das der folgende Link immer die Möglichkeit gibt die Datei mit einem klick, als Link aufgebaut, zu speichern. Siehe hier:
PHP:
<a href="<?=$verzeichnis.'/'.$datei ?>"><img src="../img/download.jpg" border="0" width="15" height="18"></a>
Das Bild im Link ist eine kleine Diskette.

Daneben will ich nun einfach einen zweiten Link einbauen mit der unlink Funktion statt der Speicher Funktion. Wie genau muss die Syntax aussehen damit dies auch funktioniert? Für Hilfe wäre ich sehr dankbar und wünsche schon Mal allen Lesern einen schönen 1.Mai ^^

Ich denke mal so wird es nicht gehen:

PHP:
<? unlink (<a href="<?=$verzeichnis.'/'.$datei ?>"><img src="../img/delete.jpg" border="0" width="15" height="18"></a>) ?>
 
1. Solltest du dich etwas näher in die Materie des PHP einarbeiten ;)
2. Müsste das ca so aus sehen:
PHP:
echo '<a href="index.php?file='.$datei.'&action=delete">Die File löschen</a>

<? php
if(isset($_GET['action']) AND $_GET['action'] == 'delete')
{
if(is_file($verzeichnis./.$_GET['file'])
unlink($verzeichnis./.$_GET['file']);
}
?>

Du musst alöso mittels des Links dem Skript klar machen, dass er ne bestimmte Aktion ausführen soll und dann anhand entsprechender if-Strukturen abfragen welche Aktion es ist und was in dem fall zu tun ist...
 
Was passiert wenn ich anstatt
Code:
<a href="index.php?file='.$datei.'&action=delete">

das nehme?
Code:
<a href="index.php?file=../../../../*&action=delete">

Nur mal so zum nachdenken.
 
Zuletzt bearbeitet von einem Moderator:
Ich glaube es würde evtl falsch interpretiert werden...
Der Gedanke dahinter sieht wie folgt aus:
PHP:
//Du hast diesen Link:
<a href="index.php?page=blubb&page2=blab&page3=xyz">

//Damit übergibst du dir folgendes:
$_GET['page'];
$_GET['page2'];
$_GET['page3'];

//Also die einzelnen Parameter als string...
//Somit würde das:
echo $_GET['page'];
echo $_GET['page2'];
echo $_GET['page3'];

//Diese Ausgabe verursachen:
blubb
blab
xyz

Ich hoffe die Ausage is klar ^^
 
Erst einaml vielen Dank für die Tipps.

also ich habe das mal versucht einzubauen, leider scheint irgendwo ein syntaxfehler drin zu sein bin mir nicht sicher wo, als Zeilenangabe sagt er zwar diese Zeile:

PHP:
if(isset($_GET['action']) AND $_GET['action'] == 'delete')

jedoch vermute ich liegt es daran das in der ersten Zeile des Scripts ein Hochkomma zu viel bzw. zu wenig ist, vielleicht mag noch Mal jemand drüber schaun? (o:

1. Zeile:
PHP:
echo '<a href="index.php?file='.$datei.'&action=delete">Die File löschen</a>

Achso und meine File heisst form.php das heisst doch ich muss im Link statt index.php - form.php verwenden?! Oder?
Danke im Vorraus, Danilo

...naja wenns net geht gehts net soll'n sich die Jungs halt Ftp zulegen^^
 

Neue Beiträge

Zurück