Ergänzung von Daten in Textdatei per PHP?

crazMonkey

Grünschnabel
Hallo Leute hab da ein kleines aber sehr bescheidenes Problem, das ich mal schnell erleutere und hoffe jemand kann mir helfen :) Vorab: Sollte es fragen geben oder jemand mein geistiges "Wirwa" nicht ferstehen, einfach eine gezielte Frage stellen.

Dann fang ich mal an. Das Problem ist dies das ich eine Textdatei als Tabelle bzw. Datenbank verwende und diese mit PHP auslese um eine kleine "Topliste" auf einer Seite zur Verfügung zu stellen. Wieso ich eine Textdatei verwende und kein MySQL? Ganz einfach, ich möchte diese Topliste dann auch Leuten zur Verfügung stellen die selber kein MySQL auf ihrem Server haben bzw. keine Ahnung davon haben.

Das ist die Datenbank dat_anbieter:
Code:
1|001|Mir|Test1|http://test.de|Bla Bla Nicht toll|278|00.00.00
2|002|Mir|ba|http://test.de|Bla Bla Nicht toll2|7|00.00.00
3|001|Mir|sadfsda|http://test.de|Bla Bla Nicht toll3|9|00.00.00
4|006|Mir|asd|http://test.de|Bla Bla Nicht toll4|1|00.00.00
5|039|Mir|sdaf|http://test.de|Bla Bla Nicht tol5l|1|00.00.00
6|006|Mir|asdf|http://test.de|Bla Bla Nicht toll6|1|00.00.00
7|005|Mir|asdf|http://test.de|Bla Bla Nicht tol234l|1|00.00.00
8|001|Mir|sadf|http://test.de|Bla Bla Nicht tol234l|3|00.00.00
9|007|Mir|asdert|http://test.de|Bla Bla Nicht to234ll|4|00.00.00
10|009|Mir|12345678901|http://test.de|Bla Bla Nicht to234ll|638|00.00.00
11|010|Mir|sdaf|http://test.de|Bla Bla Nicht to8765ll|1800|00.00.00
12|111|Mir|fasdf|http://test.de|Bla Bla Nicht wttoll|99|00.00.00
13|001|Mir|wert|http://test.de|Bla Bla Nicht tewtoll|2|00.00.00
18|002|Mir|zrew|http://test.de|Bla Bla Nicht toll|22|00.00.00

Die Top 10 die aus der Base ausgelesen werden:
Code:
$anzahls_array = array();
$bank = file("dbase/dat_anbieter");
for($x=0;$x<count($bank);$x++) {
  $spalte = explode ("|",$bank[$x]);
  $zeile=$spalte[6]."|".$spalte[3]."|".$spalte[0];
  array_push($anzahls_array,$zeile);
}
arsort($anzahls_array,SORT_NUMERIC);
$x = 1;
foreach($anzahls_array as $y) {
  $daten = explode ("|", $y);
  if($x!=11) {
    echo "<a href=\"link.php?lid=".$daten[2]."\" target=\"_blank\">".$x.". ".$daten[1]." (".trim($daten[0]).")</a></br>";
    $x++;
  }
}

Bis hierhin klappt ja alles, die Top 10 werden nach Anzahl der Klicks sortiert und als Link ausgegeben. Nun soll das Script in der link.php den Wert der Klicks erhöhen (um 1) und diesen neuen Wert in die Base schreiben.

Code von link.php:
Code:
$bank = file("dbase/dat_anbieter");
foreach($bank as $zeile) {
  list($lid,$kid,$von,$name,$link,$besch,$klicks,$datum) = explode("|",$zeile);
  $link_link[$lid] = $link;
  $link_name[$lid] = $name;
  $link_klicks[$lid] = $klicks;
}

$link_klicks[$_GET['lid']]++;

for($x=0;$x<count($bank);$x++) {
  $spalte = explode("|",$bank[$x]);
  if($spalte[0]==$_GET['lid']) {
    echo $spalte[0]."|".$spalte[1]."|".$spalte[2]."|".$spalte[3]."|".$spalte[4]."|".$spalte[5]."|".$link_klicks[$_GET['lid']]."|".$spalte[7]."</br>";
  } else {
    echo $spalte[0]."|".$spalte[1]."|".$spalte[2]."|".$spalte[3]."|".$spalte[4]."|".$spalte[5]."|".$spalte[6]."|".$spalte[7]."</br>";
  }
}



if(empty($_GET['lid'])) {
  echo "Es wurde keine ID &uuml;bergeben</br>";
} else {
  if(empty($link_link[$_GET['lid']])) {
    echo "Die ID ".$_GET['lid']." ist ung&uuml;ltig";
  } else {   
  /*echo "<html>
    <head>
    <title>".$link_name[$_GET['lid']]."</title>
    <head>
    <frameset framespacing=\"0\" border=\"false\" rows=\"30,*\" frameborder=\"0\">
      <frame name=\"haftung\" scrolling=\"no\" noresize src=\"bla.html\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\" border=\"0\">
      <frame name=\"anbieter\" src=\"".$link_link[$_GET['lid']]."\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\" border=\"false\">
      <noframes>
        Ihr Browser kann diese Seite leider nicht anzeigen!
      </noframes>
    </frameset>
    </head>
    </html>";*/
  }
}

Soweit ist der Code vom link.php. Wurde jetzt schon zichmal geändert.

Das Problem ist jetzt das ich den neuen Wert des Klicks nicht in die Datenbank bekomme. Die einzigste Möglichkeit die mir eingefallen ist und auch funktoniert hat war das ich jedesmal die Datenbank leere und neu beschreibe, ein Bruchteil davon ist im derzeitigen Code ja noch zu sehen. Dadurch ergibt sich nur das Problem das wenn die Base größer ist dauert das eine weile und das will ich keinem zumuten wollen :)

Hoffe alles ist verständlich und ihr könnt mir helfen.

Gruß Monkey
 
Zuletzt bearbeitet:
crazMonkey hat gesagt.:
Die einzigste Möglichkeit die mir eingefallen ist und auch funktoniert hat war das ich jedesmal die Datenbank leere und neu beschreibe....
Mit [phpf]fseek[/phpf] kannst du den Dateizeiger an der gewünschten Position platzieren und dann das Gewünschte hineinschreiben.

Wie du die richtige Stelle finden könntest, vermag ich dir im Moment nicht zu sagen.
 
Sven Mintel hat gesagt.:
Mit [phpf]fseek[/phpf] kannst du den Dateizeiger an der gewünschten Position platzieren und dann das Gewünschte hineinschreiben.

Wie du die richtige Stelle finden könntest, vermag ich dir im Moment nicht zu sagen.

Daran habe ich auch schon gedacht nur leider ist es mir bis jetzt noch nicht gelungen denn nachfolgenden Eintrag zu löschen.

Der Eintrag in der Datenbank sieht dann so aus:
1|001|Mir|Test1|http://test.de|Bla Bla Nicht toll|278279|00.00.00

Der Eintrag muss aber 279 lauten.
 
Hallo,
eine neue Idee die ich hätte wäre das ich die Klicks zu jedem Datensatz in einer extra Datei speichere.

Wen also beispielsweise der Datensatz
1|001|Mir|Test1|http://test.de|Bla Bla Nicht toll|278|00.00.00
in der Datei steht, wird dieser ohne die Klicks in die Datei geschrieben und eine neue Datei angelegt die den Namen 1 besitzt so könnte ich jedes mal die Klicks erhöhen ohne in die eigentliche Datenbank zu schreiben.

Das ganze würde dann so aussehen das ich in der Datenbank diesen Eintrag stehen hätte:
1|001|Mir|Test1|http://test.de|Bla Bla Nicht toll|00.00.00
und in einer extra Datei namens 1 (also die ID des Datensatzes):
278
stehen würde.

Dies hat nur den Nachteil das es zu jedem Datensatz auch eine extra Datei geben muss. Also 100 Einträge = 101 Dateien (1 Datenbank und 100 Klick- Dateien).
Hat wirklich keiner eine andere oder bessere Idee?
 
Ich befürchte, mehr als die von dir genannten Varianten gibts da nicht.
Welche sinnvoller ist, dürfte davon abhängen, wieviel Einträge du in der DB zukünftig erwartest.
 

Neue Beiträge

Zurück