Auslesen einer text-datei

hallo @ all,
ich hab als absolute anfängerin ein riesiges problem. ich möchte
eine text datei auslesen und die daten in mysql speichern und
wenn das noch nicht genug ist möchte ich auch einige dieser daten
gleich auf der selben seite wieder ausgeben.
die daten sollen jedesmal beim aufruf der seite neu in die mysql
datenbank geschrieben werden da sich die daten im text file in
unregelmäßigen abständnen verändern sprich manchmal im minuten takt
manchmal im stunden takt. das ganze ist eine rangliste für ein altes
game. die einzlne zeile sieht wie folgt aus:
1 Player1 3111 1157 345557 11 115 52 63 10 6617.024711 183 35828.615254 3 5 5 14 10 6 49 9 0 2 7 55 7 19 6 5 0 2 1 2 2 1 1 1 0 0 1
ergibt somit exact 40 daten pro zeile und die menge der zeilen ist variabel das kommt auf die menge der spieler an.

nun mein script was ich mir zusammen gepuzzelt hab was aber leider nicht wirklich geht. weder daten schreiben in mysql noch anzeige derselbigen.

<?php error_reporting(E_ALL);
include ("sqlconfig.php"); /\* infos aus textfile lesen\*/ if(isset($update)) { echo"updating database..."; /\* daten vorhanden? \*/ if ( !$ranksTXT = file\_get\_contents ( "ranks.txt" ) ) { mysql\_query("truncate table ranks"); echo"Keine Daten vorhanden"; } else { mysql\_query("truncate table ranks"); /\* daten hinzufügen \*/ $playersArray = explode( "\n", $ranksTXT); $arraysize = sizeof($playersArray) -1; for ( $i = 0; $i { $playersArray[$i] = explode ( "\t", $playersArray[$i] ); /\* str\_replace wegen der namen mit ' \*/ $rank = trim($playersArray[$i][0]); $name = str\_replace ( "'", "\'", trim($playersArray[$i][1]) ); $kills = trim($playersArray[$i][2]); $deaths = trim($playersArray[$i][3]); $score = trim($playersArray[$i][4]); $mvp = trim($playersArray[$i][5]); $games = trim($playersArray[$i][6]); $GDI = trim($playersArray[$i][7]); $nod = trim($playersArray[$i][8]); $buildingKills = trim($playersArray[$i][9]); $buildingRepair = trim($playersArray[$i][10]); $vehicleKills = trim($playersArray[$i][11]); $vehicleRepair = trim($playersArray[$i][12]); $nodHarv = trim($playersArray[$i][13]); $nodBug = trim($playersArray[$i][14]); $nodApc = trim($playersArray[$i][15]); $nodArt = trim($playersArray[$i][16]); $nodLight = trim($playersArray[$i][17]); $nodFlame = trim($playersArray[$i][18]); $nodStank = trim($playersArray[$i][19]); $nodApache = trim($playersArray[$i][20]); $nodTrans = trim($playersArray[$i][21]); $gdiHarv = trim($playersArray[$i][22]); $gdiHum = trim($playersArray[$i][23]); $gdiApc = trim($playersArray[$i][24]); $gdiMrl = trim($playersArray[$i][25]); $gdiMed = trim($playersArray[$i][26]); $gdiMam = trim($playersArray[$i][27]); $gdiOrca = trim($playersArray[$i][28]); $gdiTrans = trim($playersArray[$i][29]); $nodHon = trim($playersArray[$i][30]); $nodRef = trim($playersArray[$i][31]); $nodObi = trim($playersArray[$i][32]); $nodPp = trim($playersArray[$i][33]); $nodAir = trim($playersArray[$i][34]); $gdiBar = trim($playersArray[$i][35]); $gdiRef = trim($playersArray[$i][36]); $gdiAgt = trim($playersArray[$i][37]); $gdiPp = trim($playersArray[$i][38]); $gdiWf = trim($playersArray[$i][39]); if ( ( $sql = mysql\_connect( $dbhost, $dbuser, $dbpasswd ) ) == FALSE ) $sqlError = "Kann keine Datenbankvrbindung herstellen. Suchfunktion deaktiviert"; if ( mysql\_select\_db ( $dbname ) == false ) { $sql = false; $sqlError = "Kann keine Datenbankvrbindung herstellen. Suchfunktion deaktiviert"; } echo "Falsche Einstellungen in sqlconfig.php"; mysql\_query ( "TRUNCATE TABLE ranks" ); mysql\_query("INSERT INTO ranks (rank, name, kills, deaths, score, mvp, games, gdi, nod, buildingKills, buildingRepair, vehicleKills, vehicleRepair, nodHarv, nodBug, nodApc, nodArt, nodLight, nodFlame, nodStank, nodApache, nodTrans, gdiHarv, gdiHum, gdiApc, gdiMrl, gdiMed, gdiMam, gdiOrca, gdiTrans, nodHon, nodRef, nodObi, nodPp, nodAir, gdiBar, gdiRef, gdiAgt, gdiPp, gdiWf) VALUES('".$rank."','".$name."','".$kills."','".$deaths."','".$score."','".$mvp."','".$games."','".$gdi."','".$nod."','".$buildingKills."','".$buildingRepair."','".$vehicleKills."', '".$vehicleRepair."','".$nodHarv."','".$nodBug."','".$nodApc."','".$nodArt."','".$nodLight."','".$nodFlame."','".$nodStank."','".$nodApache."','".$nodTrans."','".$gdiHarv."', '".$gdiHum."','".$gdiApc."','".$gdiMrl."','".$gdiMed."','".$gdiMam."','".$gdiOrca."','".$gdiTrans."','".$nodHon."','".$nodRef."','".$nodObi."','".$nodPp."','".$nodAir."', '".$gdiBar."','".$gdiRef."','".$gdiAgt."','".$gdiPp."','".$gdiWf."')") or die(mysql\_error()); } { echo""; } } else { /\* alles erledigt nun die neuen daten anzeigen \*/ echo"Rank Name Score Kills Deaths GDI Nod Games "; /\* verteilen der ergebisse. max anzeige 50 pro seite \*/ if(!isset($\_GET['pagecount'])){ $pagecount = 1; } else { $pagecount = $\_GET['pagecount']; } $max\_results = 50; $from = (($pagecount \* $max\_results) - $max\_results); $total\_results = mysql\_result(mysql\_query("SELECT COUNT(\*) as Num FROM ranks"),0); $total\_pages = ceil($total\_results / $max\_results); $fetch = mysql\_query("SELECT \* FROM `ranks` ORDER BY score DESC limit $from, $max\_results"); while($myrow = mysql\_fetch\_object($fetch)) { echo"$myrow-\>rank $myrow-\>name $myrow-\>score $myrow-\>kills $myrow-\>deaths $myrow-\>gdi $myrow-\>nod $myrow-\>games "; } } echo""; echo""; /\* hinzufügen der links um alle seiten zu sehen \*/ if($pagecount \> 1){ $prev = ($pagecount - 1); echo "[ "; } for($i = 1; $i $i](%255C%2522%2522.%2524_SERVER%255B'PHP_SELF'%255D.%2522?pagecount=%2524prev%255C%2522)  "; } } if($page ich hab mittlerweile so viele sachen probiert statt file\_get\_contens, hab ich mit fopen rumgespielt und auch bei mysql einiges ausprobiert naja alles was ichso beim googlen gefunden habe aber nun weiss ich echt nicht weiter. wäre schön wenn mir einer von euch helfen könnte. achja bitte nicht lachen denn ich setze mich grade mal seit 5 tagen mit php auseinander das aber auch ca 16 stunden am tag allerdings muss ich wohl zu schräg denken das ich es nicht gebacken bekomme. jemand ne idee????

Hi maren,

hab gerade nicht viel Zeit, daher nur ein paar Denkanstöße in der Hoffnung das sie weiterhelfen.

Lies die Datei mit
$playersArray = file(„ranks.txt“);

ein, das liest dir die Datei in das Array $playersArray, pro Zeile der Datei ein Element.

Und woher kommt deine Variable $update? Aus einem HTML-Formular? Wenn ja dann kommt es auf die PHP-Version und die Einstellungen an. Eventuell müsstest du $_GET[„update“] oder $_POST[„update“] verwenden.

Du hast auch in deinem Quelltext keine Verbindung zur Datenbank aufgebaut, z.B. mit mysql_connect

Mir hilft es oft, wenn ich mir mittels echo einfach die Variablen an einem bestimmten Punkt ausgebe um den Inhalt zu prüfen. Wenn über den Inahlt eines Arrays Unklarheit herrscht, benutze ich print_r.

Gruß Michi

danke für die schnelle antwort. das mit dem verbindung herstellen hab
ich bei dem ganzen gepuzzel schon garnicht mehr gesehen. ich seh den
wald vor lauter bäumen nicht. das mit dem update wahr wohl auch
wieder ein denkfehler von mir nach dem motto klickst du die seite an
= update. naja ich = falsch denker (schäm)…

es gibt nur diese seite und die mit den logindaten zu mysql. für den
anfang würde es mir reichen wenn er die daten in mysql einträgt wenn
man die seite öffnet/lädt und gleichzeitig ein paar info´s ausliest
und die dann auf der selben seite anzeigt. später will ich dann noch
ne suchfunktion einbauen wo jeder spieler alle infos über sich
angezeigt bekommt sprich irgendjemand will alles über player1 wissen
dann kann er den namen anklicken oder in einem suchfeld eingeben und
bekommt dann alle 40 daten pro spieler angezeigt. aber soweit bin ich
noch lange nicht und dachte mir fang mal klein an aber da scheitere
ich schon…

hier nun das script wie ich es nun verstanden habe was aber leider (heul) nicht funzt.

<?php error_reporting(E_ALL);
include ("sqlconfig.php"); /\* Verbindung SQL herstellen\*/ $sql = mysql\_connect("$dbhost, $dbuser, $dbpasswd") or die ("Fehler - Keine Verbindung möglich"); /\* daten lesen und hinzufügen \*/ $playersArray = file("ranks.txt"); $playersArray = explode( "\n", $ranksTXT); $arraysize = sizeof($playersArray) -1; for ( $i = 0; $i { $playersArray[$i] = explode ( "\t", $playersArray[$i] ); /\* str\_replace wegen der namen mit ' \*/ $rank = trim($playersArray[$i][0]); $name = str\_replace ( "'", "\'", trim($playersArray[$i][1]) ); $kills = trim($playersArray[$i][2]); $deaths = trim($playersArray[$i][3]); $score = trim($playersArray[$i][4]); $mvp = trim($playersArray[$i][5]); $games = trim($playersArray[$i][6]); $GDI = trim($playersArray[$i][7]); $nod = trim($playersArray[$i][8]); $buildingKills = trim($playersArray[$i][9]); $buildingRepair = trim($playersArray[$i][10]); $vehicleKills = trim($playersArray[$i][11]); $vehicleRepair = trim($playersArray[$i][12]); $nodHarv = trim($playersArray[$i][13]); $nodBug = trim($playersArray[$i][14]); $nodApc = trim($playersArray[$i][15]); $nodArt = trim($playersArray[$i][16]); $nodLight = trim($playersArray[$i][17]); $nodFlame = trim($playersArray[$i][18]); $nodStank = trim($playersArray[$i][19]); $nodApache = trim($playersArray[$i][20]); $nodTrans = trim($playersArray[$i][21]); $gdiHarv = trim($playersArray[$i][22]); $gdiHum = trim($playersArray[$i][23]); $gdiApc = trim($playersArray[$i][24]); $gdiMrl = trim($playersArray[$i][25]); $gdiMed = trim($playersArray[$i][26]); $gdiMam = trim($playersArray[$i][27]); $gdiOrca = trim($playersArray[$i][28]); $gdiTrans = trim($playersArray[$i][29]); $nodHon = trim($playersArray[$i][30]); $nodRef = trim($playersArray[$i][31]); $nodObi = trim($playersArray[$i][32]); $nodPp = trim($playersArray[$i][33]); $nodAir = trim($playersArray[$i][34]); $gdiBar = trim($playersArray[$i][35]); $gdiRef = trim($playersArray[$i][36]); $gdiAgt = trim($playersArray[$i][37]); $gdiPp = trim($playersArray[$i][38]); $gdiWf = trim($playersArray[$i][39]); if ( ( $sql = mysql\_connect( $dbhost, $dbuser, $dbpasswd ) ) == FALSE ) $sqlError = "Kann keine Datenbankvrbindung herstellen."; if ( mysql\_select\_db ( $dbname ) == false ) { $sql = false; $sqlError = "Kann keine Datenbankvrbindung herstellen."; } echo "Falsche Einstellungen in sqlconfig.php"; mysql\_query ( "TRUNCATE TABLE ranks" ); mysql\_query("INSERT INTO ranks (rank, name, kills, deaths, score, mvp, games, gdi, nod, buildingKills, buildingRepair, vehicleKills, vehicleRepair, nodHarv, nodBug, nodApc, nodArt, nodLight, nodFlame, nodStank, nodApache, nodTrans, gdiHarv, gdiHum, gdiApc, gdiMrl, gdiMed, gdiMam, gdiOrca, gdiTrans, nodHon, nodRef, nodObi, nodPp, nodAir, gdiBar, gdiRef, gdiAgt, gdiPp, gdiWf) VALUES('".$rank."','".$name."','".$kills."','".$deaths."','".$score."','".$mvp."','".$games."','".$gdi."','".$nod."','".$buildingKills."','".$buildingRepair."','".$vehicleKills."','".$vehicleRepair."','".$nodHarv."','".$nodBug."','".$nodApc."','".$nodArt."','".$nodLight."','".$nodFlame."','".$nodStank."','".$nodApache."','".$nodTrans."','".$gdiHarv."','".$gdiHum."','".$gdiApc."','".$gdiMrl."','".$gdiMed."','".$gdiMam."','".$gdiOrca."','".$gdiTrans."','".$nodHon."','".$nodRef."','".$nodObi."','".$nodPp."','".$nodAir."','".$gdiBar."','".$gdiRef."','".$gdiAgt."','".$gdiPp."','".$gdiWf."')") or die(mysql\_error()); } { echo""; } } else { /\* alles erledigt nun die neuen daten anzeigen \*/ echo"Rank Name Score Kills Deaths GDI Nod Games "; /\* verteilen der ergebisse. max anzeige 50 pro seite \*/ if(!isset($\_GET['pagecount'])){ $pagecount = 1; } else { $pagecount = $\_GET['pagecount']; } $max\_results = 50; $from = (($pagecount \* $max\_results) - $max\_results); $total\_results = mysql\_result(mysql\_query("SELECT COUNT(\*) as Num FROM ranks"),0); $total\_pages = ceil($total\_results / $max\_results); $fetch = mysql\_query("SELECT \* FROM `ranks` ORDER BY score DESC limit $from, $max\_results"); while($myrow = mysql\_fetch\_object($fetch)) { echo"$myrow-\>rank $myrow-\>name $myrow-\>score $myrow-\>kills $myrow-\>deaths $myrow-\>gdi $myrow-\>nod $myrow-\>games "; } } echo""; echo""; /\* hinzufügen der links um alle seiten zu sehen \*/ if($pagecount \> 1){ $prev = ($pagecount - 1); echo "[ "; } for($i = 1; $i $i](%255C%2522%2522.%2524_SERVER%255B'PHP_SELF'%255D.%2522?pagecount=%2524prev%255C%2522)  "; } } if($page der einzige fehler der zur zeit angezeigt wird ist dieser: Parse error: parse error, unexpected '}' in C:\FoxServ\www\12.php on line 77 mach ich die klammer weg seh ich folgendes: Parse error: parse error, unexpected T\_ELSE in C:\FoxServ\www\12.php on line 78

Hi maren,

du musst etwas besser aufpassen.

nach der Zeile

$playersArray = file(„ranks.txt“);

Befindet sich bereits in jedem Element des Arrays $playersArray je eine Zeile aus der Datei ranks.txt.
Dein anschließender Aufruf von

$playersArray = explode( „\n“, $ranksTXT);

Löscht den gesamten Inhalt den du zuvor eingelesen hast und $playersArray ist danach leer.

Hättest du meinen Rat befolgt und dir die Variable $playersArray mit
print_r($playersArray);
ausgeben lassen, hättest du selber gesehen, das diese leer ist.

Es wäre für dich eventuell auch leichter, wenn du das Skript sozusagen Schritt für Schritt aufbaust, will heißen mach dir ein kleines Skript, dass nichts anderes tut als deine Variablen in die Datenbank zu schreiben. Du kannst hier ja zum probieren feste Werte benutzen. Wenn das funktioniert, dann mach dich daran, dass du die Datei ausliest und richtig aufbereitest (Prüfe das mit print_r und echo). Wenn das auch funktioniert, dann kombiniere das miteinander und dann kommt der nächste Teil und so weiter. Das ist für einen Anfänger weit übersichtlicher und du entdeckst solche Stolperfallen allein.

deine for-Schleife kannst du noch optimieren indem du

$arraysize = sizeof($playersArray) -1;

weglässt und als Schleife statt

for ( $i = 0; $i