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

SELFPHP


Professional CronJob-Service

Suche



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 ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung 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
Hilfe Community Kalender Heutige Beiträge Suchen

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

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 25.09.2007, 18:34:56
ESIETP ESIETP ist offline
Anfänger
 
Registriert seit: Sep 2007
Ort: Berlin
Alter: 36
Beiträge: 3
Mehrdimensionalen Array in MySQL Tabellen schreiben

Liebe Communety,

ich schreibe gerade an einem kleinen Skript, was Daten aus einer CSV Datei in eine MySQL Datenbank schreibt.

Ich hab noch nicht soviel erfahrung mit PHP und hänge deshalb etwas fest.


Den PHP Quelltext hänge ich dann hinten an.

Mein Problem ist nun folgendes:

Ich habe es geschafft aus der CSV Datei einen Array zu machen und das mit folgendem Text


PHP-Code:
$row 1;                                                                         // Anzahl der Arrays
$handle fopen ("tabelle.csv","r");                                    // Datei zum Lesen öffnen
while ( ($data fgetcsv ($handle1000",")) !== FALSE ) { // Daten werden aus der Datei
                                                                                      // in ein Array $data gelesen
    
$num count ($data);                                                 // Felder im Array $data
                                                                                     // werden gezählt
    
print "<p> $num fields in line $row: <br>\n";
    
$row++;                                                                    // Anzahl der Arrays wird
                                                                                    // inkrementiert
    
for ($c=0$c $num$c++) {                                  // FOR-Schleife, um Felder
      
print $data[$c] . "<br>\n";  }}                                // des Arrays auszugeben 

Ok, selber hab ich das nicht gemacht, ich hab den Schnipsel im Netz gefunden.

Ich hab jetzt also nen Array der jetzt in folgende Tabellen musst

Dazu der Code:

PHP-Code:
  $i=1;
  
$Tabellenname 'Planet';
  
$Koordinaten "$i";
  
  
settype($Koordinaten,"string");
  
  
$Tabelle $Tabellenname.$Koordinaten;
  
settype($Tabelle,"string");

$sql = ("CREATE TABLE $Tabelle
(
    ID     INT AUTO_INCREMENT PRIMARY KEY,
    xKord INT,
    yKord INT,
    zKord INT,
    TFMetall INT,
    TFKristall INT,
    Gesamtplatz INT,
    AllianzID INT,
    AllianzTAG VARCHAR(60),
    Planetenname VARCHAR(60),
    Spielerstatus VARCHAR(60),
    SpielerID INT,
    Spielername VARCHAR(60),
    Unbekannt1 VARCHAR(60),
    Unbekannt2 VARCHAR(60),
    Unbekannt3 VARCHAR(60),
    PlatzKonstruktion INT,
    PunkteKonstruktion INT,
    PlatzForschung INT,
    PunkteForschung INT,
    PlatzFlotte INT,
    PunkteFlotte INT
    
)"
);

    
$result mysql_query($sql) OR
              die(
"Query: <pre>".$sql."</pre>\n".
                  
"Antwort: ".mysql_error());    

$i++; 
Also das is nur die Tabelle die erstellt wird, das funzt auch (ist auch von mir geschrieben *g*)

Ich hänge mal die CSV Datei an

jetzt müssen die Daten noch aus dem Array in die Tabellen.

Pro CSV Datei (das werden sehr viele werden) sind es 16 tabellen die erstellt werden
und jede dieser Tabellen haben 22 felder (siehe oben).

Der name der tabellen ist jetzt noch fest definiert.

Aber das soll sich noch ändern, das soll nämlich noch so werden, dass die ersten drei Felder des Arrays (das sind drei Zahlen) die Variable $i ersetzen sollen.

Wie das geht weiß ich auch noch nicht, dazu aber später.
(wobei es durchaus sein könnte das sich eins der probleme erldeigt, wenn das geklährt wäre).

Mein Problem is neben der Tatsache das ich nicht weiß was ich bei VALUES eintrage (Hauptproblem), dass ich auch nicht weiß, wie ich, wenn ich den INSERT INTO Befehl in einen eigene Schleife packe, die richtige Tabelle erwiche.

PHP-Code:
$ein = ("INSERT INTO $Tabelle
                (xKord,yKord,zKord,TFMetall,TFKristall,Gesamtplatz,AllianzID,AllianzTAG,Planetenname,Spielerstatus,SpielerID,Spielername,
 Unbekannt1,Unbekannt2,Unbekannt3,PlatzKonstruktion,PunkteKonstruktion,PlatzForschung,PunkteForschung,PlatzFlotte,PunkteFlotte)
 
          VALUES
 
 ()"
);
 



$eingef mysql_query($ein) OR
              die(
"Query: <pre>".$ein."</pre>\n".
                  
"Antwort: ".mysql_error()); 
Denn auch hier benutze ich die Variable $Tabelle, da die sich aber nach jedem durchlauf ändert (logisch denn die Tabellen sollen ja auch unterschiedliche namen haben).

Die Variable $Tabelle kann ich ja auch nit wieder wirklich herstellen, besonders weils ja später nicht so sein soll.

Wie gesagt, es wäre total nett, wenn ihr mit bei den Problemen helfen könntet, denn ich komme da irgendwie nicht weiter.

Solle der Threat hier falsch sein bitte ich um Verschiebung, war mir nit ganz sicher, ob hier oder bei MySQL.

Vielen lieben dank an alle.

Der ESIETP
Angehängte Dateien
Dateityp: zip CSVtabelle.zip (1,8 KB, 85x aufgerufen)

Geändert von ESIETP (25.09.2007 um 18:35:51 Uhr)
Mit Zitat antworten
  #2  
Alt 26.09.2007, 13:03:39
Raketenmann Raketenmann ist offline
Junior Member
 
Registriert seit: Jun 2004
Beiträge: 473
AW: Mehrdimensionalen Array in MySQL Tabellen schreiben

Ein zweidimensionales Array in eine Tabelle zu schreiben ist einfach

PHP-Code:
for($z=0;$z<count($data);$z++)
{
   
mysql_query("INSERT INTO tabelle (spalte1,splate2,...) VALUES ('$data[$z][0]','$data[$z][1]',...)");

Wobei die zweite Dimension im Grunde auf per Schleife durchlaufen werden könnte.

ABER:

Zitat:
Zitat von ESIETP Beitrag anzeigen
Pro CSV Datei (das werden sehr viele werden) sind es 16 tabellen die erstellt werden
und jede dieser Tabellen haben 22 felder (siehe oben).
Oh Gott...

Zitat:
Zitat von ESIETP Beitrag anzeigen
Der name der tabellen ist jetzt noch fest definiert.
Gut so, ändere das nicht...


Zitat:
Zitat von ESIETP Beitrag anzeigen
Aber das soll sich noch ändern, das soll nämlich noch so werden, dass die ersten drei Felder des Arrays (das sind drei Zahlen) die Variable $i ersetzen sollen.
Nein, bitte nicht (s.o.)

Zitat:
Zitat von ESIETP Beitrag anzeigen
Mein Problem is neben der Tatsache das ich nicht weiß was ich bei VALUES eintrage (Hauptproblem), dass ich auch nicht weiß, wie ich, wenn ich den INSERT INTO Befehl in einen eigene Schleife packe, die richtige Tabelle erwiche.

...

Denn auch hier benutze ich die Variable $Tabelle, da die sich aber nach jedem durchlauf ändert (logisch denn die Tabellen sollen ja auch unterschiedliche namen haben).

...

Die Variable $Tabelle kann ich ja auch nit wieder wirklich herstellen, besonders weils ja später nicht so sein soll.
Was?????

Bevor du irgendwas an deinem Projekt machst, wirst du dich hinsetzen und etwas über Datenbanken lesen und danach dein DB-Design komplett überdenken (in deinem eigenen Interesse)!!!!!
Mit Zitat antworten
  #3  
Alt 26.09.2007, 14:28:25
ESIETP ESIETP ist offline
Anfänger
 
Registriert seit: Sep 2007
Ort: Berlin
Alter: 36
Beiträge: 3
AW: Mehrdimensionalen Array in MySQL Tabellen schreiben

erseinmal

vielen dank für die kleine Schleife, auch wenn ich sie noch nicht zum laufen bekommen habe =(
(habe deinen code entsprechend angepasst,

PHP-Code:
for($z=0,$i=1;$z<count($data);$z++,$i++)
{

  
$Tabellenname 'Planet';
  
$Koordinaten "$i";
  
  
settype($Koordinaten,"string");
  
  
$Tabelle $Tabellenname.$Koordinaten;
  
   
settype($Tabelle,"string");
   
mysql_query("INSERT INTO $Tabelle 
  
  (xKord,yKord,zKord,TFMetall,TFKristall,Gesamtplatz,AllianzID,AllianzTAG,Planetenname,Spielerstatus,SpielerID,Spielername,
 Unbekannt1,Unbekannt2,Unbekannt3,PlatzKonstruktion,PunkteKonstruktion,PlatzForschung,PunkteForschung,PlatzFlotte,PunkteFlotte)
 
  VALUES 
  ('$data[$z][0]','$data[$z][1]','$data[$z][2]','$data[$z][3]','$data[$z][4]','$data[$z][5]','$data[$z][6]','$data[$z][7]',         
   '$data[$z][8]','$data[$z][9]','$data[$z][10]','$data[$z][11]','$data[$z][12]',
   '$data[$z][13]','$data[$z][14]','$data[$z][15]','$data[$z][16]','$data[$z][17]',
   '$data[$z][18]','$data[$z][19]','$data[$z][20]','$data[$z][21]')"
);} 
und es gibt keine Fehlermeldung weiß nicht ganz wo da vllt der fehler liegen könnte)




zu deinem "Oh Gott" =)

die Datenbank wird für ein Browsergame sein, deshalb auch die größe insgesamt werden es wohl etwas um die 160.000 Tabellen sein


das Problem mit der festen Bennenung der Tabellen ist folgendes:

Im Moment heißt ja der eine Teil fest "planet" und der andere ist die Variable $i welche für den aufruf dann Zahlen ausspuckt. Die tabellen heißen dann immer "Planet 1" "Planet2" ...

aber das heißen automatisch alle tabellen und ich habs so programiert das er bei 17 aufhört (er sollte eigentlich bei 16 aufhören, weiß auch nit warum er das bis 17 macht)


man könnte die variable quasi auch solange laufen lassen, bis 160.000 tabellen da sind

aber dann kann ich die einträge in den tabellen nicht mehr eineindeutig zuordnen.

für die spätere suche is das egal die braucht nur das was in den tabellen steht, da sind die namen nicht wichtig.

aber ich würde mir gerne die möglichkeit offen halten auch manuelle korrekturen in den tabellen vorzunehmen,
dazu müsste ich die aber entsprechend zugeordnet haben sonst suche ich mich ja tot

deswegen wollte ich für den namen der tabellen die ersten 3 werte aus der CSV Datei bzw. dem entstehenden Array geben

was dann etwas so aussehen würde "planet 319:55:1"

so könnte ich die entsprechenden Tabellen auch den planeten in dem browsergame zuordnen.

hoffe es gibt eine Möglichkeit das zu realisierten (ich denke schon, aber da ich noch nit ganz durch den auslehsevorgang eines arrays gestiegen bin, habsch da noch nit so die idee)


Mit freundlichem Gruß

Der ESIETP
Mit Zitat antworten
  #4  
Alt 26.09.2007, 14:54:32
rambi
Guest
 
Beiträge: n/a
AW: Mehrdimensionalen Array in MySQL Tabellen schreiben

Zitat:
Die tabellen heißen dann immer "Planet 1" "Planet2" ...
Das ist nicht dein Ernst, oder?
Dieses wiederspricht grob den google:"Die 5 Normal Formen" !!
Mit Zitat antworten
  #5  
Alt 26.09.2007, 15:12:46
Raketenmann Raketenmann ist offline
Junior Member
 
Registriert seit: Jun 2004
Beiträge: 473
AW: Mehrdimensionalen Array in MySQL Tabellen schreiben

Zitat:
Zitat von ESIETP Beitrag anzeigen
.... weiß nicht ganz wo da vllt der fehler liegen könnte
Wenn du schon versuchst, die Schleife mit zwei Zählern zum laufen zu kriegen, mußt du wenigstens auch zwei Abbruchbedingungen formulieren. Ich würde dir aber empfehlen bei der Standardsyntax und einem Zähler zu bleiben.

Die Syntax sieht so aus: http://www.php.net/manual/de/control-structures.for.php

Ich weiß, dass da in den Kommentaren steht, dass es auch mit zwei Zählern funktionieren soll, aber dem wird weiter oben auch widersprochen...
...ich weiß nicht ob es funktionieren kann. Es ist aber in deinem Fall auch überflüssig, weil $z als Zähler reicht.

Ansonsten kann es auch sein, dass $data leer ist. Weil am Ende der csv-Datei eine Leerzeile eingelesen wurde bevor EOF erreicht war.

Denn:
Du mußt deine Einleseschleife verbessern, da wird kein zweidimensionales Array erzeugt, sondern ein neues eindimensionales für jede Zeile der Datei.
Die Zuweisung in der Schleife muß lauten: $data[]=fgetcsv(); und ruhig vor der Schleife $data als Array initialisieren.



Zitat:
Zitat von ESIETP Beitrag anzeigen
die Datenbank wird für ein Browsergame sein, deshalb auch die größe insgesamt werden es wohl etwas um die 160.000 Tabellen sein
Zitat:
Zitat von Raketenmann Beitrag anzeigen
Oh Gott...
Wenn du glaubst, dass du für dein Browsergame 160.000 Tabellen oder mehr brauchst (nur weil es verschiedene Planeten mit verschiedenen Koordinaten und Eigenschaften gibt), hast du offenbar die zentralsten Aspekte von der Arbeit mit Datenbanken nicht verstanden.

Tu dir selbst einen Gefallen und informiere dich bevor du anfängst!
Mit Zitat antworten
  #6  
Alt 26.09.2007, 16:19:27
ESIETP ESIETP ist offline
Anfänger
 
Registriert seit: Sep 2007
Ort: Berlin
Alter: 36
Beiträge: 3
AW: Mehrdimensionalen Array in MySQL Tabellen schreiben

@rambi:

ja weiß ich ich hab das allet schon in der schule gehabt und das sollte auch nicht der endzustand sein, ging nur darum das ich erstmal die funktionen zum laufen bringen muss

wenn die funktionen das machen, was sie sollen kann und werde ich namensgebung anpassen



@Raketenmann:

den zweiten zähler hatte ich nur mit reingenommen, wegen der bennenung der tabellen hab ihn wieder rausgenommen nach dem hinweiß und in die anweisungen ansich geschrieben.


dann zu dem rest:

ich hab mir schon irgendwie gedanken über die datenbankstrucktur gemacht

bin aber auf ein paar nicht auf anhieb für mich lösbaren problem gestoßen

wie z.B.: Wenn die Tabellen z.B. nach den Usernamen benenne, was die menge der Tabellen reduzieren würden, erheblich.

aber wie bekomm ich dann die daten vernünftig in die tabelle

weil jeder user kann bis zu 13 planteten haben, ok die daten zu den punkten und änlichem sind ja immer die gleichen

aber irgendwie verschieb es das problem der vielen tabellen auf die vielen felder.


mir wärs ja am liebsten wenn ne mehrfache verschachtelung gehen würde

also als tabelle in einer tabelle in einer tabelle, was aber leider nicht geht.

also dachte ich, da ich eh nicht so viel ahung vom programieren habe und es wohl einen doch größeren aufwand bedeuten würde wenn man das ganze so sehr differenziert betrachten würde, dass ich es halt erstmal so angehe das ich die daten die ich von jedem planeten bekomme in jeweils eine eigene tabelle schreibe,

weil ich das dann wohl auch etwas einfacher ausgelesen bekomme, wenn ich später eine entsprechende suche programiere.

Ich bin mir schon durchaus im klahren, dass bei sovielen Tabellen eine suche sehr viel performance kosten wird.

da ich aber einen eigenen server betreibe auf dem das dann läuft ist mir das im moment nicht ganz so wichtig.

über die performance die kapazität dann übersteigt und/oder ich in meinen kenntnissen zur programierung mit php und MySQL weiter bin

dann kann ich mir gedanken machen, wie ich das besser differenzieren kann.




aber zurück zum thema:

ich habe auch das noch den anderen array code, den mir ein freund geschrieben hatte als ich damit anfing:

PHP-Code:

<?php
error_reporting
(E_ALL E_STRICT);
  if (isset(
$_POST['data'])) {
    
$rows split("\n"$_POST['data']);
    
$index 0;
    foreach (
$rows as $row) {
      
$fields split(";"$row);
      
$array[$index] = $fields;
      
      
$index++;
    }
    
    
print_r($array); die();
  }
?>
<html>
 <body>
  <form action="?" method="post">
   <textarea name="data" rows="20" cols="80">
   319;    55;    1;    0;    0;    0;    0;    0;    0;    ;    ;    ;    0;    ;    0;    0;    0;    0;    0;    0;    0;    0;    0;    
319;    55;    2;    203280;    0;    203280;    398;    4960791;    11603;    -TW-;    Home of ESIETP;    ESIETP;    62668;    ESIETP;    0;    0;    0;    496;    2596008;    72;    2240010;    631;    124774;    
319;    55;    3;    3080;    0;    3080;    0;    0;    0;    ;    ;    ;    0;    ;    0;    0;    0;    0;    0;    0;    0;    0;    0;    
319;    55;    4;    0;    0;    0;    0;    0;    0;    ;    ;    ;    0;    ;    0;    0;    0;    0;    0;    0;    0;    0;    0;    
319;    55;    5;    0;    0;    0;    0;    0;    0;    ;    ;    ;    0;    ;    0;    0;    0;    0;    0;    0;    0;    0;    0;    
319;    55;    6;    0;    0;    0;    0;    0;    0;    ;    ;    ;    0;    ;    0;    0;    0;    0;    0;    0;    0;    0;    0;    
319;    55;    7;    0;    0;    0;    0;    0;    0;    ;    ;    ;    0;    ;    0;    0;    0;    0;    0;    0;    0;    0;    0;    
319;    55;    8;    0;    0;    0;    0;    0;    0;    ;    ;    ;    0;    ;    0;    0;    0;    0;    0;    0;    0;    0;    0;    
319;    55;    9;    20790;    0;    20790;    398;    4960791;    11603;    -TW-;    warum hier????;    ESIETP;    62668;    ESIETP;    0;    0;    0;    496;    2596008;    72;    2240010;    631;    124774;    
319;    55;    10;    56210;    0;    56210;    90;    13640631;    5733;    -DKW-;    Boxer Old;    Raveman (gu);    42741;    Raveman;    0;    0;    0;    59;    12325690;    237;    1239511;    784;    75431;    
319;    55;    11;    0;    0;    0;    0;    0;    0;    ;    ;    ;    0;    ;    0;    0;    0;    0;    0;    0;    0;    0;    0;    
319;    55;    12;    28875;    0;    28875;    398;    4960791;    11603;    -TW-;    und nicht woanders??;    ESIETP;    62668;    ESIETP;    0;    0;    0;    496;    2596008;    72;    2240010;    631;    124774;    
319;    55;    13;    38500;    0;    38500;    398;    4960791;    11603;    -TW-;    blub;    ESIETP;    62668;    ESIETP;    0;    0;    0;    496;    2596008;    72;    2240010;    631;    124774;    
319;    55;    14;    5390;    0;    5390;    395;    4991090;    11603;    -TW-;    Music Instructor;    .~°~Niero~°~. (u);    62675;    .%7E%C2%B0%7ENiero%7E%C2%B0%7E.;    0;    0;    0;    358;    3982192;    324;    972298;    1017;    36600;    
319;    55;    15;    13475;    0;    13475;    0;    0;    0;    ;    ;    ;    0;    ;    0;    0;    0;    0;    0;    0;    0;    0;    0;    
319;    55;    16;    0;    0;    0;    1005;    873293;    9775;    DrKn1;    Gtas;    Xtract0or (iu);    76153;    Xtract0or;    0;    0;    0;    1044;    502101;    916;    193295;    516;    177896;    
   </textarea>
   <br />
   <input type="submit" />
  </form>
 </body>
</html>

eventuell kann man das dazu verwenden?

allerdings war ich mir bei dem befehl nicht ganz sicher, ob der array dann entsprechend auch so ausgegeben wird wies in der CSV datei steht.

deswegen hatte ich mir die andere lösung überlegt.

Mit freundlichem Gruß

Der ESIETP
Mit Zitat antworten
  #7  
Alt 26.09.2007, 18:54:18
rambi
Guest
 
Beiträge: n/a
AW: Mehrdimensionalen Array in MySQL Tabellen schreiben

Es dreht sich nicht so sehr um Performance...
In dem Punkt kann sich eine gezielte Denormalisierung sogar positiv auswirken. Das kommt erst dran, wenn du mehr Ahnung von PHP hast. Viel wichtiger ist die Wartbarkeit!

Bevor ich überhaupt weiter versuche dir zu helfen, möchte ich dich bitten folgendes wenigstens einmal zu lesen und dann solltest du auch dein Konzept nach diesen "Richtlinien" umbauen. Datenbanken entwickeln.

Zitat:
dass ich es halt erstmal so angehe
Machs sofort richtig, zumindest so gut, wie es eben geht!!!
Sonst wirst du dir selber irgend wann in den A.....(Hintern) beißen.
Es ist wiklich unangenehm, die Arbeit von Wochen in die Tonne werfen zu müssen.

Geändert von rambi (26.09.2007 um 19:08:21 Uhr)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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
Hilfe PHP Array einlesen in MySQL Nano PHP Grundlagen 1 29.06.2007 14:45:05
letzten 5 Einträge aus 5 Tabellen (MySQL 4.0.26) Partheeus MySQLi/PDO/(MySQL) 6 17.01.2006 23:46:30
mehrdimensionales array - MySQL database vertigoricen PHP Grundlagen 1 17.08.2005 08:20:28
zweidimensionales Array aus MySQL Jürg PHP für Fortgeschrittene und Experten 3 20.05.2005 15:42:48
Einzelne Daten aus Textdatei Auslesen azubinator PHP Grundlagen 153 17.12.2004 13:36:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:05:43 Uhr.


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


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