SELFPHP: Version 5.7.0 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



iOS DevCon 2013



Software Architecture Summit 2013


Deine Leidenschaft ist die Unterwasserfoto-grafie?


Dann ist Qozido genau das Richtige für Dich!

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler ist da!

www.qozido.de

 

CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 


Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 09.09.2010, 12:18:00
mauritius mauritius ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 23
Beiträge: 12
mauritius befindet sich auf einem aufstrebenden Ast
XML elemente in DB

Hi Leute,

mir ist es schon ein wenig peinlich, wieder um Rat fragen zu müssen. Nur sitze ich mal wieder auf dem Schlauch. Ich bin dabei, ein Script zu schreiben, dass den Austausch zwischen zwei Datenbanken realisieren soll. Der Abgleich etc. funktioniert prima, das einlesen eines XML-Dokumentes und ausgeben als XML Dokument funktioniert einwandfrei - wären da nicht die verdammten XML-Attribute. Diese machen mir mal wieder das Leben schwer, da ich damit nicht wirklich viel erfahrung hab. Die Logik an sich ist nicht schwer:

Zu erst muss geprüft werden, wie viele <user> es gibt, dann wie viele <user-groups> und dann letztendlich wie viele <user-group> - Tags. Daraus kann man ein Schleife bilden, die dies ausgibt. Hier die XML-Datei:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<userimport>
	<organization id="BehoerdeA">
		<user>
			<profile>
				 <credentials>
					<login-id>mustermann</login-id>
					<password>muster123</password>
					<enabled>1</enabled>
					<memoryQuestion>Name des Hundes?</memoryQuestion>
					<memoryAnswer>Mo</memoryAnswer>
				</credentials>
				<first-name>Peter</first-name>
				<last-name>Mustermann</last-name>
				<title>Dr.</title>
				<middleName>von</middleName>
				<addresses>
					<address name="Default Address">
						<city>Wiesbaden</city>
						<postal-code>56780</postal-code>
						<street>Frankfurter Str. 1</street>
						<street2>Raum 47</street2>
						<phone-business-direct>0621 / 6560 - 100</phone-business-direct>
						<email>peter.mustermann@localhost</email>
					</address>
				</addresses>	
				<user-groups id="AbteilungA">
					<user-group id="Beschaffer"/>
					<user-group id="Standard-Mitarbeiter"/>
				</user-groups>
				<user-groups id="AbteilungB">
					<user-group id="Genehmigender"/>
					<user-group id="Standard-Mitarbeiter"/>
					<user-group id="Aushilfe"/>
					<user-group id="Zivi"/>
				</user-groups>		
			</profile>
		</user>
		<user>
			<profile>
				 <credentials>
						<login-id>deich</login-id>
						<password>deich123</password>
						<enabled>1</enabled>
						<memoryQuestion>Name der Katze?</memoryQuestion>
						<memoryAnswer>Miau</memoryAnswer>
				</credentials>
				<first-name>Dieter</first-name>
				<last-name>Deich</last-name>
				<title></title>
				<middleName></middleName>
				<addresses>
					<address name="Default Address">
						<city>Paderborn</city>
						<postal-code>33104</postal-code>
						<street>Briloner Str. 1</street>
						<street2>Raum 46</street2>
						<phone-business-direct>05251 / 6510 - 100</phone-business-direct>
						<email>dieter.deich@localhost</email>
					</address>
				</addresses>
				<user-groups id="AbteilungC">
					<user-group id="Standard-Mitarbeiter"/>
					<user-group id="Azubi"/>
				</user-groups>
				<user-groups id="AbteilungD">
					<user-group id="Standard-Mitarbeiter"/>
					<user-group id="Azubi"/>
				</user-groups>
				<user-groups id="AbteilungE">
					<user-group id="Leiter"/>
					<user-group id="Senior"/>
				</user-groups>
				<user-groups id="AbteilungF">
					<user-group id="Betreuer"/>
					<user-group id="Gruppenleiter"/>
				</user-groups>
			</profile>
		</user>
	</organization>
</userimport>
Ist nur eine Beispiel-XML. Hier ist die PHP-Datei:
PHP-Code:
<?php  
require("config.php");

//Datenbankverbindung
 
mysql_connect("$kdb_db_host","$kdb_db_user","$kdb_db_password") OR DIE ("Die Verbindung zur Datenbank konnte nicht aufgebaut werden. Bitte Adresse, Benutzername und Passwort &uuml;berpr&uuml;fen!");
 
mysql_select_db("$kdb_db_name") OR DIE ("Die angegebene Datenbank konnte nicht gefunden werden!");

//pdf erzeugung
include("fpdf.php");

//angabe zum pfad der xml-datei und speichern in eine variable
$file "beispiel_xml.xml";
$xml simplexml_load_file($file);

//dateigröße in variable speichern
$xmlmax $xml->xpath('/userimport/organization');
$max count($xml);

//speichern der werte in ein array
$login_id $xml->xpath('/userimport/organization/user/profile/credentials/login-id');
$password $xml->xpath('/userimport/organization/user/profile/credentials/password');
$enabled $xml->xpath('/userimport/organization/user/profile/credentials/enabled');
$memoryQuestion $xml->xpath('/userimport/organization/user/profile/credentials/memoryQuestion');
$memoryAnswer $xml->xpath('/userimport/organization/user/profile/credentials/memoryAnswer');

$first_name $xml->xpath('/userimport/organization/user/profile/first-name');
$last_name $xml->xpath('/userimport/organization/user/profile/last-name');
$title $xml->xpath('/userimport/organization/user/profile/title');
$middleName $xml->xpath('/userimport/organization/user/profile/middleName');

$city $xml->xpath('/userimport/organization/user/profile/addresses/address/city');
$postal_code $xml->xpath('/userimport/organization/user/profile/addresses/address/postal-code');
$street $xml->xpath('/userimport/organization/user/profile/addresses/address/street');
$phone_business_direct $xml->xpath('/userimport/organization/user/profile/addresses/address/phone-business-direct');
$email $xml->xpath('/userimport/organization/user/profile/addresses/address/email');

$user_groups $xml->xpath('/userimport/organization/user/profile/user-groups');
$user_role $xml->xpath('/userimport/organization/user/profile/user-groups/user-group');

$profile $xml->xpath('/userimport/organization/user/profile');
//echo count($user_groups[1]);




$j 0;
for(
$i 0$i <= $max$i++){

//echo "i: ".$i."<br>";    

    
    
$enabled_int intval($enabled[$i]);
    
$postal_code_int intval($postal_code[$i]);
    
    
//eintrag in Datenbank
    
$insert "INSERT INTO kdb (loginid, password, enabled, memoryquestion, memoryanswer, firstname, lastname, title, middlename, city, postalcode, street, phonebusinessdirect, email) VALUES ('$login_id[$i]', '$password[$i]', '$enabled_int', '$memoryQuestion[$i]', '$memoryAnswer[$i]', '$first_name[$i]', '$last_name[$i]', '$title[$i]', '$middleName[$i]', '$city[$i]', '$postal_code_int', '$street[$i]', '$phone_business_direct[$i]', '$email[$i]')";
    
$eintragen mysql_query($insert);
    
    
//echo $eintragen;

$groupmax count($profile[$i])-6;
    
//echo $groupmax."<br>";
    
    //hier beginnt die Ausgabe der XML-Elemente
    
    
$tmp 0;
    for(
$j 0$j <= $groupmax$j++){
        
//echo "j: ".$j."<br>";
        
$department $user_groups[$j]->attributes();
        echo 
"Department: ".$department;
        echo 
"<br>";
        
$rolemax count($user_groups[$j]);
        
//echo "rolemax: ".$rolemax."<br>";
        
        
for($k $tmp$k <= $rolemax$k++){
            
//echo "k: ".$k."<br>";
            
$role $user_role[$k]->attributes();
            echo 
"Role: ".$role;
            echo 
"<br>";
            
$tmp $k+1;
            
//echo "<br>TEMP:".$tmp."<br>";
            
        
        
}
    }

    
}



//for($i = 0;$i <= $max;$i++){
    // for($j = 0;$j <= count($profile[0])-5;$j++){
        // $department[$j] = $user_groups[$j]->attributes();
        // //var_dump($department[$j]);
        // echo $j."Department: ".$department[$j]."<br>";

    // }
// $tmp = 0;
// for($p = $tmp;$p <= count($user_groups[1])-1;$p++){

// $role = $user_role[$p]->attributes();
        // echo "Role: ".$role."<br>";
        // $tmp = $p;
// }



        
//}        




?>
Mittels
PHP-Code:
$groupmax count($profile[$i])-6
ermittle ich, wie viele <user-groups>-Tags es gibt. Dann ermittle ich via
PHP-Code:
$rolemax count($user_groups[$j]); 
wie viele <user-group>-Tags es gibt.

Zumindest ist dies mein versuch, die Daten richtig auszugeben. Derzeit erhalte ich folgende Ausgabe:
Code:
Department: AbteilungA
Role: Beschaffer
Role: Standard-Mitarbeiter
Role: Genehmigender
Department: AbteilungB
Role: Standard-Mitarbeiter
Role: Aushilfe
Department: AbteilungC
Department: AbteilungA
Role: Beschaffer
Role: Standard-Mitarbeiter
Role: Genehmigender
Department: AbteilungB
Role: Standard-Mitarbeiter
Role: Aushilfe
Department: AbteilungC
Department: AbteilungD
Department: AbteilungE
Doch dies ist nicht so gaaaanz korrekt. Denn in die DB soll später
LoginID, Department (Abteilung) und Role gespeichert werden. Das Insert in der ersten for-Schleife funktioniert prima. Nur das richtige Auslesen der Elemente funzt nicht. Das die LoginID nicht ausgegeben wird, ist mir schon klar, warum. Nur sollte halt unter AbteilungA auch:
- Beschaffer
- Standard-Mitarbeiter

unter Abteilung B:
- Genehmigender
- Standard-Mitarbeiter
- Aushilfe
- Zivi

usw.
... stehen

Das Ausgeben der einzelnen Abteilungen ist auch kein Problem. Nur gibt er es dann 2x aus bzw. so oft, wie User. Also x* AbteilungA bis AbteilungX.

ich weiß, ich verlange von euch zu viel, aber ein Denkanstoß wäre nett. Foreach hat mir auch nicht wirklich geholfen. Vielen Dank schonmal für die große Mühe.

LG
Moritz
Mit Zitat antworten
  #2  
Alt 09.09.2010, 13:16:12
mauritius mauritius ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 23
Beiträge: 12
mauritius befindet sich auf einem aufstrebenden Ast
AW: XML elemente in DB

da ich nicht mehr bearbeiten kann, ein doppelpost.

Ein weiterer Lösungsanatz ist hier:
PHP-Code:
for($i 0;$i <= count($user_groups);$i++){
    echo 
$user_groups[$i]->attributes()."<br>";
    
    for(
$j 0$j <= count($user_groups[$i]);$j++){
        echo 
$user_role[$j]->attributes()."<br>";
    }

Die Ausgabe sieht nun so aus:
Code:
AbteilungA
Beschaffer
Standard-Mitarbeiter
Genehmigender
AbteilungB
Beschaffer
Standard-Mitarbeiter
Genehmigender
Standard-Mitarbeiter
Aushilfe
AbteilungC
Beschaffer
Standard-Mitarbeiter
Genehmigender
AbteilungD
Beschaffer
Standard-Mitarbeiter
Genehmigender
AbteilungE
Beschaffer
Standard-Mitarbeiter
Genehmigender
AbteilungF
Beschaffer
Standard-Mitarbeiter
Genehmigender

Fatal error: Call to a member function attributes() on a non-object in C:\xampplite\htdocs\kdb_test\xml_to_mysql.php on line 121
Nun brauch ich nur noch ne Möglichkeit, das er die zweite Schleife nicht wieder bei 0 beginnt, sondern da, wo er stehen geblieben ist. Durch Auslagern des Werts in $j und später damit $j füttern, hat nicht funktioniert.

Danke für die Hilfe...!
Mit Zitat antworten
  #3  
Alt 09.09.2010, 16:23:45
mauritius mauritius ist offline
Anfänger
 
Registriert seit: Sep 2010
Alter: 23
Beiträge: 12
mauritius befindet sich auf einem aufstrebenden Ast
AW: XML elemente in DB

So, sorry, das ich euch genervt hab! habs nun fast selbst hinbekommen. Nur eine Frage bleibt, die ihr mir vllt. beantworten könnt - geht um die Logik:

PHP-Code:
$j 0;
$i 0;
for(
$u 0;$u <= $anz_user+1;$u++){
    echo 
"<br>".$login_id[$u];
    
    foreach(
$profile[$u] as $key){
        echo 
"<br>".$user_groups[$i]->attributes()."<br>";
                
        foreach(
$user_groups[$i] as $key){
            echo 
$user_role[$j]->attributes()."<br>";
            
$j++;
        }
        
$i++;
    }
    

Was muss ich an diesem Code ändern, sodass ich alle Abteilungen des Benutzers "mustermann" angezeigt bekomme und dann die des Nutzers deich?

Die Ausgabe sieht derzeit mit dem oben genannten Code so aus:
Code:
mustermann
AbteilungA
Beschaffer
Standard-Mitarbeiter

AbteilungB
Genehmigender
Standard-Mitarbeiter
Aushilfe
Zivi

AbteilungC
Standard-Mitarbeiter
Azubi

AbteilungD
Standard-Mitarbeiter
Azubi

AbteilungE
Leiter
Senior

AbteilungF
Betreuer
Gruppenleiter

AbteilungG
Betreuer
Gruppenleiter

Fatal error: Call to a member function attributes() on a non-object in C:\xampplite\htdocs\kdb_test\xml_to_mysql.php on line 76
Danke für die Hilfe!
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array Elemente vertauschen N'Koto Zinde PHP für Fortgeschrittene und Experten 6 10.09.2007 00:46:36
eml elemente in DB übertragen Redmen PHP für Fortgeschrittene und Experten 1 28.09.2006 19:55:59
Lösche bestimmte Elemente aus array lutze PHP Grundlagen 4 22.12.2005 16:47:41
Array-Schlüssel nach Löschung einzelner Elemente Aichbus PHP für Fortgeschrittene und Experten 2 09.06.2003 14:53:51
Array elemente zu String Loki PHP für Fortgeschrittene und Experten 1 02.10.2002 11:33:04


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:00:21 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.


© 2001-2013 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt