Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Update

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Update

    Hallo, ich entschuldige mich, falls das der falsche Bereich ist (ist ja in PHP mit MySQL^^)

    Und zwar möchte ich nach dem Klick auf den Button "Update", eine Spalte in meiner Tabelle updateten, so bisher mein Code:

    PHP-Code:
    $sql 'UPDATE konten Feld2 = '.mysql_real_escape_string($_POST['feld2']).', 
                                    Feld1 = '
    .mysql_real_escape_string($_POST['feld1']).', 
                                    Feld4 = '
    .mysql_real_escape_string($_POST['feld4']).',
                                    Feld5 = '
    .mysql_real_escape_string($_POST['feld5']).',
                                    Feld6 = '
    .mysql_real_escape_string($_POST['feld6']).',
                                    Feld7 = '
    .mysql_real_escape_string($_POST['feld7']).',
                                    Feld8 = '
    .mysql_real_escape_string($_POST['feld8']).',
                                    Feld10 = '
    .mysql_real_escape_string($_POST['feld10']).',
                                    Feld11 = '
    .mysql_real_escape_string($_POST['feld11']).',
                                    Feld12 = '
    .mysql_real_escape_string($_POST['feld12']).' WHERE Feld1'
    Die Fehlermeldung:
    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 '= 3, Feld1 = Test, Feld4 = 12, Feld5' at line 1
    (Feld2 = Username)

    Ich komm nicht drauf was das sein könnte.. hat jemand eine Idee?

    Liebe Grüße

  • #2
    Mach mal echo $sql; dann siehst du, das da (für MySQL) die Stringbegrenzer fehlen.

    PS.: Nicht PHP-Fortgeschrittene. Und die mysql-*-Funktionen sind veraltet und sollten nicht benutzt werden. Und durchnummerierte Spalten sind fast immer ein Zeichen von schlechten Tabellendesign.

    Kommentar


    • #3
      sind nicht fast immer ein Zeichen, es sind wirklich immer ein Zeichen. Bis 3 mag manchmal noch ok sein, aber 12 ist auf jeden Fall zu viel.
      Fatal Error: Windows wird gestartet

      Wie administriert man ein Netzwerk: Beispiel

      Kommentar


      • #4
        Ich hab es jetzt so:

        PHP-Code:
        $sql "UPDATE konten SET Rank = ".mysql_real_escape_string($_POST['feld2']).", 
                                        Name = '"
        .mysql_real_escape_string($_POST['feld1'])."', 
                                        Aktivitaet = "
        .mysql_real_escape_string($_POST['feld4']).",
                                        Beschwerdefreiheit = "
        .mysql_real_escape_string($_POST['feld5']).",
                                        Punktetest = "
        .mysql_real_escape_string($_POST['feld6']).",
                                        Zusatzpunkte = "
        .mysql_real_escape_string($_POST['feld7']).",
                                        Strafpunkte = "
        .mysql_real_escape_string($_POST['feld8']).",
                                        Summe = "
        .mysql_real_escape_string($_POST['feld10']).",
                                        altePunkte = "
        .mysql_real_escape_string($_POST['feld11']).",
                                        Aktuelle = "
        .mysql_real_escape_string($_POST['feld12']); 
        mit

        PHP-Code:
        mysql_query($sql); 
        bekomme ich das:
        Spieler wurde geupdatet.string(263) "UPDATE konten SET Rank = 3, Agent = 'Test', Aktivitaet = 12, Beschwerdefreiheit = 3, Punktetest = 0, Zusatzpunkte = 1, Strafpunkte = 0, Summe = 16, altePunkte = -11, Aktuelle = -11"
        mit

        PHP-Code:
        mysql_query($sql) or die(mysql_error()); 
        das:
        Duplicate entry 'Test' for key 'Name'

        Kommentar


        • #5
          Zitat von varrez Beitrag anzeigen

          tl;dr.

          der Klassiker halt. Update ohne Condition.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Wenn einige Felder (z.B. Aktivitaet) keine Strings sind, warum verwendest du dann mysql_real_escape_string()? Du solltest eher den korrekten Typ sicherstellen, beispielsweise durch Casting o.ä. Ansonsten bekommst du von der Datenbank den gleichen Error, falls jemand das Formular mit ungültigen Werten abschickt.

            Kommentar


            • #7
              Also ich bin Anfänger (entschuldigt bitte die falsche Kategorie :/) Könntest du mir evtl ein Beispiel geben wie ich das hin bekomme? Ich war am Googlen, aber ich find keine Lösung wie ich das machen könnt..

              Jetziger Code:
              PHP-Code:
              $sql "UPDATE konten SET Rank = ".mysql_real_escape_string($_POST['feld2']).", 
                                              Agent = '"
              .mysql_real_escape_string($_POST['feld1'])."', 
                                              Aktivitaet = "
              .mysql_real_escape_string($_POST['feld4']).",
                                              Beschwerdefreiheit = "
              .mysql_real_escape_string($_POST['feld5']).",
                                              Punktetest = "
              .mysql_real_escape_string($_POST['feld6']).",
                                              Zusatzpunkte = "
              .mysql_real_escape_string($_POST['feld7']).",
                                              Strafpunkte = "
              .mysql_real_escape_string($_POST['feld8']).",
                                              Summe = "
              .mysql_real_escape_string($_POST['feld10']).",
                                              altePunkte = "
              .mysql_real_escape_string($_POST['feld11']).",
                                              Aktuelle = "
              .mysql_real_escape_string($_POST['feld12'])." WHERE Agent = '$agent'";
                                              
              mysql_query($sql) or die(mysql_error());  
                                              echo 
              "Spieler wurde geupdatet."
              LG und bitte um Verständnis

              Kommentar


              • #8
                Erstmal tu uns bitte den gefallen (und auch dir), mach aus mysql_query() mysqli_query() und aus mysql_error() mysqli_error().

                Duplicate entry 'Test' for key 'Name'
                Das besagt doch, dass du auf der Name-Spalte einen Unique- oder Primärschlüssel liegen hast und es schon einen Eintrag "Test" gibt.

                Und bei Spalten die keine Zeihenfolgen beinalten brauchst du auch kein mysql_real_escape_string()

                Kommentar


                • #9
                  Zitat von Spamversender Beitrag anzeigen

                  Und bei Spalten die keine Zeihenfolgen beinalten brauchst du auch kein mysql_real_escape_string()
                  Ja, aber trotzdem nicht einfach so. Ein (int) vor Integer Werten muss schon sein.
                  Fatal Error: Windows wird gestartet

                  Wie administriert man ein Netzwerk: Beispiel

                  Kommentar

                  Lädt...
                  X