fgetcsv - nur bestimmte zeilen auslesen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • fgetcsv - nur bestimmte zeilen auslesen

    Hallöchen,
    ich hab mir ein Script aus verschiedenen Snippets zusammen gebastelt welches Daten aus einer .txt vom Server läd und in die database.txt und dannin eine Datenbank schreibt.
    Die TXT kommt vom Server eines Browsergames und enthält die Spielerdaten.

    Der Aufbau der TXT Daten sieht so aus:
    player_id, name, ally_id, villages, points, rank
    Beispiel Datensatz:
    5521,anddie,100,9,43213,459

    Die TXT enthält allerdings über 2000 Zeilen, sodass jedes mal wenn das Script aktualisiert wird viele Daten geschrieben werden müssen.

    Das funktioniert auch alles.

    Ich würde jetzt allerdings gerne nur bestimmte Zeilen in die DB schreiben welche die gewünschte ally_id enthalten.

    Kann mir da jemand helfen? Bin schon ne Weile raus aus dem aktiven scripting.
    Ich vermute, dass ich das arrray $data nach der id durchsuchen muss. Aber wie genau das geht - da steh ich grad auf dem Schlauch

    PHP Code:
    <?php
    error_reporting
    (E_ALL);

    $dbhost 'localhost';
    $dbuser 'ds_database';
    $dbpass 'passwort';

    $conn mysql_connect($dbhost$dbuser$dbpass) or die ('Error connecting to mysql');
    $dbname 'ds_database';
    mysql_select_db($dbname);


    $file="database.txt";
        
    //USER
        //Tabelle "player" leeren
        
    mysql_query("TRUNCATE TABLE player");
        
    //Spielerdaten von Server laden und...
        
    $lines gzfile('http://de123.die-staemme.de/map/player.txt.gz');
        if(!
    is_array($lines)){die('Datei konnte nicht geöffnet werden');}
        
    //...Datei "databases.txt" öffnen und schreiben
        
    $fp=fopen($file'w');
        foreach(
    $lines as $line){
            
    fwrite($fp,  utf8_decode(urldecode($line)));
        }

    //fgetcsv als alternative zu LOAD DATA LOCAL INFILE - test
    $row 0;
    $handle fopen($file"r");

    while ((
    $data fgetcsv($handle1000",")) !== FALSE) {
        if (
    $row == 0)
            {
            
    $num count($data);
            
    $row++;
            for (
    $c=0$c $num$c++) {
            }
        } else {
            
    //Zählt die Anzahl der Felder in einer Reihe
            
    $num count($data);
            
    //Den Zeilwert um 1 erhöhren (Also eine Zeile weiter springen)
            
    $row++;
            
    //iteriert / wiederholt das für jede Zeile der Datei
            
    for ($c=0$c $num$c++)

            
    $query =
            
    "INSERT INTO player (player_id, name, ally_id, villages, points, rank)
            VALUES ('"
    .$data[0]."','".$data[1]."','".$data[2]."','".$data[3]."','".$data[4]."','".$data[5]."')"

            
    or die(mysql_error());
            if(
    mysql_query($query))
            echo 
    "Erfolgreich eingetragen<br/>";
            else
            echo 
    mysql_error() ;
            echo 
    "<br/>";
        }
    }

    fwrite($fp"");
    fclose($fp);
    unset(
    $lines);
    unset(
    $line);

    ?>
    Last edited by analyzer; 11-05-2016, 16:43.

  • #2
    PHP Code:
    $query =
            
    "INSERT INTO player (player_id, name, ally_id, villages, points, rank)
            VALUES ('"
    .$data[0]."','".$data[1]."','".$data[2]."','".$data[3]."','".$data[4]."','".$data[5]."')" 
    Nach deinem Programm ist ally_id = $data[2]. Demnach..:

    PHP Code:
     .. if ($data[2] == $gewünschte_ally_id) .. tu dies .. tu das 
    War das Deine Frage?
    mfg

    Comment

    Working...
    X