str_replace funktioniert nicht!?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • str_replace funktioniert nicht!?

    Hallo allerseits!

    ich bin neu hier im Forum, also seid nachsichtig mit mir wenn ich etwas falsch mache
    Zu meinem Problem:
    Ich arbeite zur Zeit an einer Kundendatenbank die durch einen passwortgeschützten Bereich umrahmt wird.
    Dieses erledige ich mit .htaccess-Dateien.
    Nun arbeite ich an einem Adminmenü, in dem man die Daten der Benutzer ändern kann, sprich Benutzernamen und Passwort.

    Zur Zeit befinden sich 3 Nutzer in der .htpasswd
    Mit der variable $i überprüfe ich nur wie oft die if-Abfrage ausgeführt wird, sie wurde vorher auf 0 gesetzt.
    Einziger Haken an der Sache ist nun, dass das Passwort des Benutzers nicht geändert wird. Die Datei bleibt völlig unverändert.
    Evtl. sieht ja von euch einer den Fehler. Wenn noch Fragen sind, stellt sie einfach

    Hier mein bisheriger Code:
    PHP-Code:
            $newpw md5($pw);
            
    $datei fopen(".htpasswd""r+");
            while (!
    feof($datei))
            {
                
    $zeile fgets($datei);
                
    $ersetzen explode(":"$zeile);
                
    $oldpw $ersetzen[1];
                if (
    $ersetzen[0] == $user)
                {
                    
    $i $i+1;
                    
    $zeile str_replace($oldpw$newpw$zeile);
                }
            }
            
    fwrite($datei$zeile);
            
    fclose($datei); 
    So far,
    Nimrod2k6

  • #2
    ganz einfach, mit dem nächsten Schleifendurchlauf, überschreibst du $zeile, so dass die Ersetzung durch str_replace zunichte gemacht wurde. Hint: mach einen Schleifenabbruch innerhalb von if rein, dann bleibt die Ersetzung erhalten

    Kommentar


    • #3
      Hab mal eben gekramt, denn genau das habe ich auch mal gebraucht. Vielleicht ist die Lösung ja ein bisschen eleganter
      PHP-Code:
      $str file_get_contents('./test.txt');
      preg_match_all("/\\w+\\:+\\w+/"$str$arr);

      $newpass "kartoffel";
      for ( 
      $i 0$i sizeof($arr[0]); $i++ )
      {
          
      $curr = &$arr[0][$i];
          list(
      $user$pass) = split("\:"$curr);
          if ( 
      $user == 'miau' )
          {
              
      $pass md5($newpass);
              
      $curr $user.":".$pass;
          }
          
          
      $str_new .= $curr."\r\n";
      }

      $fp fopen('./test.txt''w');
      fputs($fp$str_new);
      fclose($fp);
      print_r($arr); 
      Die test.txt ist wie eine htpasswd aufgebaut:
      Code:
      test:15bbae1684f6413bc62046a096c46d46
      miau:c5391ac81e42546636a9cca132a61e78
      Vielleicht bringts dich ja weiter
      Viel Spaß damit

      Kommentar


      • #4
        Und ob mir das geholfen hat
        Ich freu mich, dankeschön!

        Habe allerdings ein Mischmasch aus unser beiden Methoden verwendet. Hier mal mein endgültiger Code:
        PHP-Code:
                $datei fopen(".htpasswd""r");
                while (!
        feof($datei))
                {
                    
        $zeile fgets($datei);
                    list(
        $name$pass) = split(":"$zeile);
                    if (
        $name == $user)
                    {
                        
        $pass crypt($pw);
                        
        $zeile $name.":".$pass."\n";
                    }
                        
        $ergebnis .= $zeile;
                }
                
        fclose($datei);
                
        $fp fopen('.htpasswd''w');
                
        fputs($fp$ergebnis);
                
        fclose($fp); 
        Vielen Dank nochmal!
        So far,
        Nimrod2k6

        Kommentar


        • #5
          OffTopic:
          Ich sehe dass du split() verwendest - diese Funktion ist recht langsam. Versuch doch mal explode zu verwenden, arbeitet genauso aber ist schneller da keine RegEx Fkt.... einfach split durch explode ersetzen und schauen
          Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
          var_dump(), print_r(), debug_backtrace und echo.
          Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
          Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
          Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

          Kommentar


          • #6
            Habs geändert, läuft aufs Selbe hinaus.
            Danke für den Tipp!
            So far,
            Nimrod2k6

            Kommentar

            Lädt...
            X