Zur Navigation

CSV per PHP in SQL einspielen [2]

11 Thor (Gast)

UPDATE SET ean_nummer = '' WHERE products_LfStatus =
wird nur einmal ausgegeben.

So richtig?
$i = 0;
while ($data = fgetcsv($handle, 1000, ";")) { 
    if ($i > 0) {
        // UPDATE-Query 
    }
    $i ++;
}
fclose ($handle);

die("UPDATE " . $products_description. " SET ean_nummer = '" . mysql_real_escape_string($data[10]) . "' WHERE products_LfStatus = " . $data[0]);
mysql_query("UPDATE " . $products_description. " SET ean_nummer = '" . mysql_real_escape_string($data[10]) . "' WHERE products_LfStatus = " . $data[0]); 
}
mysql_close; 
?>

31.03.2011 11:55

12 Jörg Kruse

Die Query muss wieder in die Schleife eingebaut werden, diesmal in das von mir erstellte if Konstrukt, damit sie beim ersten Schleifendurchlauf ausgelassen wird. Das die() solltest du rausnehmen - das war ja nur zum Debuggen da

$i = 0;
while ($data = fgetcsv($handle, 1000, ";")) { 
    if ($i > 0) {
        mysql_query("UPDATE " . $products_description. " SET ean_nummer = '" . mysql_real_escape_string($data[10]) . "' WHERE products_LfStatus = " . $data[0]); 
    }
    $i ++;
}
fclose ($handle);

31.03.2011 13:58 | geändert: 31.03.2011 13:59

13 Thor (Gast)

Danke Dir für deine unglaubliche Geduld

UPDATE SET ean_nummer = '' WHERE products_LfStatus = 3700
wird 1x ausgegeben. Die "3700" ist eine Artikelnummer.
Ein beschreiben der Datenbank findet nicht statt.

<?php

mysql_connect("localhost","xxx","xxx") or die ("Es konnte keine Verbindung zur Datenbank hergestellt werden!!!"); 
mysql_select_db("usr_xxx") or die ("Die Datenbank existiert nicht.");

$handle = fopen("/home/www/xxxx/html/neueseite/bestand/bestaende_iso1.csv", "r") or die ("Kann Datei nicht oeffnen."); 

$i = 0;
while ($data = fgetcsv($handle, 1000, ";")) { 
    if ($i > 0) {
die("UPDATE " . $products_description. " SET ean_nummer = '" . mysql_real_escape_string($data[10]) . "' WHERE products_LfStatus = " . $data[0]);
        mysql_query("UPDATE " . $products_description. " SET ean_nummer = '" . mysql_real_escape_string($data[10]) . "' WHERE products_LfStatus = " . $data[0]); 
    }
    $i ++;
}
fclose ($handle);
mysql_close; 
?>

31.03.2011 14:48

14 Jörg Kruse

Ein beschreiben der Datenbank findet nicht statt.

Du hast das aber ohne das die() probiert? die() bricht das Script an der Stelle ab. Das hatte ja nur den Zweck, sich zum Debuggen die Query mal ausgeben zu lassen. Wenn das Script ordnungsgemäß laufen soll, musst du das die() wieder rausnehmen

$i = 0;
while ($data = fgetcsv($handle, 1000, ";")) { 
    if ($i > 0) {
die("UPDATE " . $products_description. " SET ean_nummer = '" . mysql_real_escape_string($data[10]) . "' WHERE products_LfStatus = " . $data[0]);
        mysql_query("UPDATE " . $products_description. " SET ean_nummer = '" . mysql_real_escape_string($data[10]) . "' WHERE products_LfStatus = " . $data[0]); 
    }
    $i ++;
}


Edit:

UPDATE SET ean_nummer = '' WHERE products_LfStatus = 3700

products_LfStatus ist die Artikelnummer und ean_nummer die Spalte, die geändert werden soll?

Edit 2:

Da fehlt auch noch der Tabellenname - dazu müsstest du $products_description noch definieren. Ich würde hier allerdings einen anderen Bezeichner wählen, z.B. $products_table. Deine Bezeichner deuten mir darauf hin, dass du den Aufbau der Query noch nicht so ganz verstanden hast.

Die Query sollte im Endeffekt so ausschauen:

UPDATE tabellenname SET spalteDieSichaendert = 'bla' WHERE Artikelnummer = 3700

31.03.2011 14:58 | geändert: 31.03.2011 15:12

15 Thor (Gast)

Du hast das aber ohne das die() probiert? die() bricht das Script an der Stelle ab. Das hatte ja nur den Zweck, sich zum Debuggen die Query mal ausgeben zu lassen. Wenn das Script ordnungsgemäß laufen soll, musst du das die() wieder rausnehmen
Sorry, hatte ich natürlich. War nur ein weißer Bildschirm.

products_LfStatus ist die Artikelnummer und ean_nummer die Spalte, die geändert werden soll?
genau so ist es. Bitte störe dich nicht an der Bezeichnung.

Da fehlt auch noch der Tabellenname - dazu müsstest du $products_description noch definieren. Ich würde hier allerdings einen anderen Bezeichner wählen, z.B. $products_table. Deine Bezeichner deuten mir darauf hin, dass du den Aufbau der Query noch nicht so ganz verstanden hast.
$products_table = $products_description;
?
Leider keine Änderung

31.03.2011 17:55

16 Jörg Kruse

Zitat von Thor
Du hast das aber ohne das die() probiert? die() bricht das Script an der Stelle ab. Das hatte ja nur den Zweck, sich zum Debuggen die Query mal ausgeben zu lassen. Wenn das Script ordnungsgemäß laufen soll, musst du das die() wieder rausnehmen
Sorry, hatte ich natürlich. War nur ein weißer Bildschirm.

Der weiße Bildschirm ist normal - das Script macht ja nur Datenbankänderungen, erzeugt aber keine Ausgabe.

products_LfStatus ist die Artikelnummer und ean_nummer die Spalte, die geändert werden soll?
genau so ist es. Bitte störe dich nicht an der Bezeichnung.

Da fehlt auch noch der Tabellenname - dazu müsstest du $products_description noch definieren. Ich würde hier allerdings einen anderen Bezeichner wählen, z.B. $products_table. Deine Bezeichner deuten mir darauf hin, dass du den Aufbau der Query noch nicht so ganz verstanden hast.
$products_table = $products_description;
?
Leider keine Änderung

Du musst den Namen der Datenbanktabelle definieren, die geändert werden soll. Du kannst den Namen auch direkt in die Query einsetzen:

mysql_query("UPDATE NameDerDatenbankTabelle SET ean_nummer = '" . mysql_real_escape_string($data[10]) . "' WHERE products_LfStatus = " . $data[0]);

31.03.2011 18:41

17 Thor (Gast)

Moin Jörg,

dieser Befehl sollte funktionieren. Nur wird nichts eingetragen und auch kein Fehler angezeigt. Verbindungen stehen auch soweit, CSV wird richtig ausgelesen und die Datenbank ist beschreibbar (siehe unten)

mysql_query("UPDATE products_description SET ean_nummer = '" . mysql_real_escape_string($data[11]) . "' WHERE products_LfStatus = " . $data[0]) or die(mysql_error());

der selbe Befehl mit "Testeintrag" wird auch mit einem Eintrag in das richtige Datenfeld belohnt.

mysql_query("UPDATE products_description SET ean_nummer = 'Testeintrag" . mysql_real_escape_string($data[11]) . "' WHERE products_LfStatus = " . $data[0]) or die(mysql_error());

Ich habe jetzt keine weiteren Anhaltspunkte mehr woran es liegt :-((

13.04.2011 10:12

18 Jörg Kruse

Nur wird nichts eingetragen

Bedeutet "nichts", dass in dem betreffenden Datenfeld ein leerer String eingetragen wird oder dass gar kein neuer Datensatz eingetragen wird?

$data[11] ist nicht leer? bei $data[11] sollte es sich um die zwölfte Spalte des CSV handeln, d.h um den Wert, der in deinem Fall nach dem 11. Semikolon steht

13.04.2011 11:29

19 Thor (Gast)

Sorry für meine Blödheit. Jetzt wird es in die Datenbank eingetragen. Nur Artikelnummern mit "Buchstaben" mag er anscheinend nicht.

Unknown column '10009B' in 'where clause'

13.04.2011 14:25

20 Jörg Kruse

Wenn die Artikelnummen Buchstaben enthalten können, müssen sie auch als String behandelt, d.h. in Hochkommata eingeschlossen werden (und zum Schutz vor SQL-Injection mit mysql_real_escape_string() behandelt werden)

mysql_query("UPDATE products_description 
            SET ean_nummer = '" . mysql_real_escape_string($data[11]) . "' 
            WHERE products_LfStatus = '" . mysql_real_escape_string($data[0]) . "'")
or die(mysql_error());

13.04.2011 14:47