Problem mit Formatierung von SQL-DB und XML-String

Vektor

Erfahrenes Mitglied
Hallo zusammen,

ich habe folgendes Problem.

Ich habe mir ein Skript geschrieben welches eine XML-Datei ausliest und die verschiedenen Elemente daraus in eine MySQL-Datenbank eintragen soll.

Das klappt soweit auch alles ganz gut bis auf einen Punkt: Und zwar bekomme ich aus der XML-Datei einen Wert nur als String geliefert (handelt sich um das Element "Klasse") Ich muss/möchte aber den Wert gerne als Integer Wert in meiner DB speichern (ist leichter für mich die Daten dann weiterzuverabeiten) Also habe ich eine weitere Tabelle erstellt, in der ich die möglichen Werte (es handelt sich um die Klassen einen Rollenspiels) mit einer ID versehen habe. Leider erkennt nun bei der SQL-Abfrage mein Skript nur die Klassen in der Tabelle, wenn kein Umlaut enthalten ist.(Bei Klassen wie "Waldläufer" z.B. liefern nur ein leeres Ergebnis) Ich denke daher dass es an der formatierung liegen muss. Die Tabellenspalte habe ich auf UTF-8 Bin gesetzt und in der XML-Datei steht folgendes im Header:
HTML:
<?xml version="1.0" encoding="utf-8"?>
Hier also noch der Code mit dem ich die Abfrage durchführe
PHP:
		// Für jedes "Member" Element eine Abfrage erstellen und ausführen
		foreach($xml->members->member as $member) 
		{
			// Den Text "Klasse" formatiert aus der XML-Datei auslesen
			$Klasse = substr($member->class,0,strpos($member->class,'(') - 1);
			// Abfrage erstellen und Datensatz der zugehörigen Klasse auswählen
			// Klasse wird anhand der Tabelle et_klassen bestimmt
			$querytext = "SELECT * FROM `et`.`et_klassen` WHERE `Titel` = '" . $Klasse . "'";
			$queryres = mysql_query($querytext) or die ("Fehler beim Abfragen der DB");
			$row = mysql_fetch_object($queryres);
			// Die neue Zeile in der DB eintragen
			$querytext = "INSERT INTO `et`.`et_roster` (`Name` ,`Level` ,`Klasse`) VALUES ('" . $member->name . "','" . $member->level . "','" . $row->ID . "')";
			$queryres = mysql_query($querytext) or die ("Fehler beim Abfragen der DB");
		}
Ich hoffe ihr könnt mir helfen - habe schon einiges versucht (z.B. den String mit utf8_encode() umzuwandeln

PS: Ich bin noch relativ unerfahren in PHP - also verzeit mir den ein oder anderen schrecklich anzusehenden Codemurks :rolleyes:
 
Ich habe zwar keine Lösung für mein eigentliches Problem gefunde, aber ich habe mir einfach eine alternative zusammengekritzelt welche vielleicht dem ein oder anderen hier auch helfen kann
PHP:
		foreach($xml->members->member as $member) 
		{
			$old = array ("ä" , "ö", "ü", "ß", " ");
			$new = array ("?","?","?","?","?");
			// Den Text "Klasse" formatiert aus der XML-Datei auslesen
			$Klasse1 = substr($member->class,0,strpos($member->class,'(') - 1);
			$Klasse = str_replace($old,$new,$Klasse1);		
     		$FeldKlasse = explode("?",$Klasse);
			// Abfrage erstellen und Datensatz der zugehörigen Klasse auswählen
			// Klasse wird anhand der Tabelle et_klassen bestimmt
			if (sizeof($FeldKlasse) > 1)
			{
				$querytext = "SELECT * FROM `et`.`et_klassen` WHERE `Titel` LIKE '" . $FeldKlasse[0] . "_" . $FeldKlasse[1] . "'";				
			} else {
				$querytext = "SELECT * FROM `et`.`et_klassen` WHERE `Titel` LIKE '" . $FeldKlasse[0] . "'";
			};
			$queryres = mysql_query($querytext) or die ("Fehler beim Abfragen der DB");
			$row = mysql_fetch_object($queryres);
			// Die neue Zeile in der DB eintragen
			$querytext = "INSERT INTO `et`.`et_roster` (`Name` ,`Level` ,`Klasse`) VALUES ('" . $member->name . "','" . $member->level . "','" . $row->ID . "')";
			$queryres = mysql_query($querytext) or die ("Fehler beim Abfragen der DB");
		}
 

Neue Beiträge

Zurück