W3asel: htpassword und Editierung

Moin Leute,

ich hab folgende Idee: Die Datei '.htpasswd' auslesen in Arrays, also jede Zeile ein Array oder noch besser in jedes Array ein Benutzername der '.htpasswd' - leider weiß ich nicht wie des geht, deshalb bin ich bei der Variante mit dem jede Zeile ein Array geblieben! Man soll per Checkbox die User anwählen können und damit löschen.

Also eigentlich ganz einfach, auf den CHMOD hab ich dabei schon geachtet, das Script sieht zur Zeit so aus:

<?php

echo "<html>";
echo "<body>";
echo "<form name="activate" method="post" action="config.php">";

Wieviele User sollen eingelesen werden?

$anz='20';

Zu beschreibene Datei / Zu lesene Datei

$file = ".htpasswd";

Wenn htpasswd existiert

if (file_exists("$file"))
{
 ## Variablen für die while-Schleife
 $i='0';

## Öffnen der Datei
 $htpasswd = fopen($file, "r");

## Anzeigen des Inhalts
 while($anz>=0)
 {
 echo "<input name="loeschen";
 echo $i;
 echo ""type="checkbox" value="">";
 echo " - ";

$array['text']['$i'] = fgets($htpasswd);

echo $array['text']['$i'];
 echo "<br>";
 $i++;
 $anz--;
 }
 fclose ($htpasswd);

echo "<br>";
echo "<input type="submit" name="Submit" value="Loeschen">";
echo "</form>";
echo "</body>";
echo "</html>";
?>

Er zeigt mir dabei aber schon unerwartetes Ende an, kein Plan wo dort der Fehler liegt.

Die config.php schaut dann dazu so aus:

<?php
$anz='0';
$i='20';

In Datei schreiben (erstmals)

$htpasswd = fopen($file, "r+");
 while ($i>=$anz)
 {

if ($anz>'1')
  {
  ##In Datei schreiben (anhängend)
  fclose ($htpasswd);
  $htpasswd = fopen($file, "a");
  }
  else
  {
  }

## Hochzählen + Checkboxen einlesen
  $anz++;
  $loeschen = $HTTP_POST_VARS["loeschen$anz"];

## Wenn Checkbox leer
  if ($loeschen == "")
  {
   ## Eintragen der nicht geändertden Daten
   $array1 = $array['text']['$anz'];
   fputs ($htpasswd, "$array1\n");
   fclose ($htpasswd);
  }
  ## Wenn Checkbox an:
  else
  {
   ## Eintrag verwerfen
   fputs ($htpasswd, "");
   fclose ($htpasswd);
  }

}
?>

Nach meiner Meinung dürfte das so Funktionieren, aber irgendwie auch wieder net, kann mir mal wer unter die Arme greifen - ich hänge zur Zeit.

  1. Okay, im ersten Dok hab ich die If-Anweisung net geschlossen, die Formularseite funzt somit, aber die config.php halt net - da meckert er immernoch an dem fput und fclose herum

    1. Hi W3asel,

      Okay, im ersten Dok hab ich die If-Anweisung net geschlossen, die Formularseite funzt somit, aber die config.php halt net - da meckert er immernoch an dem fput und fclose herum

      Du machst die Datei auf, dann machst du eine Schleife auf, mit einer IF-Anweisung drin, die die Dateiu wieder schließt und anders öffnet. Puh, wenn es da nicht zu Problemen kommt.
      Mach die Datei einmal auf und einmal zu, nicht in einer Schleife mehrfach. ich weiß nicht, ob das das Problem ist, aber ich schätze, dass zu dem Zeitpunkt, wo du fputs machst, schon keine Datei mehr offen ist.

      ciao
      romy

      1. Okay hab mir sowas schon gedacht, dass das einfach zu viel wird, hier die abgeänderte Form von der config.php: Das Attribut W für fopen habe ich genommen, da die .htpasswd völlig neu geschrieben wird, die Were dafür liegen ja alle in den Array vor: $array['text']['0']....

        <?php
        $anz='0';
        $i='20';

        In Datei schreiben (erstmals)

        $htpasswd = fopen($file, "w");
        while ($i>=$anz)
        {
         $loeschen = $HTTP_POST_VARS["loeschen$anz"];

        ## Wenn Checkbox leer
         if ($loeschen == "")
          {
           ## Eintragen der nicht geändertden Daten
           $array1 = $array['text']['$anz'];
           fputs ($htpasswd, "$array1\n");
          }
          ## Wenn Checkbox an:
          else
          {
          }

        $anz++;
         $i--;
        }
        fclose ($htpasswd);
        ?>

        Zur Zeit passt PHP aber folgende Zeile nicht:
        $array1 = $array['text']['$anz'];
        fputs ($htpasswd, "$array1\n");

        Schreib ich es so, funzt es auch net:
        fputs ($htpasswd, "$array['text']['$anz']\n");

        1. Hi W3asel,

          <?php
          $anz='0';
          $i='20';

          In Datei schreiben (erstmals)

          $htpasswd = fopen($file, "w");
          while ($i>=$anz)
          {
          $loeschen = $HTTP_POST_VARS["loeschen$anz"];

          möchtest du hier auf loeschen1, loeschen2 etc. referenzieren? Wenn ja benutze die richtige Syntax zu variablen Variablen.
          ${"löschen".$anz} sollte stimmen.

          Zur Zeit passt PHP aber folgende Zeile nicht:
          $array1 = $array['text']['$anz'];
          fputs ($htpasswd, "$array1\n");

          Mach mal ein echo $array['text']['$anz'];

          Was steht da drin?

          Außerdem musst du keine "" mehr um eine Variable schreiben, es reicht auch: fputs ($htpasswd, $array1."\n");
          Ob du es darfst weiß ich gerade nicht, ist also nur ein Versuch.

          ciao
          romy

          1. Okay, neue Config, neues Glück -- hat bis jetzt noch keine Fehler ausgespuckt, aber man sieht vielleicht auch warum: er ließt nun die beiden Counter-Zahlen $anz und $i ein, das macht er auch wunderbar.
            0:20 - 1:19 - 2:18 - 3:17 .. ist aber nicht Sinn der Sache oder?
            Naja und der Echo im letzten Schleifenteil Spuckt nur: 20:0 - 20:0 - 20:0 Fertig! aus!

            ##Ich lese nochmal alles ein, falls es durch das Formular
            ##nicht alles übernimmt!

            <?php
            $file = ".htpasswd";
            $anz='20';
            $i='0';

            if (file_exists("$file"))
            {
             $htpasswd = fopen($file, "r");
             while($anz>=0)
             {
             $array['text']['$i'] = fgets($htpasswd);
             $i++;
             $anz--;
             }
             fclose ($htpasswd);
            }

            $anz='20';
            $i='0';

            In Datei schreiben (erstmals)

            $htpasswd = fopen($file, "w");
            while ($anz>=0)
            {
             $loeschen = $HTTP_POST_VARS["loeschen".$i];
             echo $loeschen;
             ## Wenn Checkbox leer
             if ($loeschen == "")
              {
              ## Eintragen der nicht geänderten Daten
              fputs ($htpasswd, "$anz:$i\n");
              echo $array['text']['$i'];
              echo " eingelesen!\n";
              }
              ## Wenn Checkbox an:
              else
              {
              echo $array['text']['$i'];
              echo " geloescht!\n";
              }

            $anz--;
             $i++;
            }
            fclose ($htpasswd);
            echo "Fertig!"
            ?>

            Ne Idee, warum fputs mit fputs ($htpasswd, "$anz:$i\n"); arbeitet aber nicht mit fputs ($htpasswd, $blah"\n"); ???

            1. Hallo

              Ne Idee, warum fputs mit fputs ($htpasswd, "$anz:$i\n"); arbeitet aber nicht mit fputs ($htpasswd, $blah"\n"); ???

              Weil bei letzterer Schreibweise zwischen Variable und Textteil ein Punkt gehört ($blah."\n").

              Tschö, Auge

              --
              Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
              (Victor Hugo)
              Veranstaltungsdatenbank Vdb 0.1
  2. Hi W3asel,

    echo "<html>";
    echo "<body>";
    echo "<form name="activate" method="post" action="config.php">";

    Wieviele User sollen eingelesen werden?

    $anz='20';

    Zu beschreibene Datei / Zu lesene Datei

    $file = ".htpasswd";

    Wenn htpasswd existiert

    if (file_exists("$file"))
    {

    Variablen für die while-Schleife

    $i='0';

    Öffnen der Datei

    $htpasswd = fopen($file, "r");

    Anzeigen des Inhalts

    while($anz>=0)
    {
    echo "<input name="loeschen";
    echo $i;
    echo ""type="checkbox" value="">";
    echo " - ";

    $array['text']['$i'] = fgets($htpasswd);

    echo $array['text']['$i'];
    echo "<br>";
    $i++;
    $anz--;
    }
    fclose ($htpasswd);

    echo "<br>";
    echo "<input type="submit" name="Submit" value="Loeschen">";
    echo "</form>";
    echo "</body>";
    echo "</html>";
    ?>

    Hier fehlt die schließende Klammer zum IF-Zweig!

    ciao
    romy

  3. Hallo,

    es gibt eine PEAR Klasse die .passwd bearbeiten kann
    File_Passwd

    es gibt bei dieser Klasse eine Methode, womit man alle User auflisten kann
    listUser

    folgender Codeschnipsel sollte alle Benutzer aus einer .htpasswd auslesen (ungetestet)

    require_once ('File/Passwd/Authbasic.php');  
    $file = new File_Passwd_Authbasic('.htpasswd');  
    $file->load();  
    $array = $file->listUser();
    

    mfg
    Twilo