Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

txt bearbeiten lesen schreiben

Frage Entwicklung PHP

Mitglied: ppmk22

ppmk22 (Level 1) - Jetzt verbinden

06.04.2009, aktualisiert 14.04.2009, 4570 Aufrufe, 12 Kommentare

Möchte mit PHP eine txt lesen bzw. auswerten und überarbeiten

Hallo Forum

Ich habe eine txt in der stehen 6 Namen mit je einer Zahl dahinter. Diese Zahlen sollen mittels Formular bzw. durch PHP geändert werden.
Die txt sieht so aus:

Svenja H. 51
Svenja Z. 56
Mike 39
Kim 111
Petra 8

Nun kommt aus dem Formular für Petra ein Zähler dazu.
Dann sollte die txt so aussehen:

Svenja H. 51
Svenja Z. 56
Mike 39
Kim 111
Petra 9

Ich denke man müsste den Inhalt der txt in ein Array lesen bearbeiten und dann wieder rein wegschreiben.
Da ich aber nicht so die php Kennerin bin, stehe ich da vor einen großen Problem.

Hat bitte wer einen Lösungsvorschlag für mich.

Liebe Grüsse

Petra
Mitglied: laggflor
06.04.2009 um 22:47 Uhr
Nabend!

Ja, "Textdatei --> Multidimensionales Array" ist eine Möglichkeit.
Ist aber nicht schön.

Zuerst möcht ich aber eines abklären...
Gibt es einen besonderen Grund Textdateien zu verwenden?
Über eine Datenbank wäre das viel schöner und einfacher zu lösen.

Erzähl doch mal ein bisschen was du damit vorhast.

LG
Florian
Bitte warten ..
Mitglied: ppmk22
07.04.2009 um 00:51 Uhr
Hallo Florian

Textdatei muss nicht sein, habe aber kein SQL. Es Könnte auch eine XML oder eine html Seite mit einer Tabelle die durch php dann gleich gefüllt wird sein. Zweck der ganzen Sache ist so nee Art voting.

LG
Petra
Bitte warten ..
Mitglied: dog
07.04.2009 um 03:35 Uhr
Hallo,

schau dir mal SQLite an http://de2.php.net/sqlite Das ist eine dateibasierte Datenbank und braucht darum keinen Server.

Wenn du aber auf eine Datenbank (und die Möglichkeiten, die das mit sich bringt) verzichten willst empfehle ich dir mal serialize() und unserialize() in Verbindung mit file_get_contents() und file_put_contents() anzuschauen (das funktioniert natürlich nur, wenn du keinen vorhandenen Datenbestand hast).

Ansonten hat PHP auch einen CSV-Parser http://de.php.net/manual/de/function.fgetcsv.php was hier aber aufgrund der fehlenden Kommas auch problematisch wäre.

Zu guter letzt bleibt natürlich noch die Methode eines eigenen Parsers:

01.
<?php 
02.
 
03.
	function read_file($filename) { 
04.
		$handle = fopen ($filename, 'r'); 
05.
		$matches = array(); 
06.
		while (!feof($handle)) { 
07.
		    $buffer = fgets($handle, 4096); 
08.
		    if(preg_match('/([a-z \.]+)\s+(\d+)/iD', $buffer, $results)) { 
09.
				$matches[$results[1]] = $results[2]; 
10.
11.
12.
		fclose ($handle); 
13.
		 
14.
		return $matches
15.
16.
	 
17.
	function write_file($dataArray,$outputfilename
18.
19.
		$str = ''
20.
		foreach ($dataArray as $key => $value) { 
21.
			$str .= $key.' '.$value."\n"
22.
23.
		return file_put_contents($outputfilename, $str); 
24.
25.
 
26.
?>
(nicht getestet, so nicht praxistauglich, da Fehlerprüfung fehlt)

Grüße

Max
Bitte warten ..
Mitglied: ppmk22
07.04.2009 um 21:28 Uhr
Hallo Max danke schon mal, ich habe es damit mal versucht.
Bei meinem Code wird wohl jeder Programmierer die Hände über den Kopf zusammen schlagen, aber hier ist er.

01.
 
02.
<?php 
03.
	#ERGEBNIS KOMMT AUS DEM VOTE.HTM 
04.
	$ergebnis = $_POST["R1"]; 
05.
	$datafile = "txt.txt"
06.
	 
07.
	#ANLEGEN DER VARIALBLEN 
08.
	$sh
09.
	$sz
10.
	$m
11.
	$k  ;  
12.
	$p
13.
	 
14.
	 
15.
	#DER FUNKTION DEN TXT ÜBERGEBEN 
16.
	read_file($datafile); 
17.
 
18.
	function read_file($filename) { 
19.
		$handle = fopen ($filename, 'r'); 
20.
		$matches = array(); 
21.
		while (!feof($handle)) { 
22.
		    $buffer = fgets($handle, 4096); 
23.
		    if(preg_match('/([a-z \.]+)\s+(\d+)/iD', $buffer, $results)) { 
24.
				$matches[$results[1]] = $results[2]; 
25.
26.
			 
27.
			#ÜBERPRÜFEN WAS EINGELESEN WIRD 
28.
			echo  "  $buffer  <br/>"
29.
30.
		fclose ($handle); 
31.
		 
32.
		 
33.
		return $matches
34.
35.
	 
36.
	#DER VARIABLEN DIE WERTE DER TXT ZUWEISEN 
37.
	 
38.
       $sh = ; 
39.
	$sz = ; 
40.
	$m  = ; 
41.
	$k  =;  
42.
	$p  = ; 
43.
	 
44.
	 
45.
	#DAS ZUZÄHLEN DER WERTE AUS VOTE.HTM 
46.
	 
47.
	if ( $ergebnis == sh) 
48.
49.
		$sh++; 
50.
	} else
51.
		if ( $ergebnis == sz) 
52.
53.
			$sz++; 
54.
		}else
55.
			if ( $ergebnis == m) 
56.
57.
				$m++; 
58.
			}else
59.
				if ( $ergebnis == k) 
60.
61.
					$k++; 
62.
				}else
63.
					 
64.
				}if ( $ergebnis == p) 
65.
66.
					$p++; 
67.
				}else
68.
					 
69.
70.
71.
72.
73.
 
74.
$ergNeu = "Svenja H. $sh\r\nSvenja Z. $sz\r\nMike $m\r\nKim $k\r\nPetra $p"
75.
 
76.
$fp = fopen($datafile, "w"); 
77.
fputs($fp, $ergNeu); 
78.
fclose($fp); 
79.
 
80.
 
81.
?> 
82.
 
Das mit den "#DER VARIABLEN DIE WERTE DER TXT ZUWEISEN" im Code bekomme ich nicht hin.

Sieh bitte mal drüber

LG
Petra
Bitte warten ..
Mitglied: dog
07.04.2009 um 22:20 Uhr
Füg in deinen Code mal
01.
<?php 
02.
print_r(read_file($datafile)); 
03.
?>
ein.

Vielleicht kommst du dann selbst drauf, ansonsten verrate ich dir wie's weitergeht.

Grüße

Max
Bitte warten ..
Mitglied: ppmk22
08.04.2009 um 08:33 Uhr
Leider weiß ich damit nicht anzufangen.

Verrate es mir bitte.

Bin aber daruf gekommen das meine if-else Geschichte mit eine switch-case Abfrage schöne ist.
So also:

01.
	#DAS ZUZÄHLEN DER WERTE AUS VOTE.HTM 
02.
	 
03.
	switch ($ergebnis
04.
05.
		case sh : $sh++; 
06.
		break
07.
		case sz : $sz++; 
08.
		break;		 
09.
		case m : $m++; 
10.
		break;		 
11.
		case k : $k++; 
12.
		break;		 
13.
		case p : $p++; 
14.
		break;				 
15.
16.
 
LG
Petra
Bitte warten ..
Mitglied: laggflor
08.04.2009 um 09:34 Uhr
Textdatei muss nicht sein, habe aber kein SQL. Es Könnte auch
eine XML oder eine html Seite mit einer Tabelle die durch php dann
gleich gefüllt wird sein. Zweck der ganzen Sache ist so nee Art
voting.
Ok, Lösungen für Textdateien hast du ja bereits.

Hier noch Varianten in andere Richtungen:
1. Hoster suchen der eine SQL-Datenbank unterstützt. Hetzner bietet das zB bereits um nicht mal 2,-- im Monat an (von der Empfehlung hab ich nichts) mit ner MySQL Datenbank. Für den Zweck reicht definitiv auch schon SQLite - eine kleine File-basierte Datenbank.
2. XML, und zwar zB so: http://www.drweb.de/magazin/php-und-xml-einfach-einfach/

Vorteile von beiden Lösungen:
  • Dein Source-Code muss sich nicht um das genaue Handling der Textdatei kümmern, sondern greift nur auf bereits bestehende Resourcen zu.

Noch zwei Vorteile der Datenbank-Lösung:
  • Gleichzeigiger Zugriff (die bei einem großen Voting mal passieren können) stellen kein Problem dar.
  • Für ne Auswertung ist nur ein SQL notwendig - nicht das durchlaufen der gesamten Datei in einer Schleife.

GLG
Florian http://www.lagg.at
Bitte warten ..
Mitglied: ppmk22
09.04.2009 um 14:22 Uhr
Hab jetzt mit einer SQL Lösung angefangen.
Die Lösung hier für hätte ich aber gerne noch gewusst.
Hast Du sie Max?

Andere Frage:
Warum bekomme ich hierbei immer eine Fehlermeldung?

01.
<?php 
02.
	echo "hallo";		 
03.
	header("location: next.htm"); 
04.
?>
Warning: Cannot modify header information - headers already sent by (output started at ....../test.php:2) in ..../test.php on line 3

Ohne den "echo" Befehl geht es durch.

LG
Petra
Bitte warten ..
Mitglied: dog
09.04.2009 um 15:01 Uhr
Warum bekomme ich hierbei immer eine Fehlermeldung?

Das ist ganz einfach: Wegen der Funktionsweise von HTTP.
Eine HTTP Antwort sieht immer so aus:
01.
HTTP/1.1 301 Moved Permanently 
02.
Date: Thu, 09 Apr 2009 12:54:41 GMT 
03.
Server: Apache 
04.
Location: next.htm 
05.
 
06.
hallo
Du siehst, die header() müssen allesamt vor dem eigentlichen Inhalt der Seite kommen.
Darum produziert dein Code einen Fehler. Ein header darf nicht mehr kommen nachdem bereits der Seiteninhalt angefangen hat.
Du kannst diese Einschränkung aber auch umgehen, indem du ganz an den Anfang deiner Seite
01.
ob_start();
schreibst.

Die Lösung hier für hätte ich aber gerne noch gewusst.

Mein Code hätte die Datei in ein assoziatives Array geladen.
Svenja H. 51 
Svenja Z. 56 
Mike 39
hätte also mit read_file() folgenden Array ergeben:
Array 
    [Svenja H.] => 51 
    [Svenja Z.] => 56 
    [Mike] => 39 
)
Du hättest dann die einzelnen Werte einfach über (z.B.)
01.
$array["Svenja H."];
abrufen können oder mit foreach alle Werte auflisten...

Grüße

Max
Bitte warten ..
Mitglied: laggflor
09.04.2009 um 15:21 Uhr
Hab jetzt mit einer SQL Lösung angefangen.

Gute Entscheidung Petra - kommst du voran?
Ich helf dir gern soweit das geht, hab aber schon lange in PHP nix mehr gemacht. Ich verwende TurboGears, ein Python Framework dass für die Datenbankaufgaben SqlAlchemy benutzt. Damit schlag ich mich auch nicht mehr mit joins in SQL-Abfragen herum, sondern greife nur noch auf Objekte zu. Leider mit dem Nachteil, dass die Anforderungen für den Server steigen.

Lange Rede - kurzer Sinn:
Wenn du fragen hast bei der SQL-Lösung: You're welcome. Gibt mir die Chance einer Auffrischung der PHP-Kenntnisse.

LG Florian http://www.lagg.at/
Bitte warten ..
Mitglied: ppmk22
12.04.2009 um 11:39 Uhr
Da ich ja jetzt mit einer SQL Lösung angefangen bin, und in dieser Richtung nicht weitermachen werde, markiere ich diesen Beitrag als gelöst.

Liebe Grüsse noch mal.
Petra
Bitte warten ..
Mitglied: masterG
14.04.2009 um 11:51 Uhr
Zitat von ppmk22:
Da ich ja jetzt mit einer SQL Lösung angefangen bin, und in
dieser Richtung nicht weitermachen werde, markiere ich diesen Beitrag
als gelöst.

Liebe Grüsse noch mal.
Petra

Daher closed

masterG(Moderator).
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
gelöst Loginzeiten aus dem Ereignisprotokoll in Excel schreiben (1)

Frage von l-Ne0n zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...