Punkrocker: update in SQL

Hallo zusammen.

Ich möchte aus meiner Datenbank 1 Spalte auslesen ( eine Zahl mit Tausender-Punkt), den Punkt entfernen und das Ergebnis wieder in die Spalte schreiben.

Auslesen und Punkt entfernen klappt auch wunderbar, aber das erneute schreiben in die Datenbank klappt nicht.

Hoffe, mir hat da jmd einen Tip.

LG
Micha

<?php  
  
  
$link = mysql_connect("127.0.0.1", "****", "****") or die("Keine Verbindung möglich: " . mysql_error());  
mysql_select_db("ranking") or die("Auswahl der Datenbank fehlgeschlagen");  
$query = " SELECT regnumpunkte FROM clanranking  ";  
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());  
  
while($data=mysql_fetch_array($result))  
{  
  
$data['regnumpunkte'] = str_replace('.', '', $data['regnumpunkte']);  
  
echo $data['regnumpunkte'] . "<br>";  
  
}  
  
$link = mysql_connect("127.0.0.1", "****", "****") or die("Keine Verbindung möglich: " . mysql_error());  
mysql_select_db("ranking") or die("Auswahl der Datenbank fehlgeschlagen");  
  
  
$query = " UPDATE clanranking SET regnumpunkte='$data'  ";  
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());  
  
  
mysql_close();  
  
  
?>
  1. »» $query = " UPDATE clanranking SET regnumpunkte='$data'  ";  
    
    > $result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
    
    

    Was ist denn $data? String oder Array?
    Und bist Du Dir sicher das du den Update-Befehl nicht in der while schleife machen solltest, und eine WHERE-Klausel einfügen solltest?

    Gruß
    Tunnel85

    1. Was ist denn $data? String oder Array?
      Und bist Du Dir sicher das du den Update-Befehl nicht in der while schleife machen solltest, und eine WHERE-Klausel einfügen solltest?

      Gruß
      Tunnel85

      Mit dem echo $data['regnumpunkte'] bekomme ich eine Zahl ohne Tausenderpunkt, also nehm ich stark an, dass es sich um einen String handelt.

      Das mit der while-schleife werd ich mir mal ansehen.

      LG
      Micha

      1. Mit dem echo $data['regnumpunkte'] bekomme ich eine Zahl ohne Tausenderpunkt, also nehm ich stark an, dass es sich um einen String handelt.

        Das ist ja auch richtig, aber im abschließendem UPDATE lässt Du nur $data eintragen und nicht $data['regnummpunkte'] welches der String(Arrayelement) ist.

        mach doch einfach mal print_r($data) und schau Dir an was er ausgibt.

        Und so wie Du jetzt dein UPDATE hast, setzt du alle Einträge der Spalte regnumpunkte in der DB auf den einen Wert. Du gibst ja nicht an, welchen Eintrag der DB er updaten soll.

        Gruß
        Tunnel85

        1. Das ist ja auch richtig, aber im abschließendem UPDATE lässt Du nur $data eintragen und nicht $data['regnummpunkte'] welches der String(Arrayelement) ist.

          mach doch einfach mal print_r($data) und schau Dir an was er ausgibt.

          Irgendwie steh ich völlig aufm Schlauch. Mit print_r($data); bekomme ich nur folgende Fehlermeldung: Fehler in der SQL-Syntax

          Und mit SET regnumpunkte=$data['regnumpunkte'] oder SET regnumpunkte='$data['regnumpunkte']' bekomme ich immer einen Parse Error

          Wahrscheinlich seh ich einfach vor lauter Bäumen den Wald nicht mehr.

          LG
          Micha

          1. Irgendwie steh ich völlig aufm Schlauch. Mit print_r($data); bekomme ich nur folgende Fehlermeldung: Fehler in der SQL-Syntax

            print_r($data) Gibt Variablen-Informationen in lesbarer Form aus
            also sollte es wie ein echo Befehl nicht in einem SQL-Befehl vorkommen sondern da wo Du eine Ausgabe machen kannst. Damit Du mal siehst was $data ist.

            Und mit SET regnumpunkte=$data['regnumpunkte'] oder SET regnumpunkte='$data['regnumpunkte']' bekomme ich immer einen Parse Error

            Liegt daran das Du den String mit " deklarierst, dann müsstest Du im SQL-Befehl $data[regnumpunkte] (ohne ') schreiben. Hoffe Du testest das ganze in einer sicheren Umgebung, denn so wie es bis jetzt ist, zerschießt Du dir die ganze Tabelle

            Für weitere Fragen gern offen
            Tunnel85

            1. Irgendwie steh ich völlig aufm Schlauch. Mit print_r($data); bekomme ich nur folgende Fehlermeldung: Fehler in der SQL-Syntax
              print_r($data) Gibt Variablen-Informationen in lesbarer Form aus
              also sollte es wie ein echo Befehl nicht in einem SQL-Befehl vorkommen sondern da wo Du eine Ausgabe machen kannst. Damit Du mal siehst was $data ist.

              So, Fehler gefunden, print_r bringt folgendes:

              Array ( [0] => 16.781 [regnumpunkte] => 16781 )

              Und mit SET regnumpunkte=$data['regnumpunkte'] oder SET regnumpunkte='$data['regnumpunkte']' bekomme ich immer einen Parse Error

              Liegt daran das Du den String mit " deklarierst, dann müsstest Du im SQL-Befehl $data[regnumpunkte] (ohne ') schreiben. Hoffe Du testest das ganze in einer sicheren Umgebung, denn so wie es bis jetzt ist, zerschießt Du dir die ganze Tabelle

              Heisst das, ich kann die ' einfach weglassen?
              Zum Glück ist die Tabelle nicht gross, und ne Kopie hab ich auch davon.

              Für weitere Fragen gern offen
              Tunnel85

              Werde wohl noch einige Fragen haben ;-D

              Micha

              1. Wie ist den die Struktur der tabelle aufgebaut?

                Mal kurz zur Erklärung:
                Du liest regnumpunkte aus der Tabelle aus, änderst es, und machst einen Update-Befehl, sagst aber nicht welchen Eintrag er updaten soll. Fazit:alle Einträge in deiner DB bekommen in der Spalte regnumpunkte den gleichen Wert.

                Ich denke aber mal, du willst nur den jeweiligen Datensatz aktualisieren.
                Also selectest Du nicht nur die regnumspunkte, sondern auch die ID die du hoffentlich für jeden Datensatz hast.

                SELECT id,regnumpunkte FROM clanranking

                nun führst Du deine Operationen in der Schleife aus, und machst auch in der Schleife das Update, weist aber dem UPDATE-Befehl in einer WHERE-Klausel zu, welchen Datensatz es aktualisieren soll.

                Gruß
                Tunnel85

                1. Wie ist den die Struktur der tabelle aufgebaut?

                  Ich habe 6 Spalten (Rang, Name, Reich, Rasse, Level, Regnumpunkte), aber eine id hab ich nicht (noch nicht).

                  Mal kurz zur Erklärung:
                  Du liest regnumpunkte aus der Tabelle aus, änderst es, und machst einen Update-Befehl, sagst aber nicht welchen Eintrag er updaten soll. Fazit:alle Einträge in deiner DB bekommen in der Spalte regnumpunkte den gleichen Wert.

                  Ich wäre ja schon mal froh, wenn alle Einträge den gleichen Wert hätten, aber selbst das geht leider nicht.

                  Ich denke aber mal, du willst nur den jeweiligen Datensatz aktualisieren.
                  Also selectest Du nicht nur die regnumspunkte, sondern auch die ID die du hoffentlich für jeden Datensatz hast.

                  SELECT id,regnumpunkte FROM clanranking

                  nun führst Du deine Operationen in der Schleife aus, und machst auch in der Schleife das Update, weist aber dem UPDATE-Befehl in einer WHERE-Klausel zu, welchen Datensatz es aktualisieren soll.

                  OK, das ist soweit klar, werde das gleich in Angriff nehmen.

                  Gruß
                  Tunnel85

                  Micha

                  1. Du solltest zusehen, das jeder Eintrag eine eindeutige ID hat, Du kannst Sie wahrscheinlich bei dir durch den Namen identifizieren, aber auf lange Sicht gesehen ist eine ID unverzichtbar.

                    Nach Deinem Beispiel würde es so aussehen, das Du(angenommen das Feld Name ist eindeutig, d.h. jeder name darf nur einmal existieren) name und regnumpunkte ausliest, dann deine Operation tätigst, und dann einen Update-Befehl ausführst, nach dem Schema
                    update clanranking set regnumpunkte = $irgendwas WHERE name = $name (der name den du vorher ausgelesen hast)

                    Gruß
                    Tunnel85

                    1. Du solltest zusehen, das jeder Eintrag eine eindeutige ID hat, Du kannst Sie wahrscheinlich bei dir durch den Namen identifizieren, aber auf lange Sicht gesehen ist eine ID unverzichtbar.

                      OK, habe jetzt eine id.

                      Nach Deinem Beispiel würde es so aussehen, das Du(angenommen das Feld Name ist eindeutig, d.h. jeder name darf nur einmal existieren) name und regnumpunkte ausliest, dann deine Operation tätigst, und dann einen Update-Befehl ausführst, nach dem Schema
                      update clanranking set regnumpunkte = $irgendwas WHERE name = $name (der name den du vorher ausgelesen hast)

                      Habe jetzt mal folgendes versucht:

                      for($i=1; $i<=4; $i++) {  ....  
                      $query = " UPDATE clanranking SET regnumpunkte=$data WHERE id=$i  "; }
                      

                      Habe momentan 4 Datensätze drin, daher die Schleife mit $i<=4 (werde das später automatisch auslesen aus der Tabelle, wieviele Zeilen es gibt). Die Schleife hab ich ganz am Anfang bevor ich die Tabelle auslese.

                      Bekomme allerdings wieder ma ne Fehlermeldung wegen WHERE id=1. Syntax stimmt doch so?

                      Gruß
                      Tunnel85

                      Micha

                      1. Hi,

                        was murkst Ihr denn da rum mit Datensätze einzeln auslesen und updaten. Das kann man in MySQL mit der Funktion REPLACE() doch in einer einzigen Query erledigen...

                        LG

                        1. Hi,

                          was murkst Ihr denn da rum mit Datensätze einzeln auslesen und updaten. Das kann man in MySQL mit der Funktion REPLACE() doch in einer einzigen Query erledigen...

                          LG

                          Gute Idee.

                          Nur schade, dass im PHP-script ~~~php

                          $query = SELECT REPLACE( regnumpunkte, ".", "" ) FROM clanranking;
                          $result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());

                            
                          nicht funktioniert, in Phpmyadmin aber schon.  
                            
                          Glaube, ich werde grade von meinem Rechner verarscht :(  
                            
                          
                          
                          1. Hello,

                            $query = SELECT REPLACE( regnumpunkte, ".", "" ) FROM clanranking;
                            Glaube, ich werde grade von meinem Rechner verarscht :(

                            nein, du musst nur endlich mal nachschauen, wie in PHP die Stringsyntax funktioniert, d.h. welche Zeichen wo vorkommen dürfen, wie man Strings anlegt, wie man maskiert, ...

                            MfG
                            Rouven

                            --
                            -------------------
                            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                            Don't lick your wounds: celebrate them. The scars you bear are the signs of a competitor.  --  character Richard Webber on Grey's Anatomy: 'Where the wild things are'
                            1. Hello,

                              $query = SELECT REPLACE( regnumpunkte, ".", "" ) FROM clanranking;
                              Glaube, ich werde grade von meinem Rechner verarscht :(
                              nein, du musst nur endlich mal nachschauen, wie in PHP die Stringsyntax funktioniert, d.h. welche Zeichen wo vorkommen dürfen, wie man Strings anlegt, wie man maskiert, ...

                              MfG
                              Rouven

                              Habe es jetzt so versucht, Fehlermeldung gibts keine, aber es ändert sich auch nichts in der Tabelle:

                              $query = ' SELECT REPLACE( regnumpunkte, ".", "" ) FROM clanranking ';

                              Was bitte mach ich falsch?

                              LG
                              Micha

                              1. *sigh*

                                Seit wann ändert sich bei einem SELECT-Statement etwas in der Tabelle. Wenn das passieren soll, musst Du natürlich ein UPDATE-Statement absenden.

                                LG

                      2. kleiner Nachtrag:

                        Print_r bringt folgendes:

                        Array ( [0] => 1 [id] => 1 [1] => 10.000 [regnumpunkte] => 10000 )

                        Hier bricht er ab mit einer Fehlermeldung:

                        $query = " UPDATE clanranking SET regnumpunkte=$data[regnumpunkte] WHERE id=$i ";

                        Habe aber jetzt rausgefunden, dass es an SET regnumpunkte=$data[regnumpunkte] liegt. Was mach ich da falsch?

                        LG
                        MIcha