Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 594

 

1 Zum Seitenanfang

Samstag, 8. März 2008, 11:58

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
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
 

jperl

Super Moderator

Dabei seit: 09.04.2003

Beiträge: 3 453

 

2 Zum Seitenanfang

Samstag, 8. März 2008, 12:11

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
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
 

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 594

 

3 Zum Seitenanfang

Samstag, 22. März 2008, 13:18

mmmh... irgendwie komme ich damit nicht zurecht bzw. ich kapiere nicht wie ich es anwenden muss.
Kannst du mir eventuell den passenden SQL Code erstellen?
Das währe echt nett. :)

Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

4 Zum Seitenanfang

Samstag, 22. März 2008, 14:43

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.
 

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 594

 

5 Zum Seitenanfang

Samstag, 22. März 2008, 20:55

Erstmal vielen Dank für die Hilfe.
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
 

jperl

Super Moderator

Dabei seit: 09.04.2003

Beiträge: 3 453

 

6 Zum Seitenanfang

Samstag, 22. März 2008, 21:08

naja der fehler entsteht dadurch, dass hinter dem sql statement der strichpunkt fehlt.

allerdings lässt sich afaik mit mysql_query auch nur ein statement ausführen.

jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
 

Skittles

Moderator

Dabei seit: 14.02.2004

Beiträge: 3 014

 

7 Zum Seitenanfang

Samstag, 22. März 2008, 21:58

hm, ich dachte das wäre möglich, wenn man die mit einem Semikolon trennt.

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.
 

jperl

Super Moderator

Dabei seit: 09.04.2003

Beiträge: 3 453

 

8 Zum Seitenanfang

Samstag, 22. März 2008, 22:22

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
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
 

Jan Schattling

Super Moderator

Dabei seit: 30.09.2002

Beiträge: 2 594

 

9 Zum Seitenanfang

Samstag, 22. März 2008, 23:43

Hab die Zeile ausgetauscht.
Errormeldung ist "Query was empty"
Außerdem wurden alle Preise mit einem Wert (29,95), und alle Währungen mit einem anderen ($)überschrieben.


Jan
"Fehler sind immer zu Verzeihen, wenn man den Mut hat, diese auch zu zugeben." Lee Jun-Fan
 

jperl

Super Moderator

Dabei seit: 09.04.2003

Beiträge: 3 453

 

10 Zum Seitenanfang

Samstag, 22. März 2008, 23:52

dann denke ich mal, dass du es falsch ausgetauscht hast. hast du es so gemacht?

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.
 

Ähnliche Themen