Einlesen einer E-Mail

Sven4972

Mitglied
Hallo,

mit folgendem Teil eines Scriptes lese ich eine E-Mail aus um die Daten später in die Datenbank zu schreiben:

PHP:
function auswerten($fname, $content)
{
  $content = explode("\n", $content);
  $zeilen = count($content);

  $liste = substr($content[22],5,17);
  $zeile_22 = $content[$zeilen -5]; 
  $zeile_23 = $content[$zeilen -4]; 
  $zeile_24 = $content[$zeilen -3];
  $zeile_25 = $content[$zeilen -2];
  $zeile_26 = $content[$zeilen -1];
  
  $datum_array = explode(":",$zeile_22);
  $liste_data = explode(".",$datum_array[1]);
  
  $jahr = $liste_data[0];
  $monat = $liste_data[1];
  $tag = $liste_data[2];
  $stunde = $liste_data[3];
  $minute = $liste_data[4];
  $sekunde = $liste_data[5];
  
  $jahr1 = $jahr+2000;
  
  $sp1_array = explode(":",$zeile_24);
  $sp1_player_data = explode(";",$sp1_array[1]);
  
  $spieler1 = $sp1_player_data[0];
  $spielpunkte1 = $sp1_player_data[1];
  $gewonnen1 = $sp1_player_data[2];
  $verloren1 = $sp1_player_data[3];
  $gesamt1 = $sp1_player_data[4];
  
  $sp2_array = explode(":",$zeile_25);
  $sp2_player_data = explode(";",$sp2_array[1]);
  
  $spieler2 = $sp2_player_data[0];
  $spielpunkte2 = $sp2_player_data[1];
  $gewonnen2 = $sp2_player_data[2];
  $verloren2 = $sp2_player_data[3];
  $gesamt2 = $sp2_player_data[4];
  
  $sp3_array = explode(":",$zeile_26);
  $sp3_player_data = explode(";",$sp3_array[1]);
  
  $spieler3 = $sp3_player_data[0];
  $spielpunkte3 = $sp3_player_data[1];
  $gewonnen3 = $sp3_player_data[2];
  $verloren3 = $sp3_player_data[3];
  $gesamt3 = $sp3_player_data[4];
  
  echo "<br><br>";
  
  // Nick, Spielpunkte, Gewonnen, Verloren, Gesamt
  $a[0]=array($spieler1, $spielpunkte1, $gewonnen1, $verloren1, $gesamt1);
  $a[1]=array($spieler2, $spielpunkte2, $gewonnen2, $verloren2, $gesamt2);
  $a[2]=array($spieler3, $spielpunkte3, $gewonnen3, $verloren3, $gesamt3);

  foreach($a as $v) {$s0[]=$v[0]; $s1[]=$v[1]; $s2[]=$v[2]; $s3[]=$v[3]; $s4[]=$v[4];}

  array_multisort($s4, SORT_DESC, SORT_NUMERIC, 
                  $s1, SORT_ASC, SORT_REGULAR, 
                  $s2, SORT_ASC, SORT_REGULAR, 
                  $s3, SORT_ASC, SORT_REGULAR,
                  $s0, SORT_ASC, SORT_REGULAR, $a);

Und hier mal eine Beispiel-E-Mail die ausgelesen wird:

Spielergebnis 05.12.2013
Ergebnis des Turnierspiels gespielt von Wolle3001 am 05.12.13.
------------------------------------------------------------------
Von den 36 Einzelspielen wurden 5 eingepasst.
------------------------------------------------------------------
schluse gewinnt 7 und verliert 6 Spiele.
Er/Sie hat am Schluss 11 Spielpunkte.
Das entspricht 221 Turnierpunkten.
------------------------------------------------------------------
Sting2 gewinnt 4 und verliert 2 Spiele.
Er/Sie hat am Schluss -25 Spielpunkte.
Das entspricht 395 Turnierpunkten.
------------------------------------------------------------------
Wolle3001 gewinnt 10 und verliert 2 Spiele.
Er/Sie hat am Schluss 445 Spielpunkte.
Das entspricht 1165 Turnierpunkten.
------------------------------------------------------------------
Diese Spieler haben gespielt:
schluse
Sting2
Wolle3001
------------------------------------------------------------------
##ID:13.12.04.23.00.32
##DET:Sting2;36;5
##SP1:schluse;11;7;6;221
##SP2:Sting2;-25;4;2;395
##SP3:Wolle3001;445;10;2;1165

Jetzt gibt es aber User die eine Signatur mit der E-Mail mitschicken, damit kommt das Script aber nicht klar, da es scheinbar die Zeilen von unten ausliest, und dann falsche Werte in die Datenbank geschrieben werden.
Von Oben ist die E-Mail immer gleich aufgebaut und die Zeilen bleiben da immer gleich-

Wie kann ich das Script umschreiben, damit die Zeilen von oben an gezählt und ausgelesen werden?


LG Sven
 
Hi,

ich habe den Code jetzt nicht getestet, aber mir ist aufgefallen, dass die Zeilen mit einem Index relativ zum Ende ($zeilen sollte die Anzahl der Zeilen haben) statt dem Anfang liest:

PHP:
  $zeile_22 = $content[$zeilen -5]; 
  $zeile_23 = $content[$zeilen -4]; 
  $zeile_24 = $content[$zeilen -3];
  $zeile_25 = $content[$zeilen -2];
  $zeile_26 = $content[$zeilen -1];

Wenn du die Zeilen hier nicht dynamisch einträgst, sondern den gewünschten Index, wird das besser funktionieren. Also bspw.

PHP:
$zeile_22 = $content[22];

Der Index für könnte aber auch 21 sein, je nach Sichtweise ;-) Wie gesagt, musst du halt mal testen.
 
Zurück