PHP - Tabellenprob...



  • Hi Leute!
    Ich habe in der Exchange auf meiner Homepage (http://www.it-center.ch.tf/exchange.php) eine Beschreibung hinzugefügt.

    Eine Tabelle wie man sieht.
    Nun folgender Code zeigt mir alle übergebten daten an.

    printf ("<td><a href=\"%s%s\" target=\"_blank\">%s</a></td>",
       $webpath, $file, $file);
       printf ("<td align=\"center\">$beschreibung</td>");
       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\">Umbenennen</a></td>",
       "rename.php", $file);
    [/code ]
    
    Im Formular habe ich ein Feld mit dem namen beschreibung.
    Und mit
    [code]
     printf ("<td align=\"center\">$beschreibung</td>");
    

    Wird die beschreibung, die man eingeben hat angezeigt.
    Doch wenn ich zB. eine "Text.jpg" hochlade und als Beschreibung TEST eingebe, steht einfach bei ALLEN in der Beschreibung test, anstatt NUR gerade bei der Datei, die ich hochgeladen habe! Warum dass?
    Und wie muss man es machen, dass es nicht so ist, sondern die BEschreibung, die man eingibt, NUR bei der Datei angezeigt wird, die man mit der BEschreibung hochgeladen hat?

    Danke zum voraus,
    mfg
    Programmer 🙂



  • Wird $beschreibung aus einer Mysql-Datenbank oder aus einer Textdatei gelesen?



  • AUS NIRGENDS! Einfach aus dem Formularfeld TEXTAREA... 😉 Der user kann es ja eingeben..



  • Du musst die Beschreibungen aber irgendwo speichern! Sonst klappt das nicht!



  • Also du meinst, ich muss es noch mit

    <?php
    $daten = $beschreibung;
    $dateihandle = fopen("beschr.txt","w");
    fwrite($dateihandle, $daten); 
    ?>
    

    speichern ??
    Wenn ja: Wie setze ich die Beschreibung dann hinter die richtige Datei?



  • Hast du eine Dateibank oder willst du das ganze mit Dateien regeln?



  • ich möchte das ganze nicht nur mit Dateien regeln, ich MUSS sogar, da mein Webhoster KEIN MySQL unterstüzt... die DataExchange, Linkliste etc, alles einfaches PHP, sogar das Forum geht ohne DB... 😉



  • Ich würde das ganze in einen Array ablegen mit dem Dateinamen als Schlüssel und Beschreibung als Wert

    $desc['filename.exe'] = "Eine ganz wichtige Datei";
    

    Dieses Array musst du nun in eine Datei schreiben! Du kannst dir dazu entweder eine Funktion basteln, die in eine Datei PHP-Cdoe reinschreibt, die du dann immer per include einbindest. Du gehst dazu dein Array in eine foreach($desc as $key => value) - Schleife durch und schreibst dann "\\desc['key'] = 'value';" in die Datei. An Anfang und Ende der Datei brauchst du dann halt noch den <? und ?> Tag. Diese Datei könnte dann folgendermaßen aussehen:

    <?
     $desc['filename.exe'] = "Eine ganz wichtige Datei";
     $desc['file.dat'] = "Auch wichtig";
    ?>
    

    oder du verwendest die Funktion serialize um dein Array in einen String zu überführen, den du dann in die Datei speicherst. Um die Daten dann wieder einzulesen, liest du die Datei wieder in einen String und verwendest anschließend die Funktion unserialize um aus diesem wieder dein Array zu erhalten.



  • Also. Anstatt filename.exe einfach $upfile und anstatt Auch wichtig $beschreibung nehmen???

    Danke! Werde mich mal ans proggen setzen...



  • Ja, genau!
    Also erst bisherige Beschreibungen einlesen und dann den neuen Eintrag hinzufügen und dann das ganze wieder neu schreiben.



  • okay.. damit es nicht zu kompliziert wird:

    1. In grunde genommen könnte ich alles in eine beschr.php datei schreiben
    2. Könnte ich die in meiner Exchange <?php include("beschr.php")?> includen
    3. WAS muss ich dann in PRINTF anstatt $beschreibung dann hinschreiben`? siehe mein Codeausschnit.. ;)??? 😕



  • desc[file] (vielleicht das $file auch in '' oder "" - musst du ausprobieren)



  • ok. thx. werde es mal ausprobieren



  • Nochmal zu meinen 2 Methoden - die erste (mit include) ist einfacher beim Einlesen und etwas umständlicher beim Schreiben, bei der zweiten ist beides wenig umständlich!
    Bei Methode 1 kannst du allerdings besser von Hand mal was in der Datei ändern (ist ja normales PHP)!



  • Also. Ich komme leider nicht ganz klar... ich poste hier mal den ganzen code meiner EXCHANGE.PHP:

    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
    <meta http-equiv="Page-Enter" content="blendTrans(Duration=1)">
    </head><noscript><body></body></noscript>
    <body background=images/bg.jpg topMargin=10>
    <?php
    $filepath = $DOCUMENT_ROOT."/downloads/";
    $MAX_FILE_SIZE = 2097152;
    
    if(filesize($upfile)>$MAX_FILE_SIZE)
    {
    echo "Dateilimite überschritten! Transaktion abgebrochen!<BR><BR>";
    echo "Sie können durch Packen einer Datei, wenn diese das Limit von 2MB überschreitet, die grösse Verringern und halt per ZIP Archiv hochladen!<BR><HR>";
    echo "<a href=\"exchange.php\">Zurück...</A>";
    exit;
    }
    else
    {
    
    if ($upfile_name != "") {
    $des_file= strtolower($filepath.$_FILES['upfile']['name']);
      if (!file_exists($des_file)) {
        if(ereg("(\.jpg)|(\.jpeg)|(\.gif)|(\.png)|(\.3ds)|(\.obj)|(\.txt)|(\.doc)|(\.asc)|(\.mdw)|(\.mdb)|(\.wav)|(\.mid)|(.\midi)|(\.wma)|(\.exe)|(\.ace)|(\.tar)|(\.rar)|(\.ar)|(\.zip)|(\ .cpp)|(\.c)|(\.vbs)|(\.js)|(\.tga)|(\.dat)|(\.dot)|(\.rtf)$", $des_file)) {
    
        if (move_uploaded_file($upfile, $des_file)) {
        echo "<font color=green>Datei gespeichert</font>";
      } else {
        echo "<font color=red><B>Upload fehlgeschlagen!</font></B><BR>";
        echo "Dies kann folgende Gründe haben:";
        echo "<hr>";
        echo "1. Dateifehler<br>";
        echo "2. Dateilimite zu gross<br>";
        echo "3. Skriptfehler<br>";
        echo "4. Unerlaubte Zeichen im Dateinamen<br>";
        echo "<hr>";
        echo "<a href=\"exchange.php\">Zurück...</a>";
        exit;
      }
     } else {
       echo "<b><font color=\"red\">Diese Art von Datei ist nicht erlaubt!! Transaktion abgebrochen!</font></b><hr>";
    echo "<br><b>[Erlaubte Dateitypen]</b><hr>";
    echo ".jpg, ";
    echo ".jpeg, ";
    echo ".gif, ";
    echo ".png, ";
    echo ".3ds, ";
    echo ".obj, ";
    echo ".txt, ";
    echo ".doc, ";
    echo ".asc, ";
    echo ".mdw, ";
    echo ".mdb, ";
    echo ".wav, ";
    echo ".mid, ";
    echo ".midi, ";
    echo ".wma, ";
    echo ".ar, ";
    echo ".rar, ";
    echo ".tar, ";
    echo ".zip, ";
    echo ".exe, ";
    echo ".ace, ";
    echo ".c, ";
    echo ".cpp, ";
    echo ".js, ";
    echo ".vbs, ";
    echo ".tga, ";
    echo ".rtf, ";
    echo ".dot, ";
    echo ".dat ";
    echo "<hr>";
    echo "Der Webmaster übernimmt auf allfällige Fehler, Systemabstürze, Viren oder sonstige Schäden,<br>die durch Programme der DataExchange enstehen könnten, <b>keine Haftung!</B>";
    echo "<hr>";
    echo"<a href=\"exchange.php\">Zurück...</a>";
        exit;
     }
    }
    }
    }
    
    echo "<hr>";
    
    unset($files);
    if ($dh = opendir($filepath))
    {
      while($file = readdir($dh))
      {
        if (!ereg("^\.+$",$file))
        {
         $files[] = $file;
        }
      }
      closedir($dh);
    }
    
    $webpath = "downloads/";
    
    if (is_array($files)) {
     echo "<table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" width=\"100%\">\r\n";
     echo "<tr bgcolor=\"#7FFFD4\">";
     echo "<th>Datei</th>";
     echo "<th>Beschreibung</th>";
     echo "<th>Grösse</th>";
     echo "<th>Datum</th>";
     echo "<th colspan=\"2\">Aktionen</th></tr>\r\n";
    
     sort($files);
     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=\"center\">$beschreibung</td>");
       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\">Umbenennen</a></td>",
       "rename.php", $file);
       }
       echo "</table>";
     }
    echo "<hr>";
    $datum = date("d.m.Y");
    $uhrzeit = date("H:i:s");
    $ip = getenv("REMOTE_ADDR");
    echo ("<font color=\"blue\">Ihre IP-Adresse ist: $ip</font>");
    echo ("<br>Heute ist der $datum");
    echo (", $uhrzeit Uhr<BR>");
    
    ?>
    <TABLE width=100%>
    <TR>
    <TD><a href="exchange.html" target="_new">Anleitung / Dateiliste</A>
    <TD><a href="agb.html" target="_new">Allgemeine Bestimmungen</A>
    </TD></TR>
    </TABLE>
    <br>
    <?php
    function dirsize($dir) {
     $dh = opendir($dir);
     $size = 0;
     while (($file = readdir($dh)) !== false) {
      if ($file != "." and $file != "..") {
       $path = $dir."/".$file;
       if (is_dir($path))
        $size += dirsize($path);
       elseif (is_file($path))
        $size += filesize($path);
      }
     }
     closedir($dh);
     return $size;
    }
    
    function format_size($rawSize)
    {
     return round($rawSize/1048576, 2);
    }
    $mb_free = 40 - format_size(dirsize('./downloads'));
    if($mb_free > 0) // wenn mehr als 10 MB frei sind
    {
    echo "<form action=\"exchange.php\" method=\"POST\" enctype=\"multipart/form-data\">";
    echo "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"2097152\">";
    echo "<input type=\"file\" name=\"upfile\"><br>";
    echo "<textarea name=\"beschreibung\"></textarea><BR>";
    echo "<input type=\"submit\" name=\"Hochladen\">";
    echo "</form>";
    echo "<br>";
    echo "Es stehen noch ".$mb_free." MB zur Verfügung.";
    }
    else // es sind weniger als 10 MB frei
    {
    echo "Es steht kein Platz mehr zur Verfügung oder die DataExchange ist überlastet!<BR>Versuchen Sie es später noch einmal...";
    exit;
    }
    ?>
    <br><br><center><a href="jukebox.php" target="_new">Hier klicken, für eine Begleitmusik!</a><br>Achtung! Fenster nicht schliessen, sonst wird die Musik beendet!
    </center>
    </body>
    </html>
    

    Das ist das Formular:

    echo "<form action=\"exchange.php\" method=\"POST\" enctype=\"multipart/form-data\">";
    echo "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"2097152\">";
    echo "<input type=\"file\" name=\"upfile\"><br>";
    echo "<textarea name=\"beschreibung\"></textarea><BR>";
    echo "<input type=\"submit\" name=\"Hochladen\">";
    echo "</form>";
    

    UND NUN DAS PRINTF:

    printf ("<td><a href=\"%s%s\" target=\"_blank\">%s</a></td>",
       $webpath, $file, $file);
       printf ("<td align=\"center\">$beschreibung</td>");
       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\">Umbenennen</a></td>",
       "rename.php", $file);
    

    könntest du mir eventuell deine Funktion, so wie du es denkst, einbauen und im Code posten? Das heisst, deine Eingebaute Codes FETT schreiben,

    Ich hab das von dir Probiert, doch es klappt irgendwie net.. du würdest mir ziemlich helfen!! Wenn das mit dieser Beschreibung geschafft ist, dann ist die Exchange wirklich komplett und ich muss dann nie mehr was in PHP wissen.. 😉



  • Wo genauer leigt dein Problem?
    Schreiben der include-Datei? (willst du jetzt eigentlich methode 1 oder methode 2)
    anzeige der passenden Beschreibung aufgrund der datei
    beides



  • mir ist eigentlich egal, was für eine Methode...
    ich komme irgendwie nicht nach..

    $desc['filename.exe'] = "Hehe"; Was SOLL die filename.exe??? Wo soll ich $ufpile_name hintun? zu filename.exe oder hehe?

    $desc['file.dat'] = "Auch was"; und da... soll ich $beschreibung nun anstatt file.dat oder auch was verwenden...

    Denn ich habe das gefühl, dass der mir dann bei der Beschreibung so was anzeigen wird:

    noname.jpg.Test

    anstatt nur Test....

    Das ist mein problem.
    Ich check das net... Bin ich zu dumm oder zu blöd?? PS: habe leider ja erst mit PHP angefangen... hab zwar ein Buch, doch dort steht nichts...



  • für jede Datei fügst du dem Array (assoziativ) ein neues Wertepaar hinzu.
    Dabei verwendest du den Dateinamen als Schlüssel.

    Willst du jetzt beispielsweise den Beschreibungstext für die Datei bild.jpg, so steht der in $desc['bild.jpg']. Angenommen du gehst in einer Schleife die ganzen Dateien durch, wobei in $filename immer der jeweilige Dateiname steht, so schreibst du an der Stelle, an der du die Beschreibung haben willst desc[filename]; - so einfach ist das!



  • Nach Methode1 steht in der Datei die du einbindest also z.B. folgendes:

    <?
     $desc['autoparking.jpg'] = "Ein sehr schönes Bild";
     $desc['netwatch.zip']    = "Hier alles gezippt";
     .
     .
     $desc['proton31de.zip'] = "Und nochmal ein Archiv";
    ?>
    

    Verstehst du jetz, wie ich es meine?



  • also. ich schreibe hier mal hin, was ich schreiben würde:

    $desc['$upfile'] = $file;
    $desc['file.dat'] = $beschreibung;
    
    //danach die Printf:
    
    printf("<td>"$desc[$file]"</td>");
    

    Ist das etwa das, wie du es meinst? Oder meinst du was in der art:

    if(is_array(desc[file])
    {
    printf("desc[file.dat].beschreibung");
    }
    else
    {
    }

    mfg
    Programmer


Log in to reply