• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

if Anweisung aus einer txt Datei lesen

Al-Pi

New member
Hallo zusammen,

ich habe eine kleine Script geschrieben mit den ich etwas unzufrieden bin.

momentan sieht das so aus.

PHP:
<?php

		$returnwert = check_ipzeit();
		if ..gekürzt
		else .. gekürzt
				     exit;
			}    //ip und zeit check verkürzt

		if ( $_POST['num'] == "656292" || $_POST['num'] == "695641" || 
$_POST['num'] == "729141" || $_POST['num'] == "810555" || 
$_POST['num'] == "770897" || $_POST['num'] == "650398" || 
$_POST['num'] == "813169" ) //blacklist dies möchte ich vom .txt auslesen
			{
				echo "Diese Nummern sind nicht erlaubt<br /> ";
			}

		else
			{
				echo "funktion ausführen ";
				$handle = fopen ( "sid.txt", "w" );
				fwrite ( $handle, $_POST['num'] );
				fclose ( $handle );
			}
	?>

so wo die ganzen oder, oder, oder abfragen mit dem BlackList Nummern sind , möchte ich gerne von einer blist.txt ablesen können.
Weil die Liste immer länger und länger wird.

Ich habe schon den 1. Schritt gemacht damit ich die BlackList Nummern über einen php Datei in die blist.txt schreiben kann.
(html teil mit form action habe ich jetzt erspart)

PHP:
		if ( $_POST['num'] <> "" )
			{
				$handle = fopen ( "../blist.txt", "a+");
				fwrite ( $handle, $_POST['num'] ); //blacklistnummer
				fwrite ( $handle, ' | ' ); // trennzeichen
				fclose ( $handle );

			}

Jetzt komme ich aber nicht mehr weiter, kann mir vllt. jemand weiter helfen? :rolleyes:
 
file() wäre da einfacher. Dann kannst du die txt auch einfacher editieren.
Das rausschreiben müßte dann allerdings über ne foreach schleife geschehen (oder das Array per implode("\n",...) rauschreiben)
 
hallo skooli und ZeitGeist,

danke erstmal für die Antworten, ich hätte wahrscheinlich direkt erwähnen sollen, dass dies meine 1. PHP Zeilen sind ! :alien:

Bislang kenne ich nur if, else, echo, fopen,fwrite befehle und das nicht einmal im ganzen Umfang. (Gelernt mit hilfe irgendwelche Tutorials)

Tja... ich muss mich wohl in array ein arbeiten müssen, was viel komplizierte und größer aussieht. Bis dahin bleibt mir wohl nichts anderes übrig wie,
die Nummern manuell zuverbieten! (php datei vom server runterladen--> editieren --> wieder hochladen)
 
hallo ZeizGeist,

danke für die Links besonders für ../tut.php-quake.net, ich habe mich von Anfang an durchgarbeitet, doch sobald ich bei schleifen und arrays war, habe ich wieder den Faden verloren. :(

Beschreibe mal schritt für schritt wie ich vorgegangen bin.


1. Zum senden der verbotenen Nummern in send.php

Code:
<form action="schreib.php" method="post" target="_parent" name="sid" onsubmit="return chkSid()">
Num:  <input name="num" type="text" maxlength="7" class="sinput" >
<input type="Submit" name="Submit" value="Verbieten" class="button">
</form>


2. schreiben der Nummer in einer txt datei in schreib.php

PHP:
<?php

	if ( $_POST['num'] <> "" )
			{
		$num = $_POST['num'];
		$bnum = "$num\t";	// trennen duch TAB

		$handle = fopen ( "../blist.txt", "a+");
		fwrite ( $handle, $bnum );
		fclose ( $handle );

	}
?>

Ich denke bis jetzt ist alles in Ordnung, doch danach ...

PHP:
<?php

	/*	$returnwert = check_ipzeit();
		if (substr ($returnwert, 0, 2) == 'OK')
			{
				echo "";
			}
		else
			{
				echo $returnwert;
				     exit;
			}*/

			$blacklist = "blist.txt";
			$kontrolle = file($blacklist);
			foreach ($kontrolle as .....){
		if (  $_POST["num"] == "11" || $kontrolle ) //verbotene nummern!
			{
				echo "Num. nicht erlaubt<br />";
			}
}

		else
			{
				echo "Funktion ausführen";
				.......			}
	?>

$blacklist = "blist.txt";
$kontrolle = file($blacklist);
foreach ($kontrolle as .....){
if ( $_POST["num"] == "11" || $kontrolle ) //verbotene nummern!


fett makierte stelle ist unvollständig, fehlerhaft usw. ich blicke aber nicht mehr durch!
 
trenn die mal mit einem Zeilenumbruch statt nem Tab. Sonst bringt dir das file() nicht viel.
PHP:
$bnum = $num."\r\n";

Man kann Variable auch überschreiben
PHP:
$num = $num."\r\n"; 
$handle = fopen ( "../blist.txt", "a+");
fwrite ( $handle, $num );
fclose ( $handle );

oder gleich so:
PHP:
$handle = fopen ( "../blist.txt", "a+");
fwrite ( $handle, $_POST['num']."\r\n" );
fclose ( $handle );

in der Blacklist sollte jetzt in jeder Zeile genau eine Nummer stehen (vorher mal löschen um die Zeile mit den Tabs rauszubekommen).

foreach brauchst du dann gar nicht mehr
PHP:
$kontrolle = file('blacklist.txt');
if (in_array($_POST["num"], $kontrolle))
{
        echo "Num. nicht erlaubt<br />";
} 
else
{
// ...
}

und so würde foreach funktionieren
PHP:
$kontrolle = file('blacklist.txt');
foreach($kontrolle as $nummer)
{
        echo "Blacklistnummer: ".$nummer."<br>";
}
 
hallo ZeitGeit,

erstmal herzlichen dank für die ausführliche Erklärung,

Eintrag ind die blacklist funktioniert so wie es soll, doch if (in_array .. wird einfach ignoriert.

PHP:
	<?php
		// Spam schutz
		$returnwert = check_ipzeit();
		if (substr ($returnwert, 0, 2) == 'OK')
			{
				echo "";
			}
		else
			{
				echo $returnwert;
				     exit;
			}
		//blacklist Prüfung
		$blacklist = file('blist.txt');
		if (in_array($_POST["num"], $blacklist))  //Blacklist lesen
			{
				echo "Diese Nummer ist nicht erlaubt";
			}

		else  // alles OK nummer wird eingetragen
			{
				echo "Sendung wird geladen ";
				$handle = fopen ( "sid.txt", "w" );
				fwrite ( $handle, $_POST['num'] );
				fclose ( $handle );
			}
	?>

egal ob die Nummern in der blist.txt enthalten sind, wird tortzdem else ausgeführt. :(
mit foreach habe ich jedoch noch nicht ausprobiert!
 
mach mal nach dem
$blacklist = file('blist.txt');
ein
var_dump($blacklist); und poste den erzeugten _Quelltext_
(als PHP-Code)
 
ich hoffe ich habe es richtig verstanden

PHP:
array(7) {
  [0]=>
  string(8) "656292
"
  [1]=>
  string(8) "695641
"
  [2]=>
  string(8) "729141
"
  [3]=>
  string(8) "810555
"
  [4]=>
  string(8) "770897
"
  [5]=>
  string(8) "650398
"
  [6]=>
  string(8) "813169
"
}

und diese meldung kann man über dem browser lesen

array(7) { [0]=> string(8) "656292 " [1]=> string(8) "695641 " [2]=> string(8) "729141 " [3]=> string(8) "810555 " [4]=> string(8) "770897 " [5]=> string(8) "650398 " [6]=> string(8) "813169 " } Sendung wird geladen

in der blist.txt stehen die zahlen so ( ohne " )
656292
695641
729141
usw.

warum da jetzt überall gänsefüsschen steht verstehe ich nicht,
ob es daran liegt weil ich es lokal teste?!
 
Zuletzt bearbeitet:
Die Gänsefüßchen sind in Ordnung. PHP interpretiert die Zahlen als Sring, packt sie also in Gänsefüßchen. Problem ist der Zeilenumbruch der damit drin steht.

PHP:
<?php
$blacklist = file('blist.txt');
var_dump($blacklist);
$check = true;
foreach($blacklist as $num)
{
    if(trim($num) == $_POST['num'])
    {
        $check = false;
        break;
    }
}

if($check)  // alles OK nummer wird eingetragen
{
    echo "Sendung wird geladen ";
    $handle = fopen ( "sid.txt", "w" );
    fwrite ( $handle, $_POST['num'] );
    fclose ( $handle );
}
else
{
    echo "Nummer verboten";
}
?>
 
Hallo leute,

habe da mal eine Frage bezüglich der Sicherheit, das ganze funktioniert ja wunderbar nur damit das auch funktioniert muss ich ja den.txt Dateien die als Datenbank dienen (blist.txt und sid.txt) chmod 777 schreibrechte geben, die wiederum in einem Verzeichnis liegen was chmod 755 hat.

Jetzt habe ich auf diversen Seiten gelesen das man Dateien die auf chmod 777 gesetzt sind von ausserhalb ändern kann. Also die könnten die ganzen if else abfragen umgehen..

In wie fern stimmt das??:(
 
ich würde sagen garnicht! Man müsste sich über ftp bzw. eine benutzeroberfläche verbinden. (alle Angaben sind wie immer ohne Gewähr)^^
 
Ich vermute mal du hast keinen root-Server. Insofern könnten andere Benutzer des Servers auf diese Verzeichnisse zugreifen. Ist aber auch nur ne Vermutung.

Ich würde dir die Verwendung einer Datenbank empfehlen.
 
Hallo ZeitGeist und Junkee,

danke erstmal für die Antworten...
Ich bin alleine auf einen Managed-Server, heißt das also wenn jemand auf dem selben Server ein Hosting, webspace etc. hat kann die dateien die auf CHMOD 777 gesetzt sind beschreiben, auch wenn der übergeordnette Verzeichnis eine 755 hat?

Datenbank, mysql würde ich liebend gern verwenden, wenn ich damit umgehen könnte ;-)
 
Hängt davon ab was mit Server genau gemeint ist. Jemand müßte das selbe Betriebssystem nutzen. Sollte bei einem Managed Server nicht der Fall sein.
Zugriff hat bei 777 dann jeder für alles, egal wie das übergeordnete Verzeichnis aussieht.
 
Zurück
Oben