php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.11.2004, 13:43  
Gast
 
Beiträge: n/a
Standard [Erledigt] Insert into ROW per Loop - Hiiilllfeee ;-)

Hallo,

ich bin SQL Newbie und möchte die Attribute einer geparsten XML Datei in eine SQL Datenbank schreiben um Sie später zu verarbeiten.

Alles schön der Parser funzt(Expat) die Tabelle wird angelegt jedoch folgendes Problem:

anstatt EINEN Datensatz zu schreiben, wird irgendwie für jede Feld-Variable ein neuer angelegt... sieht dann so aus:



wie gestalte ich das Insert so, dass nur pro Loop in den ersten Datensatz geschrieben wird?

Hier ist der Code:
PHP-Code:
// Jedes XML Attribut ins array legen

    
foreach ($element_attribute as $Key => $Value){
    
$Data["$element_name:$Key"] = strtr(trim($Value), $XMLEntities);

// Solange das Element "game" heisst, Attribute mitzählen...

    
if($element_name == "game"){
        
$attribcount++;

// Und in Feld $Key von Tabelle "Server" eintragen

        
$sql_soldner_table "INSERT INTO Server ($Key) VALUES ('{$Data["$element_name:$Key"]}')";
        
$result_soldner_table mysql_query($sql_soldner_table);
               if(!
$result_soldner_table){
                echo 
mysql_error();
            }
    } 


Hier noch die XML (Auszug mit den "elements" und "attribs" zum Verständnis:

<xml>
<game gamemode="Conquest" map="K-Town" roundtime="1796" servername="^0[SFC]^2GER| ^5MapPack2.3| ^3(silent-force-clan.de)">
...
</game>
</xml>


Nur da ich den INSERT Ablauf nicht wirklich kapiere, läuft da was schief...
Bitte helft mir, Lösung wär halt ihm irgendwie zu sagen dass die Werte zu den Attributen in denselben Datensatz rein sollen, die Anzahl der Attribute ändert sich aber von TAG zu TAG und wird daher mit der Hilfsvariable $attribcount gezählt (eigentlich nur zum debuggen), vielleicht muss ich da ansetzen?
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 11.11.2004, 15:01  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

So wie ich das verstehe, hast du für jedes Element in $element_attribute je ein Attribut in der Tabelle, d.h. mit dieser Schleife möchtest du jeweils eine Zeile einfügen. Statt dessen machst du aber für jedes Element eine Zeile (ein insert = eine Zeile). Ändere das folgendermassen:
PHP-Code:
    $felder = array();
    
$werte = array();
    foreach (
$element_attribute as $Key => $Value# Zeile aufbauen
    
{
        
$felder[] = $Key;   # Attributnamen in Array
        
$werte[] = strtr(trim($Value), $XMLEntities); # Werte in Array

// Solange das Element "game" heisst, Attribute mitzählen...

        
if($element_name == "game")
        {
            
$attribcount++;
         }

    }
    
$feld_str implode(', '$felder); # Attributnamen in String, kommagetrennt
    
$wert_str "'" implode("', '"$werte) . "'"# Werte in String, kommagetrennt in Anführunszeichen
    
$sql_soldner_table "INSERT INTO Server ($feld_str) VALUES ($wert_str)"# Zeile schreiben
    
$result_soldner_table mysql_query($sql_soldner_table) or die(mysql_error()); 
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 11.11.2004, 22:57  
Gast
 
Beiträge: n/a
Standard

Jau danke, werde ich gleich morgen auf Arbeit probieren...

Feedback folgt
  Mit Zitat antworten
Alt 12.11.2004, 09:35  
Gast
 
Beiträge: n/a
Standard Es geht voran ;-)

Also hab das jetzt mal so umgesetzt...

Die Voraussetzung für das Schreiben der Werte in die Tabelle Server soll sein, dass es sich auch um Server Attribute handelt (Elemente die mit "game" anfangen), das klappt soweit ich das sehen kann.

Später kommen dann noch andere Elemente dazu.

Mit dem jetzigen geänderten Code habe ich folgendes Bild nach einem Aufruf:




Ich krieg also schonmal einen Datensatz voll, nur schreibt er jetzt nur in den letzten alle Werte. Sind halt immernoch 3 Datensätze zuviel. Is da vielleicht der Fehler in der Iteration? Die richtigen Werte sind an der richtigen Stelle, irgendwie muss ich doch verhindern können das er für einen "Durchlauf" mehr als einen Datensatz anlegt.

Ich poste mal den gesamten code der xml_process.php:
PHP-Code:
<?php

    
/************************************************************************

    soldnerstats v0.1a
    (c) 2004 Holger "RazorsEdge" Rosenloecher
    [url]http://www.silent-force-clan.de/[/url] *** [email]webmin@silent-force-clan.de[/email]

    last modified: 20.10.2004 CET

    ************************************************************************/
    
include("inc.config.php");
    
$dbconn mysql_connect($dbserver$dbuser$dbpass);
    
mysql_select_db($db);

    
$XMLEntities = array(
    
'&amp;' => '&',
    
'&lt;'  => '<',
    
'&gt;'  => '>',
    
'&apos;' => '\'',
    
'&quot;' => '"',
    );

    function 
startElement(&$parser, &$element_name, &$element_attribute)
    {
    global 
$XMLEntities;

    
$element_name strtolower($element_name); # Element in Kleinbuchstaben
    
$felder = array();
    
$werte = array();

    foreach (
$element_attribute as $Key => $Value# Zeile aufbauen
        
{
            
$felder[] = $Key;   # Attributnamen in Array
            
$werte[] = strtr(trim($Value), $XMLEntities); # Werte in Array

            
if($element_name == "game")
             {
                
$feld_str implode(', '$felder); # Attributnamen in String, kommagetrennt
                
$wert_str "'" implode("', '"$werte) . "'"# Werte in String, kommagetrennt in Anführungszeichen
                
$sql_soldner_table "INSERT INTO Server ($feld_str) VALUES ($wert_str)"# Zeile schreiben
                
$result_soldner_table mysql_query($sql_soldner_table) or die(mysql_error());
             }
        }
    }

    function 
endElement($parser$element_name)
    {
        
# Hier ist bisher nichts zu tun
        
$element_name strtolower($element_name);
    }

    
$xmlFile file("stats.xml");
    
$parser xml_parser_create('');
    
xml_set_element_handler($parser"startElement""endElement");

    foreach(
$xmlFile as $elem)
    {
        
xml_parse($parser$elem);
    }

    
xml_parser_free($parser);
?>
Für interessierte:
Die zu parsende XML liegt hier:
http://silent-force-clan.de/soldnerstats/stats.xml

ich komm der Sache langsam näher :wink:
  Mit Zitat antworten
Alt 12.11.2004, 11:28  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Nimm mal, wie in meinem Code, den ganezen INSERT-Teil aus der foreach-Schleife raus (Sorry, ich hatte dort eine Klammer zu wenig).
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 13.11.2004, 11:19  
Gast
 
Beiträge: n/a
Standard Big Help

Thx Lazy Dog,

that´s it.

Nun funktioniert alles prima,
jetzt kann ich mich an die Details machen.

Nochmal danke für die schnelle Hilfe...
  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
Self Join / Nested Join ? Ich hab ne Blockade... iangillan Datenbanken 11 06.01.2008 21:37
Pathfinding Algorithmus optimieren? (Algorith. von Dijkstra) Martin13 PHP Tipps 2007 19 04.09.2007 19:20
Verständnisprobleme bei Utf8 > Character Set > Collate erna Datenbanken 4 20.03.2007 14:08
Differenz zwischen 2 Zahlen duderino PHP Tipps 2006 19 10.08.2006 22:12
PRoblem mit Cookie bei PHPbb-Board PHP Tipps 2007 8 12.12.2005 20:56
MySQL to Access - INSERT INTO zu langsam bendigo Datenbanken 0 23.11.2005 16:33
PHP-Fehlermeldung, weiss nicht mehr weiter PHP Tipps 2005-2 12 21.09.2005 12:56
mysql dump einspielen (ohne phpmyadmin) PHP Tipps 2005-2 6 18.06.2005 21:50
[Erledigt] fehler den ich noch nie gesehen habe Datenbanken 7 09.06.2005 14:29
dynamisches MENÜ aus db lesen.probleme mit SUBid !! PHP Tipps 2005 26 24.03.2005 18:53
[Erledigt] MySQL-DB gibt keine Daten zurück!!! Datenbanken 4 21.12.2004 21:00
dem verzweifeln nahe PHP Tipps 2004 26 24.10.2004 17:28
mehrere COUNT() mit verschiedenen GROUP BY -- geht das? tapferesschneiderlein Datenbanken 0 08.09.2004 14:54
Zeile einfach überspringen bei Unique-Verletzung tapferesschneiderlein Datenbanken 6 03.09.2004 14:29
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
insert into loop, php for schleife elemente insert, access insert into schleife, php ($row as $key => $value), insert into row, php insert into server sicherheit, php alle xml string elementen zählen insert into

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:52 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.