PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabellenspalten aus csv-Datei aktualisieren


grisu
11.12.2003, 11:07:35
Hallo Leute !

Also ich bin im Moment am Ende mit meinem Latein, vielleicht kann mir einer von euch helfen?

Ich möchte einzelne Felder einer Artikeltabelle in mysql aus einer csv-Datei aktualisieren.
Dabei steht nicht von vornherein fest, welche es sind. Mal die und mal die halt. Dafür hab ich auf der ersten php-Seite folgenden Code :


if(isset($tabelle)){
$result = mysql_query("SELECT * FROM $tabelle");
$menge = mysql_num_fields($result);

print "<form action="dateiauswahl.php" method="GET">";

for($y=0;$y<$menge;$y++){
$felds = mysql_field_name($result,$y);

print "
<input type="Checkbox" name="dbfeld[]" value="$y;$felds">$y - $felds</input><br>";

}
print "
<input type="Submit" name="wirklich" value="Felder aktualisieren">
<input type="Hidden" name="tabelle" value="$tabelle">
</form>
";
}


Soweit so gut, die Feldnamen bekomme ich wunderbar in den Array gelesen. Mein Problem hier ist,
dass ich ja auch den Feldindex brauche, also 1. Feld = 0 usw. und zwar nur für die Felder, die
ich auch wirklich im Formular auswähle. Füge ich ein hidden-Feld mit $y als Inhalt ein, gibt er
mir die gesamte Nummerierung. Ich hab also mal testweise $y mal mit in den value von $dbfeld
packt.
___________________________________________________________________

Auf der nächsten Seite wähle ich die csv-datei aus :

<form enctype="multipart/form-data" action="edit_ergebnis.php" method="POST">

<input type="hidden" name="MAX_FILE_SIZE" value="500000">
(...)
<input type="file" class="Feld" name="userfile">
(...)
<td colspan="2">
<?php
foreach($dbfeld as $wert){
print "<input type="Hidden" name="dbfeld[]" value="$wert"> ";
}
?>
<input type="Hidden" name="tabelle" value="<?php print $tabelle;?>">
<input type="Submit" class="Button" name="aendern" value="Daten aktualisieren">
(...)

Also hier läuft alles wunderbar... zum Glück
______________________________________________________________________

Und jetzt kommt das Sorgenkind :

Als erstes wollte ich den Array von $dbfeld auflösen um den Index vom Feldnamen zu
trennen :

foreach($dbfeld as $wert){
$neu = explode(";",$wert);
foreach($neu as $feld){
$nr = $feld[0];
$feldn = $feld[1];
print "Nummer = $nr und Feldname = $feldn<br>";
}
}

und das ist das Ergebnis von print in meinem Browser :

Nummer = 0 und Feldname =
Nummer = A und Feldname = r
Nummer = 1 und Feldname =
Nummer = A und Feldname = n
Nummer = 2 und Feldname =
Nummer = X und Feldname = K
Nummer = 3 und Feldname =
Nummer = X und Feldname = K
Nummer = 4 und Feldname =
Nummer = X und Feldname = K

Also völliger Unsinn und ich weiss nicht woher er kommt. Für den richtigen Query
brauch ich aber doch den Index um die korrekten Spalten in der csv-datei auszuwählen
oder ?

Vielleicht schüttelt ihr jetzt den Kopf und sagt das geht doch vieeeeeeeel
einfacher...

Vielen Dank schon im voraus für eure Hilfe, jeder Lösungsansatz ist mir willkommen...

Nev
11.12.2003, 11:52:10
Hi grisu

ich weiß jetzt ned ob ich richtig liege, daher fasse ich das ganze mal zusammen, so wie ich das verstehe.

Also:
Du hast eine Table
den Inhalt dieser willst du in einem Formular ausgeben.
Durch die Auswahl von Feldern, legst du fest welche Daten-FELDER exportiert werden sollen.

Nach dem Abschicken des Formulars, soll eine CSV-Datei erstellt werden.


Frage handelt es sich um die gesamten Felder des Tables
oder wählst du nur die bestimmten Datensätze aus??

PS:
Ich habe deinen Beitrag geändert, damit es mit der Formatierung passt

grisu
11.12.2003, 12:28:56
Hallo Nev !

Danke für die schnelle Antwort und die Formatierung :-), ich weiss leider nicht wie das geht..

Also :

1. Ich habe ein mysql-Tabelle mit 24 Feldern
2. Ich will nicht den Inhalt dieser Felder ausgeben, sondern die Feldnamen, damit ich sie in einem Formular mittels Checkbox auswählen kann.
3. Ich will diese Felder nicht EXPORTIEREN, sondern die Daten mit den Daten aus einer BESTEHENDEN csv-Datei aktualisieren.

z.B. im Feld "Text_D" steht "Dies ist ein Text" und diesen Inhalt möchte ich durch den Inhalt von Spalte 1 der csv-Datei "Dies ist der neue Text" ersetzen. Das soll er auch nur machen, wenn die vorhandene ID, in meinem Fall die Artikelnummer gleich ist.

Es geht also nicht um komplette Datensätze, sondern nur um einzelne Felder der Tabelle. Der Rest soll unberührt bleiben!! Im Formular lege ich nur fest, welche Felder aktualisiert werden sollen

Nev
12.12.2003, 11:46:26
Hi Grisu

ich schreib im laufe des Tages ein kleines Script das das kann.

Aber sollte ned so wild sein.

Nev
15.12.2003, 14:36:42
Hi @gain

Ich hab ned auf dich vergessen.

ich hoffe ich kann es heute fertig machen

grisu
18.12.2003, 10:55:52
Hallo Nev !

Vielen lieben Dank an dich, es ist wirklich eine tricky Sache, wenn auch du daran knabberst :-)) Getreu meinem Wahlspruch habe ich es aber auch inzwischen selber lösen können *jubelundstolzseinaufmich* :-)). Der Knackpunkt lag darin, daß ich eine foreach-Schleife zuviel hatte, um den Array für den Index und Feldnamen auszulesen. Meine Ergebnisseite sieht jetzt so aus und funktioniert supergut ! :


<?php
include("header.php");

$aendern = "";
$db = $userfile;
$fp = fopen($db,"r"); // öffnen der Datei

while(!feof($fp)){
$zeile = fgetcsv($fp,500000,";"); //auslesen der ersten Zeile
$aendern ="";

foreach($dbfeld as $wert){ // auslesen des Arrays für die Feldnamen
$neu = explode(";",$wert);
$nr = $neu[0]; // Indexnummer des Feldes
$feldn = $neu[1]; // Feldname

$inhalt = $zeile[$nr]; // Zeile der csv-Datei
$artik = $zeile[0]; // erste Spalte enthält immer die Artikelnummer



if($aendern==""){ // zusammensetzen des Querys
$aendern = $feldn."='".$inhalt."'";
}else{
$aendern = $aendern.",".$feldn."='".$inhalt."'";
}

}
$sql = "UPDATE $tabelle SET $aendern WHERE Artikelnummer='$artik'";
$getan = mysql_query($sql);
print "$sql<br>";
}
fclose($fp);
print "Die Daten wurden eingefügt";


include("footer.php");
?>


Nochmal vielen Dank, daß du dir auch Gedanken gemacht hast.. ich wünsche noch geruhsame Tage und feiert schön Weihnachten.

Nev
18.12.2003, 13:51:04
Hi grisu

Wenn ich mir dein Script so anschaue dann hab ich eh einen Fehler dirn gehabt.

Ich habe es so verstanden, das du die CSV-Datei updaten wolltest.

Ich hab fast alles fertig gehabt, ausser der Update einer bestehenden Datei

(Themenverfehlung: 5 danke setzen)

Ich hänge mal meine an, vielleicht kannst es ja brauchen
(damit feststeht, das ich was gemacht habe)

grisu
19.12.2003, 00:32:09
Hallo Nev

ich hätte niiiiiiiiiiiiiie angenommen, dass du nur untätig herumsitzt :-))


(Themenverfehlung: 5 danke setzen)


Eine 5 ist zu hart ! Ich gebe dir auf jedenfall ein doppelsternchen für deine Mühe :-))
Deinen Code werde ich mir am WE mal in Ruhe ansehen, vorher bekomme ich leider keine Zeit dazu.

Auf jeden Fall noch mal danke und frohe Weihnachten

Nev
19.12.2003, 00:39:10
Nee, hab ich auch ned angenommen.

wenn du fragen hast, melde dich einfach.

Wie gesagt, habe es falsch verstanden.