fer: txt bearbeitung fopen etc

Zu dem Code hab ich 2 Fragen kann ich das vereinfachen?
Zum anderen er funktioniert nicht und ich weiss nicht warum.
Im Prinzip soll nur eine userliste erstellt werden bei "on" wird gefragt ob der user shcon auf der liste steht falls ja soll nix geschehen ansonsten auf die liste schreiben
und bei "off" soll der uservon der liste geloescht werden
und wenn die liste leer ist soll sie gelöscht werden.

  
                $status=strip_tags($_GET['msg']);  
		$users = fopen($userpath.$_GET['room']."_users.txt", 'r');  
		$userlist=fread($users, filesize($userpath.$_GET['room']."_users.txt"));  
		fclose($users);  
		if($status=='##on##'){  
			if(strpos($userlist,"#".strip_tags($_GET['user']).";")==false){  
				$users2 = fopen($userpath.$_GET['room']."_users.txt", 'a');  
				fwrite($users2,"#".strip_tags($_GET['user']).";");  
				fclose($users2);  
			}  
		}else{  
			if(strpos($userlist,"#".strip_tags($_GET['user']).";")!=false){  
				//name loechen von liste  
				$userlist=str_replace("#".strip_tags($_GET['user']).";", "", $userlist);  
				if(strpos($userlist,"#")==false){  
					@unlink($userpath.$_GET['room']."_users.txt");  
				}else{  
					$users2 = fopen($userpath.$_GET['room']."_users.txt", 'w');  
					fwrite($users2,$userlist);  
					fclose($users2);  
				}  
			}  
  
		}  

  1. Tach!

    Zum anderen er funktioniert nicht und ich weiss nicht warum.

    Wenn Wunsch und Wirklichkeit nicht übereinstimmen, muss man Debuggen. Im einfachsten Fall geht das mit Kontrollausgaben aller beteiligten Werte und Funktionsergebnisse.

    Zu dem Code hab ich 2 Fragen kann ich das vereinfachen?
                    $status=strip_tags($_GET['msg']);

    Warum strip_tags()? Wenn der User Mist eingibt, muss das nicht nur in Form von HTML geschehen. Wichtig ist, dass bei der Ausgabe kontextgerecht behandelt wird.

      $users = fopen($userpath.$\_GET['room']."\_users.txt", 'r');  
      $userlist=fread($users, filesize($userpath.$\_GET['room']."\_users.txt"));  
    

    Hier musst du sogar noch komplexer programmieren, Aus einer Benutzereingabe einen Dateinamen zu generieren und denn dann nicht zu prüfen, worauf er letzlich wirklich zeigt, ist fahrlässig. realpath() gibt den Pfad nach Bereinigen von Verzeichniswechseln zurück. Den kannst du dann prüfen, ob er auf ein von dir vorgesehenes Verzeichnis zeigt.

    dedlfix.

    1. Danke fuer die Tips das strip_tags hat ein anderen grund ist auch erstmal nur zum testen deswegen noch keine eingabe ueberpruefungen etc.

  2. Wenn ich die strpos() durch strstr() ersetzte geht es kann mir das evtl jemand erklaeren?

    1. Tach!

      Wenn ich die strpos() durch strstr() ersetzte geht es kann mir das evtl jemand erklaeren?

      Bitte bring reduziert auf diese Funktion(en) zwei Beispiele, ein funktionierendes und ein fehlschlagendes. Mit welchen Werten genau bekomst du das gewünschte Ergebnis, mit welchen nicht?

      dedlfix.

      1. $userlist steht "#gast;" drin
        $_GET['user']= "gast"

          
        if(strpos($userlist,"#".strip_tags($_GET['user']).";")!=false){  
        	//geht er nicht rein  
        }  
          
        if(strstr($userlist,"#".strip_tags($_GET['user']).";")!=false){  
        	//geht er  rein  
        }  
          
        
        
        1. Tach!

          $userlist steht "#gast;" drin
          $_GET['user']= "gast"

          if(strpos($userlist,"#".strip_tags($_GET['user']).";")!=false){

          //geht er nicht rein
          }

          if(strstr($userlist,"#".strip_tags($_GET['user']).";")!=false){
          //geht er  rein
          }

            
          Wenn strpos() und strstr() zu unterschiedlichem Verhalten führen, ist in erster Linie deren Ergebnis interessant. Das musst du dir ohne das if drumherum anschauen.  
            
          ~~~php
          echo '<pre>';  
          $userlist = "#gast;";  
          $_GET['user'] = "gast";  
            
          var_dump(strpos($userlist,"#".strip_tags($_GET['user']).";"));  
          var_dump(strstr($userlist,"#".strip_tags($_GET['user']).";"));
          

          Was siehst du als Ergebnisse und was sagt das PHP-Handbuch zum Ergebnis von strpos(), besonders für den Fall, dass die Fundstelle am Anfang des Strings ist?

          dedlfix.

          1. Antwort:
            strpos=int(0)
            strstr=string(6) "#gast;"

            strpos gibt false oder die stelle wo der string ist zurueck
            also alles korrekt soweit

            und beides ist !=false

            ich denke eher das hat was damit zutun das er den int mit !=false  abfragen kann

            sonst hab ich auch immer geschrieben >-1

            dann wird es sicher auch gehen

            1. Hallo,

              strpos=int(0)
              strstr=string(6) "#gast;"

              strpos gibt false oder die stelle wo der string ist zurueck
              also alles korrekt soweit

              und beides ist !=false

              nein, der Zahlenwert 0 gilt als false, wenn er als boolean interpretiert wird.

              ich denke eher das hat was damit zutun das er den int mit !=false  abfragen kann

              Wer?

              sonst hab ich auch immer geschrieben >-1
              dann wird es sicher auch gehen

              Sinnvoller wäre hier ein typsicherer Vergleich.

              Ciao,
               Martin

              --
              Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Sinnvoller wäre hier ein typsicherer Vergleich.

                Alles klar danke werd ich mehr drauf achten.
                auch danke an dedlfix