Datenbank automatisch umschreiben
Hallo.
Ich habe beim erstellen der Datenbank den Fehler gemacht, das ich ein Preis Feld hatte indem ich auch immer die Währung hinein geschrieben hatte.
Dadurch sind nun aber Additionen nicht möglich.
Darum habe ich nun ein FeldWaehrung hinzu gefügt.
Nun meine Frage.
Gibt es einen automatisierten Weg, die angegebene Währung (DM, €, $) zusammen mit eventuellen Leerzeichen aus dem Preis Feld auszuschneiden und in das zu dem Artikel passende Feld "Waehrung" ohne Leerzeichen einzufügen?
Ansonsten müsste ich das per Hand machen, was eine echte sch... arbeit währe.
Jan
Ich habe beim erstellen der Datenbank den Fehler gemacht, das ich ein Preis Feld hatte indem ich auch immer die Währung hinein geschrieben hatte.
Dadurch sind nun aber Additionen nicht möglich.
Darum habe ich nun ein FeldWaehrung hinzu gefügt.
Nun meine Frage.
Gibt es einen automatisierten Weg, die angegebene Währung (DM, €, $) zusammen mit eventuellen Leerzeichen aus dem Preis Feld auszuschneiden und in das zu dem Artikel passende Feld "Waehrung" ohne Leerzeichen einzufügen?
Ansonsten müsste ich das per Hand machen, was eine echte sch... arbeit währe.
Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
ja klar geht das. dazu kannst du einfach die stringfunktionen von mysql nutzen:
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
zum beispiel suchst du die position des leerzeichens und speicherst die zeichen vor dem leerzeichen in das feld waehrung und die zeichen danach in feldwaehrung.
jperl
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
zum beispiel suchst du die position des leerzeichens und speicherst die zeichen vor dem leerzeichen in das feld waehrung und die zeichen danach in feldwaehrung.
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php
$result = mysql_query("SELECT preis, id FROM tabelle") or die(mysql_error());
$fehler = array();
$update = "";
while($row = mysql_fetch_assoc($result)) {
$array = explode(" ", $row['preis']); // Funktioniert nur, wenn ein Leerzeichen drin ist!
if(is_numeric($array[0])) { // Zahl steht vor der Währung
$zahl = (float) $array[0];
$waehrung = $array[1];
}
elseif(is_numeric($array[1])) { // Andersrum
$zahl = (float) $array[1];
$waehrung = $array[0];
}
else{ // Keine Auflösung durch explode
$fehler[] = $row['id'];
}
$update .= "UPDATE tabelle SET preis = '{$zahl}', waehrung = '{$waehrung}' WHERE id = '{$row['id'}'; ";
}
mysql_query($update) or die(mysql_error());
if(!empty($fehler)) {
echo("Fehler bei folgenden Ids:".implode(",", $fehler));
}
?>
|
ungetestet und muss angepasst werden
Das sollte zumindest die Fälle mit Leerzeichen drin erschlagen, für alles andere müsste man nen Regex bauen. Die Ids (ich hoffe für dich dass du welche hast), die damit nicht laufen, werden ausgegeben, wenn das nicht viele sind, kann man das ja händisch machen.
AUF JEDEN FALL VORHER EIN BACKUP MACHEN!
~!__/
..o.o
This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.
Erstmal vielen Dank für die Hilfe.
Hab es angepasst.
Hab auch schon zwei Dinge bearbeitet wo es Fehler gab.
Es lautet nun:
Allerdings bekomme ich den Fehler:
Das ist so wenn ich das .= lasse.
Wenn ich den Punkt weg mache fällt der Fehler weg, zeigt er mir dann die normale Fehlermeldung: "Fehler bei folgenden Ids:1,3,4,..." und das für alle IDs in der Datenbank.
Hilfe?
Jan
Hab es angepasst.
Hab auch schon zwei Dinge bearbeitet wo es Fehler gab.
Es lautet nun:
|
|
PHP-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<?php
$result = mysql_query("SELECT Preis, ID FROM rpgsammlung_1") or die(mysql_error());
$fehler = array();
$update = "";
while($row = mysql_fetch_assoc($result)) {
$array = explode(" ", $row['Preis']); // Funktioniert nur, wenn ein Leerzeichen drin ist!
if(is_numeric($array[0])) { // Zahl steht vor der Währung
$Zahl = (float) $array[0];
$Waehrung = $array[1];
}
elseif(is_numeric($array[1])) { // Andersrum
$Zahl = (float) $array[1];
$Waehrung = $array[0];
}
else{ // Keine Auflösung durch explode
$fehler[] = $row['ID'];
}
$update .= "UPDATE rpgsammlung_1 SET Preis = '{$Zahl}', Waehrung = '{$Waehrung}' WHERE ID = '{$row['ID']}' ";
}
mysql_query($update) or die(mysql_error());
if(!empty($fehler)) {
echo("Fehler bei folgenden Ids:".implode(",", $fehler));
}
?>
|
Allerdings bekomme ich den Fehler:
Zitat
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE rpgsammlung_1 SET Preis = '20.95', Waehrung = '$' WHERE ID = '2' UPDATE r' at line 1
Das ist so wenn ich das .= lasse.
Wenn ich den Punkt weg mache fällt der Fehler weg, zeigt er mir dann die normale Fehlermeldung: "Fehler bei folgenden Ids:1,3,4,..." und das für alle IDs in der Datenbank.
Hilfe?

Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
hm, ich dachte das wäre möglich, wenn man die mit einem Semikolon trennt.
Zeile 37:
Zeile 39 entfällt dann
Zeile 37:
|
|
PHP-Quelltext |
1 |
mysql_query("UPDATE rpgsammlung_1 SET Preis = '{$Zahl}', Waehrung = '{$Waehrung}' WHERE ID = '{$row['ID']}' ") or die(mysql_error());
|
Zeile 39 entfällt dann
~!__/
..o.o
This is Einkaufswagen.
Copy Einkaufswagen into your signature to help him on his way to world domination.
ist quasi ein schutz gegen mysql injection.
wenn man sich seiner sache aber sehr sicher ist kann man auch die mysqli extension verwenden. die gibts aber erst ab php5.
http://at.php.net/manual/en/function.mysqli-multi-query.php
jperl
wenn man sich seiner sache aber sehr sicher ist kann man auch die mysqli extension verwenden. die gibts aber erst ab php5.
http://at.php.net/manual/en/function.mysqli-multi-query.php
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
dann denke ich mal, dass du es falsch ausgetauscht hast. hast du es so gemacht?
diese zeile weg:
und die neue statt dieser:
jperl
diese zeile weg:
|
|
PHP-Quelltext |
1 |
mysql_query($update) or die(mysql_error());
|
und die neue statt dieser:
|
|
PHP-Quelltext |
1 |
$update .= "UPDATE rpgsammlung_1 SET Preis = '{$Zahl}', Waehrung = '{$Waehrung}' WHERE ID = '{$row['ID']}' ";
|
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Ähnliche Themen
-
PHP »-
Formulardaten Sicher zum Server übertragen ?!?
(9. März 2005, 12:07)
-
PHP »-
suche scripte
(16. September 2004, 21:34)
-
Foren-, Blog- und Content-Managementsysteme »-
WBB 1.2 FAQ umschreiben?
(1. Mai 2003, 12:49)
-
PHP »-
"webauction" und "phpbb" kombinieren/zusammenfügen?!
(25. Januar 2003, 22:50)
-
Datenbanken »-
Datenbank
(28. Oktober 2002, 08:44)



