ERLEDIGT
NEIN
NEIN
ANTWORTEN
23
23
ZUGRIFFE
29874
29874
EMPFEHLEN
-
Hallo PHPler

Wollte mal fragen, wie man dieses Problem löst:
Vorhanden ist eine CSV Datei, deren Inhalt in eine Datenbank über ein PHP Script importiert werden soll. (Durch Semicolon getrennt)
Im ersten Schritt soll durch den druck auf "Durchsuchen" die Datei auf der Festplatte gewählt werden. Dann durch einen Druck auf einen Submitbutton das Einlesen ausgeführt werden. zunächst in Variablen, die erst nach einer Ausgabe zum Gegenkorrekturlesen und einem danach folgenden Betätigen eines Submitbuttons in die Datenbank geschrieben werden.
Wie realisiere ich das, wenn ich nun wirklich nicht viel Ahnung von PHP habe.
Pro
-> Apache läuft
-> Mysql läuft
-> phpscript hat Verbindung zur Datenbank
-> HTML Layout ist fertig
Contra
-> keine Formulare angegeben
-> keine Ahnung, wie das funktionieren soll
Danke schonmal für die Hilfe.- just my 2 cent
-
Dann wahrscheinlich überhaupt nicht.Original geschrieben von micha
Wie realisiere ich das, wenn ich nun wirklich nicht viel Ahnung von PHP habe.
Alle deine Pro Punkte, sind keine Pro Punkte sondern bis auf das HTML Layout überhaupt erstmal die Grundlagen. Ohne könntest du ja überhaupt keine solche Applikation entwickelt. Also, das sind keine positiven Eigenschaften, sondern die absolut notwendige Basis.
Entweder es gibt irgendwo in den Weiten des Web oder in den Weiten von PEAR eine Klasse, die das parsen von CSV Dateien ermöglichst, oder du solltest dir mal www.php.net/explode zum trennen der Werte pro Zeile, www.php.net/file zum Einlesen der gesamten Datei, sowie Sessions für das Zwischenspeichern bei der Vorschau und File Uploads für das Hochladen der Datei angucken.
Ganz wichtig zu verstehen ist, dass du mit einem Upload Formular, die Datei niemals direkt an ein PHP-Script übergibst. Diese wird zunächst IMMER per HTTP auf den Server geladen und von dort aus dem temporären Verzeichnis an das Script übergeben.
-
schau dir diese Funktion mal an: http://de.php.net/fgetcsv
Nach dem Auslesen der Datei und Speichern der Werte in Variablen / einem Array, diese zum Korrektur lesen ausgeben, und bei anschließender Bestätigung Daten weitergeben sowie ein entsprechendes SQL-Query (INSERT...) zusammenbauen und an die Datenbank senden.
So viel zum Prinzip."... the KKK took my baby away ..."
-
danke schonmal.
die daten liest er nun aus und trägt sie auch fein untereinander ein. es geht nun also erstmal nurnoch um das formatieren dieser daten.
ich werde mich nochmal melden, wenn ich weiter gekommen bin- just my 2 cent
-
sodele.PHP-Code:
<?php
$row = 1; // Anzahl der Arrays
$handle = fopen ("testds.csv","r"); // Datei zum Lesen öffnen
echo"<table bordeR=1><tr>"; // eröffnen einer table und einer spalte VOR beginn der ersten schleife
while ($data = fgetcsv ($handle, 1000, ";")) { // Daten werden aus der Datei
// in ein Array $data gelesen
$num = count ($data); // Felder im Array $data
// werden gezählt
$row++; // Anzahl der Arrays wird
// inkrementiert
for ($c=0; $c < $num; $c++) { // FOR-Schleife, um Felder
echo "<td>$data[$c]</td>"; // des Arrays auszugeben in einer zeile
}
echo"</tr>"; //ende spalte -> beginn nächster schleifendurchlauf in neuer spalte
}
echo"</table> "; //ende table
fclose ($handle);
?>
das ergebnis ist eine weiße datei, wo meine 2 zeilen ausgegeben werden, die die csv derzeit enthält.
habe es nun hingemurkselt, dass sie horizontal ausgegeben werden, aber vertikal wäre mir lieber. d.h. die erste zeile in eine spalte und die 2te zeile in die zweite spalte.
habe es ein wenig versucht, aber nicht hinbekommen. kann mir da einer helfen ? das mit den schleifen ist für mich so unübersichtlich.- just my 2 cent
-
Du schaffst dir vorher deine Tabellenstruktur mit CREATE selbst und arbeitest anschliessend (nach dem Upload) so:
Code :1 2 3
mysql> LOAD DATA INFILE 'deine_datei.csv' INTO TABLE deine_tabelle -> FIELDS TERMINATED BY ';' ENCLOSE BY '"' -> LINES TERMINATED BY '\n';
Gruesse,
stanleyBGeändert von stanleyB (05.03.04 um 16:16 Uhr)
-
hm, ich wollte es erstmal auf diesem weg machen, den ich angefangen habe,
es hapert derzeit jedoch am 2spalitigen auslesen vertikal.
horizontal ging es ja....- just my 2 cent
-
Kann mir nochmal jemand helfen ?
Es wäre wichtig, dass ich heute das Vertikale auslesen hinbekomme, da ansonsten mein Projekt auf Eis liegt und mir mein Chef aufs Dach springt.- just my 2 cent
-
Speicher die zwei horizontalen Reihen in zwei getrennte Arrays und gebe diese abwechselnd in eine Tabelle aus.Original geschrieben von micha
Kann mir nochmal jemand helfen ?
Es wäre wichtig, dass ich heute das Vertikale auslesen hinbekomme, da ansonsten mein Projekt auf Eis liegt und mir mein Chef aufs Dach springt.
Es wird davon ausgegangen, dass beide vertikale Reihen gleich viel Elemente haben.
Alternativ kann ich dir noch folgenden Code anbieten, der für eine zweizeilige CSV Datei, auch bei ungleicher Anzahl an Elementen und ohne den ganzen CSV Funktionskram funktionieren sollte (wohlgemerkt ungetestet).PHP-Code:$array1; // Müsstest du mit den Daten aus Zeile 1 füllen
$array2; // Müsstest du mit den Daten aus Zeile 2 füllen
echo "<table>";
for($i=0;$i<count(array1);$i++) {
echo "<tr><td>".$array1[$i]."</td><td>".$array2[$i]."</td></tr>";
}
echo "</table>";
PHP-Code:$csvFile = "datei.csv";
$fileArray = file($csvFile);
$array1 = explode(";",$fileArray[0]);
$array2 = explode(";",$fileArray[1]);
if(count($array1) >= count($array2)) { $maxrows = count($array1); }
else { $maxrows = count($array2); }
echo "<table>\n";
for($i=0;$i<$maxrows;$i++) {
if($array1[$i] == "" || !isset($array1[$i])) {
$array1[$i] = " ";
}
if($array2[$i] == "" || !isset($array2[$i])) {
$array2[$i] = " ";
}
echo "\t<tr><td>".$array1[$i]."</td><td>".$array2[$i]."</td></tr>\n";
}
echo "</table>";
-
danke schonmal. das hat mich weiter gebracht.
die ausgabe der CSV datei ist nun schön vertikal.
jetzt schreibe ich mal dahingehend weiter, dass er nach dem klick auf einen submit button eine zeile weiter nach unten / nach oben springt und somit der nächste datensatz ausgegeben wird.
ich habe dein 2tes script verwendet. das funktioniert einwandfrei. nur welche variable muss ich erhöhen, dass er mir zeile 3 der csv datei ausgibt ? zeile 1 ist ja nur die jeweilge überschrift, array 1 bleibt also immer unverändert.Geändert von micha (08.03.04 um 09:57 Uhr)
- just my 2 cent
-
Sprich du hast in der ersten Zeile der CSV die "Überschriften" für die Zeilen die durch die vertikale Darstellung der Zeilen aus der CSV Datei resultieren?
Wenn ja, dann tu doch mal Butter bei die Fische und sag, wieviele Zeilen die CSV hat, oder ob das Variabel ist.
-
moment, ich mach mal einen screen, dann wird das deutlich.
oh nein, merke gerade, dass das nichtmehr funktioniert.
also dann nochmal infos zum gesamten prinzip.
ich habe eine alte datenbank und muss deren daten in eine neue datenbank migrieren.
dazu habe ich nun eine datei erstellt, die 2 spalten hat im layout. in der linken spalte wird 2spaltig der inhalt der alten datenbank durch das importieren einer csv datei angezeigt. dabei muss von dieser spalte die linke seite (also array1) nur einmal ausgelesen werden, damit dort die überschriften stehen. spalte 2 (also array2) sollte variabel sein und zwar dahingehend, dass man damit jede zeile der CSV datei auslesen kann. durch 2 submit buttons ("next" und "previous" ) soll man durch die datensätze navigieren können.
in der rechten spalte des layoutes ist dann die struktur der neuen datenbank, die dynamisch aus den inhalten der linken spalte generiert wird. durch if abfrage blöcke wird der datensatz der linken spalte in die rechte neu einsortiert.
ich versuche das nochmal als ascii bild:
|_______spalte1________||______spalte 2______|
| ____alte datenbank_____|| __neue datenbank__ |
| csvarray1[1] |csvarray2[1] || titelneu |neudatensatz |
| csvarray1[2] |csvarray2[2] || titelneu |neudatensatz |
| csvarray1[3] |csvarray2[3] || titelneu |neudatensatz |
| csvarray1[4] |csvarray2[4] || titelneu |neudatensatz |
| csvarray1[5] |csvarray2[5] || titelneu |neudatensatz |
<< previous___________________________next >>
die anzahl der zeilen der csv ist variabel, die pcs werden ja ständig neu hinzugefügt. nur die erste zeile ist immer gleich, die überschrift eben. aber auch die muss jedesmal, wenn die csv geladen wird, neu ausgelesen werden, sollte sich etwas an den spaltentiteln ( csvarray1[1] ) ändernGeändert von micha (08.03.04 um 10:11 Uhr)
- just my 2 cent
-
Alles schön und gut, aber:
1) Bitte halte dich in Zukunft unbedingt an unsere Netiquette bezüglich Groß/Kleinschreibung.
2) Ich werde beim besten Willen nicht Schlau aus deinen Ausführungen. Entweder, ich verstehe dich nicht, oder was du vorhast ist in höchstem Maße schwachsinnig und viel einfacher zu lösen.
Frage in den Raum: Versteht irgendwer, was er meint?
Datenbank portieren? Von was für einer DB in was für eine andere denn?
-
Wir haben eine Datenbank mit PCs, die erfasst, welche Art von Prozessor, welche Festplatte, welche Grafikkarte, welche IP, die Rechner haben und wer den Rechner gerade nutzt. Diese Datenbank wurde von einem Mitarbeiter vor 8 Jahren erstellt und ist weder normalisiert, noch in irgendeiner anderen Art und Weise den herkömmlichen Standards von Datenbanken angepasst.
Im Grunde ist es nur eine Excel Tabelle, die sich Datenbank schmipft.
Ich muss nun im Rahmen eines Praktikums in dieser Firma mit einer Programmiersprache (PHP), die ich nur aus der Schule aus einem Halbjahr kenne, diese alte Datenbank in eine normalisierte Form umbauen. Die neue Datenbankstruktur habe ich bereits fertig.
Nun geht es darum die Datensätze der alten Datenbank in die neue Datenbank zu migrieren.
Dazu wollte ich aus der alten Datenbank eine CSV Datei basteln, diese via PHP importieren und dann in die neue Datenbank (MYSQL) einsortieren. Als Kontrollzwischenschritt möchte ich jeweils einen Datensatz (also eine Zeile der CSV Datei) auf dem Bildschirm ausgeben (Linke Spalte). Dabei wird nach den Regeln, die ich zum Einsortieren in die neue Datenbank angelegt habe, der Inhalt der CSV Datei in die neue Datenbank einsortiert und erstmal ausgegeben (Rechte Spalte). Somit habe ich auf einer HTMLSeite 2 Spalten - auf der einen Seite die alte Datenbank und auf der anderen Seite die gleichen Daten, wie sie in der neuen Datenbank einsortiert sind. Ich kann also kontrollieren, ob meine Regeln, die ich für das Sortieren der Datensätze in die neue Datenbank angelegt habe, richtig sind.
Mit 2 Submitbuttons möchte ich dann die Zeile der CSV Datei weiterschalten können. Jeweils "Vor" oder "Zurück" und somit kontrollieren, ob das Sortieren für die anderen Datensätze auch stimmt.
Ich habe derzeit 3 Dateien.
dbmaske1.php -> Hier wird über ein "Durchsuchen" Feld die CSV Datei angegeben und an die nächste Datei weitergegeben
dbmaske2.php -> Hier findet die Gegenüberstellung eines Datensatzes der CSV Datei statt mit der Funktion jeweils einen Datensatz weiter und einen Datensatz zurück zu navigieren
dbmaske3.php -> Hier wird dann via PHP und den definierten Sortierregeln der Inhalt der alten CSV Datei unter Verwendung von MYSQL in die neue Datenbank geschrieben.
Danke für die Geduld, die Ihr mit mir habt und für die enorme Hilfe, die Ihr mir gerade seid!
Hier nochmal zum Copy und Pasten das Layout der 2ten Datei. Das hilft beim Verständnis des Problems glaube ich nochmal enorm. Ist mit Dreamweaver gemacht, der Code wird noch entmistet, aber damit ging es nun bedeutend schneller.
PHP-Code:<HTML><HEAD><TITLE>Datenbanktransfermaske</TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<STYLE type=text/css>
A:hover {
FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: verdana; TEXT-DECORATION: none
}
A:link {
FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: verdana; TEXT-DECORATION: none
}
A:visited {
FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: verdana; TEXT-DECORATION: none
}
A:active {
FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: verdana; TEXT-DECORATION: none
}
.font {
FONT-SIZE: 10px; COLOR: #000000; FONT-FAMILY: verdana
}
.Stil1 {
FONT-WEIGHT: bold; COLOR: #ff0000
}
.Stil3 {
COLOR: #000000
}
.Stil4 {
COLOR: #ff0000
}
.submit {
FONT-SIZE: 10px; COLOR: #ff0000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
</STYLE>
</HEAD>
<BODY class=font>
<P class=Stil1 align=center>Schritt 2 / 3 <BR><SPAN class=Stil3>Überprüfung der
Datenmigration<BR><BR><STRONG><SPAN class=Stil4><A
href="http://localhost/dbmaske.php"><< Schritt 1</A></SPAN> <B>|</B>
<SPAN class=Stil4><A href="http://localhost/dbmaske3.php">Schritt 3
>></A></SPAN> </STRONG></SPAN></P>
<TABLE
style="BORDER-RIGHT: #000000 thin solid; BORDER-TOP: #000000 thin solid; BORDER-LEFT: #000000 thin solid; BORDER-BOTTOM: #000000 thin solid"
cellPadding=0 width="100%" border=0>
<TBODY>
<TR bgColor=#eeeeee>
<TD vAlign=center bgColor=#eeeeee>
<DIV align=center><STRONG>- Alte "Datenbank" - <BR></STRONG></DIV></TD>
<TD bgColor=#eeeeee>
<DIV align=center><STRONG><BR>- Neue Datenbank -
<BR><BR></STRONG></DIV></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top colSpan=2>
<DIV align=center><STRONG>
<FORM action=$php_self method=get><INPUT class=submit type=submit value="<<" name=back>
<INPUT class=submit type=submit value="Diesen Datensatz migrieren" name=migrieren>
<INPUT class=submit type=submit value=">>" name=next></FORM></STRONG></DIV>
<DIV align=center></DIV></TD></TR>
<TR>
<TD vAlign=top width="50%"><!-- erste spalte - alte datenbank inhalte -->
<TABLE cellPadding=1 width="100%" border=0 class="font">
<TBODY>
<TR>
<TD bgColor=#eeeeee>TERM_ADR</TD>
<TD bgColor=#cccccc><input class=submit readonly value=zeile1a
name=alt0></TD>
</TR>
<TR>
<TD bgColor=#eeeeee>TERM_ADR_A</TD>
<TD bgColor=#cccccc><INPUT class=submit readOnly value=b
name=alt1></TD></TR>
<TR>
<TD bgColor=#eeeeee>DRU_ADR</TD>
<TD bgColor=#cccccc><INPUT class=submit readOnly value=c
name=alt2></TD></TR>
<TR>
<TD bgColor=#eeeeee>NAME</TD>
<TD bgColor=#cccccc><INPUT class=submit readOnly value=d
name=alt3></TD></TR>
<TR>
<TD bgColor=#eeeeee>ABT_ALT</TD>
<TD bgColor=#cccccc><INPUT class=submit readOnly value=e
name=alt4></TD></TR>
<TR>
<TD bgColor=#eeeeee>undsoweiter</TD>
<TD bgColor=#cccccc>undsoweiter</TD>
</TR>
</TBODY></TABLE></TD>
<TD vAlign=top width="50%">
<TABLE cellPadding=1 width="100%" border=0 class="font">
<TBODY>
<TR bgColor=#e0e0e0>
<TD colSpan=2><STRONG>PC_Systeme</STRONG></TD></TR>
<TR>
<TD width="50%" bgColor=#eeeeee>pcnr</TD>
<TD width="50%" bgColor=#cccccc><INPUT class=submit value=$[]
name=Input22232111></TD></TR>
<TR>
<TD bgColor=#eeeeee>terminalnr</TD>
<TD bgColor=#cccccc><INPUT class=submit value=$[]
name=Input22232112></TD></TR>
<TR>
<TD bgColor=#eeeeee>gebaeudenr</TD>
<TD bgColor=#cccccc><INPUT class=submit value=$[]
name=Input22232113></TD></TR>
<TR>
<TD bgColor=#eeeeee>zimmer</TD>
<TD bgColor=#cccccc><INPUT class=submit value=$[]
name=Input22232114></TD></TR>
<TR>
<TD bgColor=#eeeeee>undsoweiter</TD>
<TD bgColor=#cccccc>undsoweiter</TD>
</TR>
</TBODY></TABLE></TD></TR>
<TR>
<TD bgColor=#eeeeee colSpan=2>
<DIV align=center><BR></DIV></TD></TR></TBODY></TABLE>
<DIV align=center><STRONG><BR><SPAN class=Stil4><A
href="http://localhost/dbmaske.php"><< Schritt 1</A></SPAN> <B>|</B>
<SPAN class=Stil4><A href="http://localhost/dbmaske3.php">Schritt 3
>></A></SPAN> </STRONG></DIV></BODY></HTML>
Geändert von micha (08.03.04 um 10:45 Uhr)
- just my 2 cent
-
Jetzt muss du nur noch am unteren Ende der Seite die zwei Buttons entsprechend definieren. Am besten wie folgt, nur dann noch um einige "Kollisionsabfragen" erweitert.PHP-Code:
$csvFile = "datei.csv";
$fileArray = file($csvFile);
/* Du solltest über eine GET Variable festlegen, welche Zeile aus der
CSV Datei gelesen werden soll.
Wenn ich dich richtig verstanden habe, sollen ganz links immer die
"Überschriften" stehen. Es ist also nur $array2 "variabel.
Im folgenden Beispiel wird davon ausgegangen, dass du die jeweilige
Zeile über $_GET['row'] übergeben hast.
*/
$array1 = explode(";",$fileArray[0]);
$array2 = explode(";",$fileArray[$_GET['row']-1]);
if(count($array1) >= count($array2)) { $maxrows = count($array1); }
else { $maxrows = count($array2); }
echo "<table>\n";
for($i=0;$i<$maxrows;$i++) {
if($array1[$i] == "" || !isset($array1[$i])) {
$array1[$i] = " ";
}
if($array2[$i] == "" || !isset($array2[$i])) {
$array2[$i] = " ";
}
echo "\t<tr><td>".$array1[$i]."</td><td>".$array2[$i]."</td></tr>\n";
}
echo "</table>";
Hilft das, oder bin ich immer noch nicht dem wirklichen Problem auf der Spur?PHP-Code:echo "<button name=\"back\" value=\"zurück\" onclick=\"location.href=".$_SERVER['PHP_SELF']."?row=".$_GET['row']-1."\" />";
echo "<button name=\"forward\" value=\"vorwärts\" onclick=\"location.href=".$_SERVER['PHP_SELF']."?row=".$_GET['row']+1."\" />";
Ähnliche Themen
-
[PHP] CSV-Import in eine MySQL-Datenbank
Von xamunrax im Forum Stellenangebote (entgeltlich)Antworten: 1Letzter Beitrag: 07.06.10, 22:49 -
MYSQL: Wie aus der Datenbank eine XML Datei erzeugen?
Von Erro im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 23.02.05, 12:39 -
Daten über rs232 einlesen und direkt in eine mysql Datenbank speichern
Von skelefredl im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 27.10.04, 16:57 -
Probleme mit Sortierung beim Zugriff auf eine MySQL Datenbank über CRecordset
Von NBOne im Forum C/C++Antworten: 2Letzter Beitrag: 16.05.04, 15:15 -
Import in eine MySQL Datenbank
Von Magnum im Forum PHPAntworten: 4Letzter Beitrag: 10.01.02, 18:08





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren