Arbeiten mit Textdateien ... nur die 2. Zeile lesen

Status
Für weitere Antworten geschlossen.

mortician

Well-known member
Hey!
Habe folgendes Problem und hoffe Ihr könnt mir helfen!
Also, ich habe eine Textdatei die folgendermaßen aussieht:

Code:
1
2
3
4
5
Nur will ich in einer Php-Datei die Textdatei, nur die 2. Zeile lesen und um 1 erhöhen und wieder speichern.
Nun mein Versuch:
PHP:
<?php
$file_array = file("wahl.txt");
$de = $file_array[1];
$de++;
$datei = fopen("wahl.txt","w");
fputs($datei,"$de");
fclose($datei);
echo "$de";


?>

Als fertiges Dokument kommt immer raus:
Code:
2
Also das um 1 erhoehen funktioniert nicht!
Wäre cool, wenn Ihr mir helfen könntet!

Greetz mortician
 
so gehts:
PHP:
<?php 
$file_array = file("wahl.txt"); 
$de = $file_array[1]; 
echo $de."<hr>";
$de = $de +1; 
$datei = fopen("wahl.txt","w"); 
fputs($datei,"$de"); 
fclose($datei); 
echo "$de"; 


?>

ich kann mir gut vorstellen das es einmal geklappt hat und du dann vergessen hast die txt wieder umzuschreiben...

aber was genau willst du denn machen denn so steht später in der txt nur noch 3... bzw. $de +1

wenn du genau sagst was du machen willst sag ich dir wie :p

Falk
 
Hey!
Also ich bin gerade am Coden eines Voting-Scriptes!
Versuche es wenigstens!
Da habe ich mehrere Antworten und will natürlich wenn einer zb Antwort 2 genommen hat, Antwort 2 um 1 erhoehen...
Ich habe nämlich keine Lust für jede Antwort nen neues Textdokument zu machen!

Ps: Falls es geklappt hat, werde ich editen!
DANKE schonmal!

Greetz mortician

\\EDIT

Also es hat nicht funktioniert!
Kommt immer 1 raus!
Hilfee...

mfg mortician
 
auf jedenfall würd ich sagen is das mit DB leichter ;)
egal ich schreib mal eben was vlt. bekomm ich das in den nächsten 15 min hin und kannst das gleich mit nach hause nehmen ^^

auf jedenfall solltest du machen statt "w" einfach r+ machen sonst wird die datei geleert ;)
hab ich im beispiel verchekt ^^

Falk
 
Ich weiß nicht obs daran liegt aber ich könnt mir vorstellen dass es das ist^^"
mach mal $de = intval($file_array[1]);
 
soooooooo
das is ne billige variante aber klappt bei mir wunderbar ^^
ich persönlich hätte es anders gemacht weiß aber nich ob es dann nicht zu unverständlich wäre ;)

außerde wie gesagt "w" setzt die datei auf 0, also leert sie

vote.txt
Code:
1
1
1
1
1

vote.php
PHP:
<?php
srand(time());
$wahl = mt_rand(1,5); // eine zufalls wahl erstellen
$datei = fopen("vote.txt","r+"); 
$c = 0; // counter
while($row = fscanf($datei,"%s\n"))
 {
  $zeile[$c] = $row[0];
  if ($wahl == $c+1) 
   {
    $zeile[$c]++;
   }
  $c++;
 }
 fclose($datei);
 $datei = fopen("vote.txt","w");
$inhalt = implode("\n",$zeile);
fputs($datei,$inhalt);
fclose($datei);
?>

$wahl musst du dann später je nach user auswahl verändern ;)

Falk
 
Hey!
W Modus in R+ zu aendern hat auch nicht funktioniert.
@ BloodVortex:
hat leider auch nix gebracht.
@ Falk:
Erstmal danke für das Script.
Ich wollte nun kein fertiges Voting-Script!
Ich wollte eigentlich nur wissen, wie ich zb eine 2. Zeile aus einer Textdatei zu lesen, die Zahl um 1 zu erhoehen und dies dann in die Datei zu speichern!
Wäre nett, wenn mir das einer erklären könnte!
Bin kein Php-OberGenie, aber Basis-Wissen ist verhanden ^^

Mfg mortician
 
oO" doch bringt das was... schau hier h**p://master-net.de/test_fsb.php

Also so siehts aus ;)
PHP:
<?php 
$file_array = file("wahl.txt"); 
$de = intval($file_array[1]); 
$de++; 
echo "$de"; 


?>
 
aber so hat er es ja noch immer nicht in der datei eingefügt

willst du das überhaupt wenn ja sags mir, habe keine lust mir wieder umsonst arbeit zu machen ;)

übrigens klappt BloodVortex:
code bei mir

habe gerade php5 am laufen wegen der oop, hast du noch 4 ?

Falk
 
@falk: ach klappt das auch nicht xD
hmm..aber will er denn das ganze Array $file_array speichern oder nur $de oO"
 
sry fürs offtopic:

ich bin nichmal sicher ob er es speichern will aber fürn vote system würds sinn machen, also schätz ich mal das er $de in der zweiten stelle speichern will ^^

warten wir halt bis er sagt was er will ^^

Falk
 
Hey!
Also was is will!
Ich will die Antworten, in die textdatei "wahl.txt" speichern!
Ich habe insgesamt 5 Antworten!
Da, wenn jemand im Formular Antwort 2 angibt, sollte sich in
der "wahl.txt" die 2. Zeile um 1 erhoehen, da der User die Antwort gemacht hat!
Ich habe keine Lust insgesamt 5 Textdateien für jede Antwort zu machen!
Beispiel:
Frage: Wer wird Weltmeister bei der WM 2006?
Antworten: Brasilien; Deutschland; Frankreich; Argentinien; Ein anderes Land
Die Wahl.txt sieht noch wie folgt aus:
1
2
3
4
5
Und der User würde als Antwort "Deutschland"!
Dann soll die Wahl.txt nachher so aussehen
1
3
3
4
5
Ich hoffe nun wisst Ihr was ich meine und Ihr koennt mir helfen...
Mfg mortician
 
Probier das hier mal ;)
PHP:
<?php 
$file_array = file("wahl.txt"); 
$file_array[1] = intval($file_array[1])+1; 
$datei = fopen("wahl.txt","w"); 
$x=0;
while(array_key_exists($x,$file_array)) {
	fputs($datei,$file_array[$x]."\n"); 
	$x++;
}
fclose($datei); 
?>
Dafür brauchste aber PHP 4 >= 4.1.0 ;)
Also, ich glaub das müsste funtzen ^^"
 
Hier ist mal meine Version. Ist zwar länger als die anderen, aber dafür sollte es problemlos gehen.

Also in der Vorschau sieht es so aus, als ob das Board den Code etwas zerpflückt. Und zwar immer an der Stelle, wo der Datensatz zusammengestellt wird.
Es gibt dort definitiv keine Leerzeichen im String ($ds). Zwischen den Hochkommas "" sind keine Leerzeichen!!

PHP:
<? 
//Config
$DATENBANK = "wahl.txt";

//Übernahme von der Abstimmungsseite
$abstimmung0 = $_POST["abstimmung0"];
$abstimmung1 = $_POST["abstimmung1"];
$abstimmung2 = $_POST["abstimmung2"];
$abstimmung3 = $_POST["abstimmung3"];
$abstimmung4 = $_POST["abstimmung4"];

//nur zum testen, ich wollte nicht extra ein Formular erstellen
//$abstimmung2="hallo";

//Abfangen, wenn garnichts gewählt wurde
if ($abstimmung0=="" and $abstimmung1=="" and $abstimmung2=="" and $abstimmung3=="" and $abstimmung4=="")
{
echo "<center><br><h1><font color=red>Sie hatten nichts ausgewählt !!</font></h1></center>";
}
//sonst
else
{
  //Einlesen der Textdatei
  $file_array = file("$DATENBANK"); 

  //Einzelarray in Strings legen
  $zeile_null = $file_array[0];
  $zeile_eins = $file_array[1];
  $zeile_zwei = $file_array[2];
  $zeile_drei = $file_array[3];
  $zeile_vier = $file_array[4];

//Datensätze entsprechend der Auswahl zusammenstellen
  if ($abstimmung0!="")
   {
     //String hochzählen
     $zeile_null = $zeile_null +1; 
     //Datensatz ($ds) zusammenstellen
     $ds = "$zeile_null\r\n$zeile_eins\r$zeile_zwei\r$zeile_drei\r$zeile_vier";
  }

  if($abstimmung1!="")
    {
      //String hochzählen
      $zeile_eins = $zeile_eins +1; 
      //Datensatz ($ds) zusammenstellen
      $ds = "$zeile_null\r$zeile_eins\r\n$zeile_zwei\r$zeile_drei\r$zeile_vier";
  }

  if($abstimmung2!="")
    {
      //String hochzählen
      $zeile_zwei = $zeile_zwei +1; 
      //Datensatz ($ds) zusammenstellen
      $ds = "$zeile_null\r$zeile_eins\r$zeile_zwei\r\n$zeile_drei\r$zeile_vier";
  }

  if($abstimmung3!="")
    {
      //String hochzählen
      $zeile_drei = $zeile_drei +1; 
      //Datensatz ($ds) zusammenstellen
      $ds = "$zeile_null\r$zeile_eins\r$zeile_zwei\r$zeile_drei\r\n$zeile_vier";
  }

  if($abstimmung4!="")
    {
      //String hochzählen
      $zeile_vier = $zeile_vier +1; 
      //Datensatz ($ds) zusammenstellen
      $ds = "$zeile_null\r$zeile_eins\r$zeile_zwei\r$zeile_drei\r$zeile_vier";
  }

   //Datei zum schreiben öffnen
   $datei= fopen("$DATENBANK","w");
   //Schreiben des Datensatzes in die Datei
   fputs($datei,$ds);
   //Schließen der Datei
   fclose ($datei);
  // Bestätigung
  echo "<center><br><h2>Ihre Auswahl wurde zur Abstimmung hinzugefügt...</h2></center>";

  //Nur zum Spass die Ansicht der Textdatei - so lassen sich die Einträge live verfolgen
  $liesmal = fopen("$DATENBANK", "r");
  $liesmal_in = fread($liesmal,filesize("$DATENBANK"));
  fclose($liesmal);
  $array_liesmal = split("\n", $liesmal_in);
  echo "Inhalt der Textdatei<br><br>";
  foreach ($array_liesmal as $ausgabe)
  {
    echo "$ausgabe <br>";
  }
}
?>
 
also ich würds so machen ^^:

zumal nach 5 mal ausführen is die datei riesig wegen den ganzen absätzten ^^

so bekommst du jedenfalls die 2. reihe ;)

PHP:
$datei = str_replace("\"","\\\"",implode("\n",file("vote.txt")));
$reihe = 2;
$datei_neu = preg_match("/(".$reihe.":) (.*)/",$datei,$vote);


in vote[0] steht: 2: wert
in vote[1] steht: 2:
in vote[2] steht: wert

die datei vote.txt muss aber dann so aussehen:
Code:
1: 1
2: 1
3: 1
4: 1
5: 1

ich habs auch vollendet mit einfügen aber das willst du ja nicht oder ?

damit kannst du nämlich jede reihe auslesen und erhören oder halt jede zeile einzeln auslesen, so:

PHP:
$datei = fopen("vote.txt",r+);
while($zeile = fgets($datei,1024))
 echo $zeile."<br>";
fclose($datei);

so

HF ;)
Falk

Falk
 
Falk schrieb:
also ich würds so machen ^^:

zumal nach 5 mal ausführen is die datei riesig wegen den ganzen absätzten ^^
mist... stimmt, aber eine einfache if Abfrage kann da doch helfen ;)
Bsp:. ^^
PHP:
if(array_key_exists($x+1,$file_array)) fputs($datei,"\n");
;) xD
 
Ich habe auch noch einmal nachgebessert. Allerdings müssen die Einträge in der Datenbank (wahl.txt) so aussehen: 1|2|3|4|5 . Aber das dürfte wohl nicht das Problem sein, oder? Ist ja nur eine einmalige Anpassung. Aber dadurch wird die Textdatei nicht künstlich aufgebläht.

Auch diesmal gilt:

in der Vorschau sieht es so aus, als ob das Board den Code etwas zerpflückt. Und zwar immer an der Stelle, wo der Datensatz zusammengestellt wird.
Es gibt dort definitiv keine Leerzeichen im String ($ds). Zwischen den Hochkommas "" sind keine Leerzeichen!!

Hier mal meine 'voting.php'
PHP:
<? 
// --- Config ---
$DATENBANK = "wahl.txt";

//--- Übernahme von der Abstimmungsseite ---
$vote0 = $_POST["vote0"];
$vote1 = $_POST["vote1"];
$vote2 = $_POST["vote2"];
$vote3 = $_POST["vote3"];
$vote4 = $_POST["vote4"];

//---nur zum testen, ich wollte nicht extra ein Formular erstellen ---
//$vote2="1";

//--- Abfangen, wenn garnichts gewählt wurde ---
if ($vote0=="" and $vote1=="" and $vote2=="" and $vote3=="" and $vote4=="")
{
  echo "<center><br><h1><font color=red>Sie hatten nichts ausgewählt !!</font></h1><br><br><a href=index.php><b>Zurück zur Auswahl</b></a></center>";
}
//--- sonst ---
else
{
//--- Datei öffnen, einlesen und schliessen ---
   $datei = fopen("$DATENBANK", "r");
   $datei_in = fread($datei,filesize("$DATENBANK"));
   fclose($datei);

//--- Einlesen in einzelne Arrays ---
$file_array = explode ("|", $datei_in);

//--- Einzelarray in Strings legen ---
  $eintrag_null = $file_array[0];
  $eintrag_eins = $file_array[1];
  $eintrag_zwei = $file_array[2];
  $eintrag_drei = $file_array[3];
  $eintrag_vier = $file_array[4];

 //--- Datensatz zusammenstellen -jeweilige Auswahl um 1 erhöhen ---
  if ($vote0!="")
   {
     $eintrag_null = $eintrag_null +1; 
     $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
   }

  if($vote1!="")
    {
      $eintrag_eins = $eintrag_eins +1; 
      $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
    }

  if($vote2!="")
    {
      $eintrag_zwei = $eintrag_zwei +1; 
      $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
   }

  if($vote3!="")
    {
      $eintrag_drei = $eintrag_drei +1; 
      $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
   }

  if($vote4!="")
    {
      $eintrag_vier = $eintrag_vier +1; 
      $ds = "$eintrag_null|$eintrag_eins|$eintrag_zwei|$eintrag_drei|$eintrag_vier";
   }

//--- Datei zum schreiben öffnen, schreiben und schliessen ---
   $datei= fopen("$DATENBANK","w");
   fputs($datei,$ds);
   fclose ($datei);
   echo "<center><br><h2>Ihre Auswahl wurde zur Abstimmung hinzugefügt...</h2><hr>";

//--- Ausgabe auf der Seite ---
  $liesmal = fopen("$DATENBANK", "r");
  $liesmal_in = fread($liesmal,filesize("$DATENBANK"));
  fclose($liesmal);
  $array_liesmal = explode ("|", $liesmal_in);
  echo "<table border=1>";
  echo "<tr><th colspan=2 bgcolor=lightgrey>Momentanes Ergebnis</th></tr>";
  echo "<tr><td>Brasilien</td><td>$array_liesmal[0]</td></tr>";
  echo "<tr><td>Deutschland</td><td>$array_liesmal[1]</td></tr>";
  echo "<tr><td>Frankreich</td><td>$array_liesmal[2]</td></tr>";
  echo "<tr><td>Argentinien</td><td>$array_liesmal[3]</td></tr>";
  echo "<tr><td>Ein anderes Land</td><td>$array_liesmal[4]</td></tr>";
  echo "</table>";
  echo "<br><br><a href=index.php><b>Zurück zur Auswahl</b></a></center>";
}
?>

und hier die Abstimmungsseite 'index.php', die ich schnell zum testen gemacht habe

HTML:
<html>
<head>
<title>Wer wird Fußball-Weltmeister?</title>
</head>

<body>
<center>
<h1>Wer wird Fußball-Weltmeister?</h1>
<hr>
<form action="voting.php" method="POST" target="">
<table>
   <tr><td>Brasilien</td><td><input type="Radio" name="vote0"></td></tr>
   <tr><td>Deutschland</td><td><input type="Radio" name="vote1"></td></tr>
   <tr><td>Frankreich</td><td><input type="Radio" name="vote2"></td></tr>
   <tr><td>Argentinien</td><td><input type="Radio" name="vote3"></td></tr>
   <tr><td>Ein anderes Land</td><td><input type="Radio" name="vote4"></td></tr>
</table><br>
<input type="Submit" name="" value="Abstimmen">
</form>
</center>
</body>
</html>
 
Hey Danke an alle!
Ich werde es nachher mal probieren...
Aber was ist denn an meinem Teil falsch?!
Wieso funktioniert das denn nicht so!
Ich meine, damit man eine 2. Zeile leist und um 1 erhoeht, dafuer benoetigt man doch nicht einen so lange code...
Sorry bin kein Php-Koenig!
Also einfach Textdatei als array lesen, dann zeile zwei als array lesen und dann um 1 erhoehen und den neuen status des arrays an die 2. zeile schreiben...
Das wird doch wohl einfacher zu machen sein ... oder sehe ich das falsch?!
Mfg mortician
Und Riesen Dank für die Anteilnahme :D
 
Man man man....
ok.... bei dir ist folgendes falsch:
-Du kannst keinen String als Zahl(Integer) nehmen und den plus eins rechnen wollen -.-
-außerdem arbeitest du nicht mit der Datei sondern mit einem Array wo die Datei reinkopiert wurde. -> Woher soll denn bei deinem Script man wissen wohin das denn nun geht -.-

Am besten solltestes erst nochmal stück für stück das hier durchgehen -.- h**p://tut.php-q.net/

hier man ich hab dir deinen Code sogar verbessert....
PHP:
<?php 
$file_array = file("wahl.txt"); 
$file_array[1] = intval($file_array[1])+1; 
$datei = fopen("wahl.txt","w"); 
$x=0; 
while(array_key_exists($x,$file_array)) { 
    fputs($datei,$file_array[$x]); 
    if(array_key_exists($x+1,$file_array)) fputs($datei,"\n");
    $x++; 
} 
fclose($datei); 
?>
 
HeY!
Oke ich danke dir...
Danke auf fuer den Link!
... Das Script hat übrigens funktioniert...
Greetz mortician
 
Status
Für weitere Antworten geschlossen.

Beliebte Schlagwörter

Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.

Zurück
Oben Unten