Verzeichnis mit foreach auslesen und Dateien durchnummerieren

qsrs

Erfahrenes Mitglied
Hallo,

ich verwende folgendes Skript, um ein Verzeichnis mit Dateien auszulesen und anzuzeigen:

PHP:
$language_dir = dir ("files");
$language_files = array();
 while ($language_file = $language_dir -> read()) {
  if ($language_file != "." and $language_file != "..") {
  $language_files[] = $language_file;
  }
 }
$language_dir -> close();
natcasesort ($language_files);
 
//Ausgabe
foreach ($language_files as $language_file) {
echo $language_file;
}

Jetzt möchte ich die Dateien durchnummerieren. Also vor oder hinter jede Datei die Nummer angeben. Die Dateien werden ja alphabetisch ausgegeben. Wenn ich also ein Verzeichnis habe, das die Dateien index.php und login.php beinhaltet, sollte folgendes ausgegeben werden:

1 index.php
2 login.php
...usw.

Wie kann ich die Dateien durchnummerieren? Vielen Dank für evtl.Hilfe.
 
PHP:
<?php


error_reporting(E_ALL);
$i=0;

$pfad="./";
$verz=opendir ($pfad);
while ($file=readdir($verz))
{
    if (filetype($pfad.$file)!="dir")
    {




        $i++;
        echo "$i $file <br>";
    }
}
closedir($verz);
echo "<hr>Es sind $i Datien in dem Verzeichnis vorhanden.";
?>


So hab ichs eben getestet ;)
ist zwar net genau wie deine Funktion aber ähnlich! Lg Sascha
 
Vielen Dank, genau das war es.

Ich habe noch eine Frage. Ich gebe nun jede Datei mit Textfeldern (Beschreibung, Titel, etc.) aus um die Dateiinformationen in eine Datenbank zu übertragen. Wie könnte eine solche Abfrage aussehen? Die Dateien werden aufgelistet durch die o.g. while-Schleife inkl. Textfelder, in denen man Informationen ergänzen kann. Und jede Datei soll nun als Datensatz inkl. der in den Textfeldern pro Datei ergänzten Informationen in die Datenbank geschrieben werden. Kann mir dabei jemand helfen?
 
PHP:
<?php
include("config.php");
include("connect.php");

$dir = $_GET['dir'];
error_reporting(E_ALL);
$i=0;

$pfad="./";
$verz=opendir ($pfad);
while ($file=readdir($verz))
{
    if (filetype($pfad.$file)!="dir")
    {


        $i++;
        mysql_query("INSERT INTO `tabelle` (dateiname, nummer) VALUES ('$file', '$i')");
        echo "$file added!<br>";
    }
}
closedir($verz);
echo "<hr>Es sind $i Dateien in dem Verzeichnis vorhanden.";
?>
 
Oder so:

PHP:
<?php

    //Datenbankdaten...

   if(isset($_POST['senden']))
   {
       for($x = 1; $x < count($_POST['nr'])+1;$x++)
       {
           $insert = 'INSERT
                                            INTO
                                                        `deinetabelle`
                                            SET   
                                                         `nr` = "'.mysql_real_escape_string($_POST['nr'][$x]).'",
                                                         `file` = "'.mysql_real_escape_string($_POST['file'][$x]).'",
                                                         `Beschreibung` = "'.mysql_real_escape_string($_POST['Beschreibung'][$x]).'"
                            ';
           mysql_query($insert) or die (mysql_error());
       }
   }

?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
   Nr:&nbsp;&nbsp;&nbsp;
   Filename:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   Beschreibung:<br>
<?php  
   $path = 'dein_ordner';
   $fname = dir($path);
      
   $i = 1;
   while($findnextfile = $fname->read())
   {       
       if(filetype($path.'/'.$findnextfile) != 'dir')
       {            
           echo '<input type="text" name="nr['.$i.']" value="'.$i.'" size="1">';
           echo '<input type="text" name="file['.$i.']" value="'.$findnextfile.'" size="20">';
           echo '<input type="text" name="Beschreibung['.$i.']" value="'.$_POST['Beschreibung'][$i].'" size="30"><br>';
           // u.s.w
           $i++;
        }
   }
   clearstatcache();     
   $fname->close();   
?>
   <br>
   <br>
   <input type="submit" name="senden" >
</form>
 
Hallo saschax,

ich verwende nun dein Codebeispiel, habe aber ein seltsames Problem. Ich habe zu jeder ausgegebenen Datei nun mehrere Textfelder ausgegeben z.B. dbfiles_file_description[]. Jetzt rufe ich per POST eine zweite Datei auf, in der die gleiche Abfrage steht, wie die von dir im o.g. Codebeispiel.

Etwas gekürzt sieht das dann so aus

PHP:
 $i = 0;
 $path = "files/temp/".$temp_id."/";
 $directory = opendir ($path);
 
  while ($file = readdir ($directory)) {
   if (filetype ($path.$file) != "dir") {
    $i++;
$sql = "INSERT INTO `$dbtable5` (`file_description`) VALUES ('".$dbfiles_file_description[$i].")";
//usw.
Mit $dbfiles_file_description[$i] scheinen keine korrekten Werte anzukommen. Es wird nur ein einziger Datensatz angelegt (obwohl es mehrere Dateien sind) und die Beschreibung bleibt leer. Wenn ich $dbfiles_file_description[$i] per echo ausgeben lassen, werden mir die Dateien angezeigt, allerdings nur 4 von 5. Das verstehe ich nicht.

PS: Anscheinenden werden die Dateien doch nicht alphabetisch ausgegeben, wie könnte ich das noch ändern?
 
Zuletzt bearbeitet:
Zurück