Verbessung am Code

Hi,

ich habe heute folgenden Code zusammen geschieben. Allerdings bin ich noch nicht so ganz zufrieden. Da die Infos von einer anderen Seite kommen und somit dynamisch sind, dadurch wenn sich die Reihenfolge ändert (z.b. kreuzeckbahn und dann hausbergbahn anstatt hausbergbahn und dann kreuzeckbahn) kommen die infos falsch in die Datenbank.

<?php
//Sockets sparen
$b = 37;
$resultat = "1 : Hausbergbahn ; 1 : Kreuzeckbahn ; 0 : Alpspitzbahn ; 0 : Hochalmbahn ; 1 : Adamswiesenlift ; 1 : Kreuzwankl-Ski-Express (6er-Sesselbahn) ; 1 : Anfängerlift C1 ; 1 : Anfängerlift C2 ; 1 : Anfängerlift C3 ; 1 : Kinderland ; 1 : Rimmler-Moos-Lift ; 1 : Trögllift ; 0 : Kandahar-Express (4er-Sesselbahn) ; 0 : Hexenkesselbahn (2er-Sesselbahn) ; 0 : Kreuzeckzubringer ; 0 : Bernadeinlift ; 0 : Längenfelderbahn (2er-Sesselbahn) ; 0 : Wankbahn ; 1 : Kochelbergabfahrt ; 0 : Hornabfahrt ; 0 : Standard-Tonihütten-Abfahrt ; 1 : Olympia-Abfahrt ; 0 : Kandahar-Abfahrt ; 1 : Bayernhaus-Abfahrt ; 1 : Kreuzwanklabfahrten ; 1 : Trögllifthang ; 1 : Kreuzwankl-Umfahrung ; 0 : Skiweg Kreuzjoch-Hexenkessel ; 0 : Hexenkessel ; 0 : Oberer Skiweg ; 1 : Mittlerer Skiweg ; 0 : Osterfelder-Abfahrt ; 0 : Bernadein-Abfahrt ; 0 : Längenfelder Abfahrt I+II ; 0 : Hochalmweg ; 0 : AlpspiX ; 0 : Rodelbahn ; ";

So bekomm ich die Daten … 1 steht für geöffnet 0 für geschlossen
Variable b ist für die Anzahl der Bahnen

$lifte = explode(" ; ", $resultat);
//foreach($lifte as $name => $wert) {
//    echo $name .": ". $wert ."<br>";
//}
for ($g=0;$g<$b;$g++) {
$lift[$g] = explode(" : ", $lifte[$g]);
}

Nun hab ich in $lift[?][0] den Status (0 oder 1) und in $lift[?][1] den Namen von der Bahn/Lift

mysql_connect("localhost", "grojer", "xxxx");
mysql_select_db("grojer");

$sql = "INSERT INTO `grojer`.`lifte` (`id`, `date`, `hausberg`, `kreuzeckbahn`,
        `alpspitzbahn`, `hochalmbahn`, `adamswiesenlift`, `kreuzwankl`, `ac1`,
        `ac2`, `ac3`, `kinderland`, `rimmler-moos`, `troegllift`, `kandahar-express`,
        `hexenkesselbahn`, `kreuzeckzubringer`, `bernadeinlift`, `laengenfelderbahn`,
        `wank`, `kochelbergabfahrt`, `hornabfahrt`, `tonihuettenabfahrt`,
        `olympiaabfahrt`, `kandaharabfahrt`, `bayernhausabfahrt`,
        `kreuzwanklabfahrten`, `troegellifthang`, `kreuzwanklumfahrung`,
        `skiweg_kreuzjoch-hexenkessel`, `hexenkessel`, `oberer_skiweg`,
        `mittlerer_skiweg`, `osterfelder_abfahrt`, `bernadein_abfahrt`,
        `laengenfelderabfahrt12`, `hochalmweg`, `alpspix`, `rodelbahn`) 
        VALUES
        (NULL, NOW(), '". $lift[0][0] ."', '". $lift[1][0] ."', '". $lift[2][0] ."', '". $lift[3][0] ."',
        '". $lift[4][0] ."', '". $lift[5][0] ."', '". $lift[6][0] ."', '". $lift[7][0] ."',
        '". $lift[8][0] ."', '". $lift[9][0] ."', '". $lift[10][0] ."', '". $lift[11][0] ."',
        '". $lift[12][0] ."', '". $lift[13][0] ."', '". $lift[14][0] ."', '". $lift[15][0] ."',
        '". $lift[16][0] ."', '". $lift[17][0] ."', '". $lift[18][0] ."', '". $lift[19][0] ."',
        '". $lift[20][0] ."', '". $lift[21][0] ."', '". $lift[22][0] ."', '". $lift[23][0] ."',
        '". $lift[24][0] ."', '". $lift[25][0] ."', '". $lift[26][0] ."', '". $lift[27][0] ."',
        '". $lift[28][0] ."', '". $lift[29][0] ."', '". $lift[30][0] ."', '". $lift[31][0] ."',
        '".$lift[32][0] ."', '". $lift[33][0] ."', '". $lift[34][0] ."', '". $lift[35][0] ."',
        '". $lift[36][0] ."');";
mysql_query($sql);
?>

Wie könnte ich das so “formulieren” das es egal ist ob in dem ersten array hausberg ist oder in dem 20. Oder wie bekomme ich es am besten hin das überprüft wird ob in $lift[13][1] “kreuzeckbahn” und das dann in die entsprechende variable ($kreuzeckbahn) mit dem status gefüllt wird.
ca. 37 if abfragen machen, für jede variable, ja auch keinen sinn oder?

lg flo

Hier nochmal der Komplette Code:

[code]<?php
// URL, die durchsucht werden soll
//$url = “http://www.vormagazin.at/html/heute.php?item=fahrschein”;
$url = “http://www.zugspitze.de/de/winter/skigebiet/garmisch-classic/lifte-pisten.htm”;

// Zeichenfolge vor relevanten Einträgen
//$startstring = “<span class=“lead”>”;
$startstring = “<td class=“iconfield” width=“23”>”;
$startstring2 = “<td width=“203”>”;

// bis zum nächsten html tag bzw. Zeichenfolge nach relevanten Einträgen
//$endstring = “<”;
$endstring = “”;

$file = fopen($url,“r”);
$i=0;
while (!feof($file)) {
// Wenn das File entsprechend groß ist, kann es unter Umständen
// notwendig sein, die Zahl 2000 entsprechend zu erhöhen. Im Falle
// eines Buffer-Overflows gibt PHP eine entsprechende Fehlermeldung aus.
$zeile[$i] .= fgets($file,2000000);
$i++;
}
fclose($file);

// Nun werden die Daten entsprechend gefiltert.
$b=0;
for ($j=0;$j<$i;$j++) {
if ($resa = strstr($zeile[$j],$startstring)) {
$resb = str_replace($startstring, “”, $resa);
$endstueck = strstr($resb, $endstring);
$ergebnis = str_replace($endstueck,"",$resb);
if(stripos($ergebnis, “open”) === false) {
$ergebnis = “0”;
} else {
$ergebnis = “1”;
}
$resultat .= “$ergebnis : “;
}
if ($resa = strstr($zeile[$j],$startstring2)) {
$resb = str_replace($startstring2, “”, $resa);
$endstueck = strstr($resb, $endstring);
$resultat .= str_replace($endstueck,””,$resb);
$resultat .= " ; ";
$b++;
}
}

// Ausgabe der Daten

//Sockets sparen
//$b = 37;
//$resultat = “1 : Hausbergbahn ; 1 : Kreuzeckbahn ; 0 : Alpspitzbahn ; 0 : Hochalmbahn ; 1 : Adamswiesenlift ; 1 : Kreuzwankl-Ski-Express (6er-Sesselbahn) ; 1 : Anfängerlift C1 ; 1 : Anfängerlift C2 ; 1 : Anfängerlift C3 ; 1 : Kinderland ; 1 : Rimmler-Moos-Lift ; 1 : Trögllift ; 0 : Kandahar-Express (4er-Sesselbahn) ; 0 : Hexenkesselbahn (2er-Sesselbahn) ; 0 : Kreuzeckzubringer ; 0 : Bernadeinlift ; 0 : Längenfelderbahn (2er-Sesselbahn) ; 0 : Wankbahn ; 1 : Kochelbergabfahrt ; 0 : Hornabfahrt ; 0 : Standard-Tonihütten-Abfahrt ; 1 : Olympia-Abfahrt ; 0 : Kandahar-Abfahrt ; 1 : Bayernhaus-Abfahrt ; 1 : Kreuzwanklabfahrten ; 1 : Trögllifthang ; 1 : Kreuzwankl-Umfahrung ; 0 : Skiweg Kreuzjoch-Hexenkessel ; 0 : Hexenkessel ; 0 : Oberer Skiweg ; 1 : Mittlerer Skiweg ; 0 : Osterfelder-Abfahrt ; 0 : Bernadein-Abfahrt ; 0 : Längenfelder Abfahrt I+II ; 0 : Hochalmweg ; 0 : AlpspiX ; 0 : Rodelbahn ; “;
$lifte = explode(” ; “, $resultat);
foreach($lifte as $name => $wert) {
echo $name .”: “. $wert .”
”;
}
for ($g=0;$g<$b;$g++) {
$lift[$g] = explode(" : ", $lifte[$g]);
}
mysql_connect(“localhost”, “grojer”, “58gz85f”);
mysql_select_db(“grojer”);

$sql = “INSERT INTO grojer.lifte (id, date, hausberg, kreuzeckbahn,
alpspitzbahn, hochalmbahn, adamswiesenlift, kreuzwankl, ac1,
ac2, ac3, kinderland, rimmler-moos, troegllift, kandahar-express,
hexenkesselbahn, kreuzeckzubringer, bernadeinlift, laengenfelderbahn,
wank, kochelbergabfahrt, hornabfahrt, tonihuettenabfahrt,
olympiaabfahrt, kandaharabfahrt, bayernhausabfahrt,
kreuzwanklabfahrten, troegellifthang, kreuzwanklumfahrung,
skiweg_kreuzjoch-hexenkessel, hexenkessel, oberer_skiweg,
mittlerer_skiweg, osterfelder_abfahrt, bernadein_abfahrt,
laengenfelderabfahrt12, hochalmweg, alpspix, rodelbahn)
VALUES
(NULL, NOW(), '”. $lift[0][0] ."’, ‘". $lift[1][0] ."’, ‘". $lift[2][0] ."’, ‘". $lift[3][0] ."’,
’". $lift[4][0] ."’, ‘". $lift[5][0] ."’, ‘". $lift[6][0] ."’, ‘". $lift[7][0] ."’,
’". $lift[8][0] ."’, ‘". $lift[9][0] ."’, ‘". $lift[10][0] ."’, ‘". $lift[11][0] ."’,
’". $lift[12][0] ."’, ‘". $lift[13][0] ."’, ‘". $lift[14][0] ."’, ‘". $lift[15][0] ."’,
’". $lift[16][0] ."’, ‘". $lift[17][0] ."’, ‘". $lift[18][0] ."’, ‘". $lift[19][0] ."’,
’". $lift[20][0] ."’, ‘". $lift[21][0] ."’, ‘". $lift[22][0] ."’, ‘". $lift[23][0] ."’,
’". $lift[24][0] ."’, ‘". $lift[25][0] ."’, ‘". $lift[26][0] ."’, ‘". $lift[27][0] ."’,
’". $lift[28][0] ."’, ‘". $lift[29][0] ."’, ‘". $lift[30][0] ."’, ‘". $lift[31][0] ."’,
’".$lift[32][0] ."’, ‘". $lift[33][0] ."’, ‘". $lift[34][0] ."’, ‘". $lift[35][0] ."’,
’". $lift[36][0] ."’);";
mysql_query($sql);

?>[/code]

Hi,

mir ist noch was eingefallen … was sagt ihr von dieser Lösung

for ($f=0;$f<$b;$f++) { $name = $lift[$f][1]; $wert = $lift[$f][0]; if(stripos($name, "Hausbergbahn") !== false) { $hausbergbahn = $wert; } if(stripos($name, "Kreuzeckbahn") !== false) { $kreuzeckbahn = $wert; } if(stripos($name, "Alpspitzbahn") !== false) { $alpspitzbahn = $wert; } //u.s.w. }

lg flo

Kommen prinzipiell immer die selben Bahnen vor?

*Edit: Geht’s drum, dass einfach in die Datenbank gespeichert werden soll, ob die Bahn in Betrieb ist, nicht mehr richtig? [Sry, aber oben steht ziemlich viel :ps: ]

*edit 2: Ansonsten würde ich auch erstmal die Funktionen in ein Array zerlegen aber etwa so:
Array (‚Bahnname‘ => status, ‚Bahn2‘ => status,…)

Dann würd ich mir ne funktion schreiben die die ganzen Namen datenbanktauglich macht, also leerzeichen ersetzt, umlaute umschreibe, bindestriche ersetzt, etc… was dabei rauskommt auch für die Spalten in der Datenbank verwenden. => auch ein array mit diesen namen anlegen.


foreach($bahnarray as $name => $status){

$clean_name = my_clean_name($name);
$new_array[$clean_name] = $status;

}

Tja, und dann wie gehabt den INSERT anlegen, dann mit den bearbeiteten Bahnnamen, weobei die Reihenfolge ja egal ist.

Mfg :wink2:

Hi thx für die antwort

[quote=„Mgier“]Kommen prinzipiell immer die selben Bahnen vor?
[/quote]
Ja eigentlich schon vill ein mal im Jahr eine Mehr od weniger aber des sollte kein problem sein

Ja genau ob sie läuft oder eben nicht

OK. Was hältst du von meinem zweiten Post?
Wäre meine letzte Idee gewesen.

for ($f=0;$f<$b;$f++) { $name = $lift[$f][1]; $wert = $lift[$f][0]; if(stripos($name, "Hausbergbahn") !== false) { $hausbergbahn = $wert; } if(stripos($name, "Kreuzeckbahn") !== false) { $kreuzeckbahn = $wert; } if(stripos($name, "Alpspitzbahn") !== false) { $alpspitzbahn = $wert; } //u.s.w. }

[quote=„Mgier“]
Tja, und dann wie gehabt den INSERT anlegen, dann mit den bearbeiteten Bahnnamen, weobei die Reihenfolge ja egal ist.[/quote]
Ja klar is die Reihenfolge egal solange die werte dem entsprechend passen … aber halt nicht wenn der Status von bahn a in bahn b steht :ps:

Danke und lg flo

Nichts :p
Nja denke halt, dass meine Idee der kürzeste Code wäre…aber musst du abwägen. „Gehen“ tuts in jedem Fall. Wie sinnvoll was ist wird dir sicher bald chrisb oder Hoffmann erkären :wink: