PDA

Vollstndige Version anzeigen : Tabellenspalten aus csv-Datei aktualisieren - HILFE *brll*


grisu
11-12-2003, 12:07
Hallo Leute !

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

Ich mchte 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. Dafr 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 fr die Felder, die
ich auch wirklich im Formular auswhle. Fge 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 nchsten Seite whle 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 luft alles wunderbar... zum Glck
______________________________________________________________________

Und jetzt kommt das Sorgenkind :

Als erstes wollte ich den Array von $dbfeld auflsen 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 vlliger Unsinn und ich weiss nicht woher er kommt. Fr den richtigen Query
brauch ich aber doch den Index um die korrekten Spalten in der csv-datei auszuwhlen
oder ?

Vielleicht schttelt ihr jetzt den Kopf und sagt das geht doch vieeeeeeeel
einfacher...

Vielen Dank schon im voraus fr eure Hilfe, jeder Lsungsansatz ist mir willkommen...

Nev
11-12-2003, 12:52
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 whlst du nur die bestimmten Datenstze aus??

PS:
Ich habe deinen Beitrag gendert, damit es mit der Formatierung passt

grisu
11-12-2003, 13:28
Hallo Nev !

Danke fr 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 auswhlen 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 mchte 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 Datenstze, sondern nur um einzelne Felder der Tabelle. Der Rest soll unberhrt bleiben!! Im Formular lege ich nur fest, welche Felder aktualisiert werden sollen

Nev
12-12-2003, 12:46
Hi Grisu

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

Aber sollte ned so wild sein.

Nev
15-12-2003, 15:36
Hi @gain

Ich hab ned auf dich vergessen.

ich hoffe ich kann es heute fertig machen

grisu
18-12-2003, 11:55
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 lsen knnen *jubelundstolzseinaufmich* :-)). Der Knackpunkt lag darin, da ich eine foreach-Schleife zuviel hatte, um den Array fr 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 fr 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 enthlt 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 eingefgt";


include("footer.php");
?>


Nochmal vielen Dank, da du dir auch Gedanken gemacht hast.. ich wnsche noch geruhsame Tage und feiert schn Weihnachten.

Nev
18-12-2003, 14:51
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 hnge mal meine an, vielleicht kannst es ja brauchen
(damit feststeht, das ich was gemacht habe)

grisu
19-12-2003, 01:32
Hallo Nev

ich htte niiiiiiiiiiiiiie angenommen, dass du nur unttig herumsitzt :-))


(Themenverfehlung: 5 danke setzen)


Eine 5 ist zu hart ! Ich gebe dir auf jedenfall ein doppelsternchen fr deine Mhe :-))
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, 01:39
Nee, hab ich auch ned angenommen.

wenn du fragen hast, melde dich einfach.

Wie gesagt, habe es falsch verstanden.