php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.07.2005, 10:18  
Gast
 
Beiträge: n/a
Standard XML Daten in eine MySQL Datenbank

Hallo ihr

Nun. Schon wieder eine frage von mir.

Ich habe hier eine XML Datei mit Daten drin:

Code:
<?xml version='1.0'?>
<data>
	<entry>
                <geb>12.05.1980</geb>
		<name>Hans Wurscht</name>
                <mobile>0179258464</mobile>
	</entry>
	<entry>
                <geb>23.09.1952</geb>
		<name>Peter Lustig</name>
                <mobile>0160235648</mobile>
	</entry>
</data>
Ausserdem habe ich folgende PHP Datei mit der ich die Daten der XML Datei in eine SQL Datenbank reinbringen kann:

Code:
<?

global $element, $entry;
$entry = array();

function openElement( $parser, $tagName, $attrs )
{
	global $element;
	$element = $tagName;
}

function cData( $parser, $data )
{
	global $element, $entry;
	
	if( ( $element != 'entry' ) && ( $element != 'data' ) )
		$entry[$element] .= $data;
}

function closeElement( $parser, $tagName )
{
	global $entry;

	if( $tagName == 'entry' )
	{
		// prepare sql query
		while( list( $key, $value ) = each( $entry ) )
		{
			$fields .= "$key, ";
			$values .=  "'$value', ";
		}
		
		// remove trailing characters
		$fields = substr( $fields, 0, strlen( $fields ) - 2 );
		$values = substr( $values, 0, strlen( $values ) - 2 );

		// remove all non-visible characters except SP, LF and CR.
		$values = preg_replace( '/[^\x20-\xFF\x0A\x0D]/', '', $values );
		
		// build sql query
		$query = "INSERT INTO table ($fields) VALUES ($values)";
		print "$query
\n";
		 
		// insert data
		$result = mysql_query( $query )
			or die( "DB ERROR: query failed: $query" );

		// empty array
		$entry = array();
	}
}

// open connection and select database
$link = mysql_connect( 'localhost', 'root', '' )
	 or die( 'DB ERROR: could not connect to database!' );

mysql_select_db( 'data' ) or die( 'DB ERROR: could not select database' );

// create instance of xml parser
$parser = xml_parser_create();

// do not uppercase all element identifiers
xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );

// element handlers
xml_set_element_handler( $parser, 'openElement', 'closeElement' );

// cdata handler
xml_set_character_data_handler( $parser, 'cData' );

// open data file
if (! ( $fp = fopen( 'data.xml', 'r' ) ) )
 	die( 'ERROR: could not open file!' );


// read data line by line
while( !feof( $fp ) )
{
	// parse data line by line (without trailing \n)
	if( !xml_parse( $parser, chop( fgets( $fp ) ) ) )
		die(  'XML ERROR: ' .
			xml_error_string( xml_get_error_code( $parser ) ) . ' in line ' .
			xml_get_current_line_number( $parser )
		);
}

// close data file
fclose( $fp );

// remove instance of xml parser
xml_parser_free( $parser );

// close database connection
mysql_close( $link );

?>
Nun habe ich von SQL Datenbanken noch nicht all zu viel Ahnung

Wie muss die Datenbank genau aussehen damit das klappt?
Also wie muss die DB heissen? Welche Tables müssen da erstellt werden?

Vielen vielen vielen lieben dank schonmal für eure Hilfe

Danke

P.S. Also ich weiss das die DB data
heissen muss.

Aber ich weiss nicht welche Tables ich nehmen muss und wie ich sie erstellen muss. Also mit welchen werten oder so!
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.07.2005, 14:30  
Gast
 
Beiträge: n/a
Standard

Hat den keiner eine Ahnung wie die DB aussehen muss?

Und JA! Ich habe dieses Script nicht selber geschrieben.
Aber ich lerne am besten an solchen Scripten
Deshlab würde ich gerne wissen wie die DB dazu aussehen müsste

Würde mich wirklich freuen
  Mit Zitat antworten
Alt 22.07.2005, 14:42  
Gast
 
Beiträge: n/a
Standard

Also,

ich hab jetzt mal probiert die DB wie folgt zu erstellen:

Code:
<?php 
$db = mysql_connect("localhost","root",""); 

mysql_query ("CREATE DATABASE data",$db); 

$sql_db="data"; 

mysql_select_db($sql_db,$db) or die(mysql_error()); 
echo "Glückwunsch! Sie sind mit der Datenbank verbunden. "; 

mysql_query ("CREATE TABLE entry ( 
    geb     DATETIME, 
    name  VARCHAR(60), 
    mobile TEXT 
)") or die(mysql_error()); 
echo "Die Tables wurden in die Datenbankgeschrieben! ";

mysql_close($db) 
?>
Er hat mir die DB mit den tabls auch angelegt.

Wenn ich nun aber meine PHP Datei ausführe die ich oben gepostet habe bekomme ich nur die Meldung:

Code:
INSERT INTO table (geb, name, mobile) VALUES ('12.05.1980', 'Hans Wurscht ', '0179258464')
DB ERROR: query failed: INSERT INTO table (geb, name, mobile) VALUES ('12.05.1980', 'Hans Wurscht ', '0179258464')

Also ich scheine die DB nicht richtig anglegt zu haben!
Wisst ihr warum?
  Mit Zitat antworten
Alt 22.07.2005, 15:44  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Die Datenbank ist nicht grundsätzlich falsch angelegt. Wenn du aber den Typ DATETIME wählst, dann musst du die Daten auch im entsprechenden Fromat angeben. Und wenn du mysql_error() abgefragt hättest, käme auch eine entsprechende Meldung.
Ich würde für das Geburtsdatun allerdings nur den Typ DATE nehmen (ich glaube kaum, dass dir jemand auch die Geburtszeit angeben will). Und für die Telefonnummer ist ein Typ TEXT (65536 Byte gross!!!) doch etwas übertieben, VARCHAR(20) ist meht als genug. Also brauchst du folgende Abfragen:
Code:
// Typen ändern:
$sql = "ALTER TABLE entry
                  MODIFY geb DATE, 
                  MODIFY mobile VARCHAR(20)";

// Datum ins DB-Format ändern vorher: 12.05.1980 nachher: 1980-05-12
$datum = implode('-', array_reverse(explode('.', $datum)));

// Daten einfügen: 
$sql = "INSERT INTO entry (geb, name, mobile) VALUES ('$datum', '$name', '$mobile') ";
Ausserdem wäre es noch sinnvoll, einen Primärschlüssel zu vergeben. Das könnte der Name sein, aber noch besser eine automatisch vergebene nummerische ID.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 22.07.2005, 16:23  
Gast
 
Beiträge: n/a
Standard

@lazydog

VIELEN Dank für deine ANtwort.

nur eine frage
Wo muss ich deinen Codeschnipsel den hinpacken?


ich habe ja nun 2 php Dateien

dbinst.php / legt die DB und die Tables an
db.php / soll dann eigentlich mall dafür sorgen die XML Daten in die DB zu schreiben
data.xml / enthält die Daten.

Darum die frage: Wo muss ich deinen Codeschnipsel einbauen?
  Mit Zitat antworten
Alt 22.07.2005, 16:32  
Gast
 
Beiträge: n/a
Standard

OK!

Um das ganze nochmal zu veranschaulichen

Ich habe die data.xml jetzt mal so abgeändert:

Code:
<?xml version='1.0'?>
<data>
	<entry>
                <geb>1980-05-12</geb>
		<name>Hans Wurscht</name>
                <mobile>0179258464</mobile>
	</entry>
	<entry>
                <geb>1952-09-23</geb>
		<name>Peter Lustig</name>
                <mobile>0160235648</mobile>
	</entry>
</data>
meine DB installationsdatei sieht so aus:

Code:
<?php 
$db = mysql_connect("localhost","root",""); 

mysql_query ("CREATE DATABASE data",$db); 

$sql_db="data"; 

mysql_select_db($sql_db,$db) or die(mysql_error()); 
echo "Glückwunsch! Sie sind mit der Datenbank verbunden. "; 

mysql_query ("CREATE TABLE entry ( 
    geb     DATE, 
    name  VARCHAR(60), 
    mobile VARCHAR(20) 
)") or die(mysql_error()); 
echo "Die Tables wurden in die Datenbankgeschrieben! ";

mysql_close($db) 
?>
Meine PHP Datei die die Daten in die DB schreiben soll sieht aktuell so aus:

Code:
<?

global $element, $entry;
$entry = array();

function openElement( $parser, $tagName, $attrs )
{
	global $element;
	$element = $tagName;
}

function cData( $parser, $data )
{
	global $element, $entry;
	
	if( ( $element != 'entry' ) && ( $element != 'data' ) )
		$entry[$element] .= $data;
}

function closeElement( $parser, $tagName )
{
	global $entry;

	if( $tagName == 'entry' )
	{
		// prepare sql query
		while( list( $key, $value ) = each( $entry ) )
		{
			$fields .= "$key, ";
			$values .=  "'$value', ";
		}
		
		// remove trailing characters
		$fields = substr( $fields, 0, strlen( $fields ) - 2 );
		$values = substr( $values, 0, strlen( $values ) - 2 );

		// remove all non-visible characters except SP, LF and CR.
		$values = preg_replace( '/[^\x20-\xFF\x0A\x0D]/', '', $values );
		
		// build sql query
		$query = "INSERT INTO table ($fields) VALUES ($values)";
		print "$query
\n";
		 
		// insert data
		$result = mysql_query( $query )
			or die( "DB ERROR: query failed: $query" );

		// empty array
		$entry = array();
	}
}

// open connection and select database
$link = mysql_connect( 'localhost', 'root', '' )
	 or die( 'DB ERROR: could not connect to database!' );

mysql_select_db( 'data' ) or die( 'DB ERROR: could not select database' );

// create instance of xml parser
$parser = xml_parser_create();

// do not uppercase all element identifiers
xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );

// element handlers
xml_set_element_handler( $parser, 'openElement', 'closeElement' );

// cdata handler
xml_set_character_data_handler( $parser, 'cData' );

// open data file
if (! ( $fp = fopen( 'data.xml', 'r' ) ) )
 	die( 'ERROR: could not open file!' );


// read data line by line
while( !feof( $fp ) )
{
	// parse data line by line (without trailing \n)
	if( !xml_parse( $parser, chop( fgets( $fp ) ) ) )
		die(  'XML ERROR: ' .
			xml_error_string( xml_get_error_code( $parser ) ) . ' in line ' .
			xml_get_current_line_number( $parser )
		);
}

// close data file
fclose( $fp );

// remove instance of xml parser
xml_parser_free( $parser );

// close database connection
mysql_close( $link );

?>
Wo ist hier der Fehler drin?

Ich bekomme nun nämlich wieder den selben Fehler:

Code:
INSERT INTO table (geb, name, mobile) VALUES ('1980-05-12', 'Hans Wurscht ', '0179258464')
DB ERROR: query failed: INSERT INTO table (geb, name, mobile) VALUES ('1980-05-12', 'Hans Wurscht ', '0179258464')

Ich weiss nicht was da nicht stimmt

Bitte um eure Hilfe
  Mit Zitat antworten
Alt 23.07.2005, 18:54  
Gast
 
Beiträge: n/a
Standard

Kann mir den keiner mehr einen tipp geben??

Ich bin dankbar für jeden Hinweis und jden Tip
  Mit Zitat antworten
Alt 23.07.2005, 22:31  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

es heißt "INSERT INTO entry ... " und nicht "INSERT INTO table ..." ...
axo ist offline   Mit Zitat antworten
Alt 24.07.2005, 16:03  
Gast
 
Beiträge: n/a
Standard

@axo

VIELEN VIELEN Dank

Nun hat alles wunderbar geklappt

Danke
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Daten in Datenbank übergeben Bebre PHP Tipps 2008 2 11.02.2008 11:41
Mit php dynamisch Namen von Bildnamen sowie Pfad in mysql Datenbank speichern mallmis PHP Tipps 2008 1 19.11.2007 23:04
Daten aus MySQL Datenbank abfragen trivial Datenbanken 2 29.04.2006 17:48
Serverumzug - Problem mit MySQL Daten [GE]ReeN Datenbanken 6 28.03.2006 17:02
Probleme beim �bertragen an eine Mysql Datenbank Datenbanken 2 07.03.2006 21:26
Daten aus Datenbank sinnvoll speichern PHP Tipps 2006 15 02.02.2006 19:54
[Erledigt] Daten in MySQL Datenbank einspielen Datenbanken 1 26.10.2005 12:04
mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:33
[Erledigt] mysql datenbank anlegen...aber WIE??? PHP Tipps 2005-2 0 05.08.2005 19:33
[Erledigt] mysql datenbank anlegen...aber WIE??? Datenbanken 0 05.08.2005 19:32
[Erledigt] Variable Links mit daten aus SQL Datenbank PHP Tipps 2005-2 8 05.08.2005 13:10
Daten aus einer mySQL Datenbank auslesen GSJLink PHP Tipps 2005-2 6 25.07.2005 16:38
Daten übertragen von datenbank zu datenbank PHP Tipps 2005-2 6 20.06.2005 13:19
Auslesen von Daten aus einer mysql Datenbank + Editieren vampsoftchef PHP Tipps 2004-2 5 15.11.2004 08:31
[Erledigt] MySQL findet Datenbank nicht Datenbanken 10 21.10.2004 09:14

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
xml daten in mysql, http://www.php.de/datenbanken/27307-erledigt-xml-daten-eine-mysql-datenbank.html, http://www.php.de/datenbanken/27307-xml-daten-eine-mysql-datenbank.html, xml datei in mysql, xml daten in datenbank, xml datei in mysql datenbank, xml parser datenbank, xml php mysql, xml to mysql, xml daten in mysql datenbank, xml datenbank, xml php in mysql schreiben, php xml in datenbank, datenbank xml, xml datei in mysql tabelle, parsen von xml und automatisches mysql insert via php, xml als datenbank, xml data into mysql php, xml parser mysql php, php xml to mysql

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:47 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.