Datenbank Update wird nicht geschrieben

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

  • #16
    Also stand der Dinge ist das mir angezeigt wird, das 0 Datensätze geändert wurden aber das bearbeiten war angeblich erfolgreich, was nicht der Fall ist.

    Ich blicks nich mehr...
    Fehlermeldungen liegen bei 0, alle mysql überreste sind in mysqli abgeändert.

    Kann das ein Problem sein das ich mit Sessions arbeite?

    Gruß
    Dieter

    Kommentar


    • #17
      Mit Sessions hat das nichts zu tun. Die DB weiß gar nicht, ob du Sessions verwendest.
      *_affected_rows() liefert bei UPDATE-Queries übrigens nicht die Anzahl der Datensätze, bei denen die WHERE-Klausel wahr wird, sondern die Zahl der Datensätze, die tatsächlich verändert wurden. Deine Query da oben lautet sinngemäß

      UPDATE foo SET bar = bar WHERE bla = bla

      Mit so einer Query bewirkst du absolut gar nichts. Folglich sind 0 rows affected.
      Lass dir mal die fertig zusammengesetzte Query anzeigen. Teste sie ggf. mal in phpMyAdmin.

      Kommentar


      • #18
        An der Session dürfte es kaum liegen, aber ohne den kompletten Code ist es schwer, sicher zu sein. Postest du ihn nochmal?

        Deine Auslassungen sind nett gemeint, aber sie verwirren in dieser Form zu sehr. Etwas kompletter wäre gut, auch wenn es dann etwas länger wird.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #19
          OK ich poste mal alles

          Ein Eingabefeld:

          PHP-Code:
          <input type="text" name="username" value="%s" />

          Der Code
          PHP-Code:
          <?php 
            
          if (isset($_POST['submit']) && $_POST['username'] != '' 
          && $_POST['vorname'] != '') {
              
          $db = new MySQLi('localhost''***''***''***');
              
          $sql sprintf("UPDATE `tabelle` SET `username` = 'username',
          `vorname` = 'vorname', `birthday` = 'birthday', `street` = 'street', 
          `street_number` = 'street_number', `plz` = 'plz', `ort` = 'ort', `tel_arbeit` 
          = 'tel_arbeit', `tel_privat` = 'tel_privat', `mobil` = 'mobil', `bemerkung` = 
          'bemerkung', `hinweise` = 'hinweise' WHERE `id` = 'id'"
          ,  
                 
          $db->real_escape_string($_POST['username']),
                 
          $db->real_escape_string($_POST['vorname']),
                 ...
          hier hab ich ein paar Zeilen entfernt da immer das selbe...
                 
          $db->real_escape_string($_POST['bemerkung']),
                 
          $db->real_escape_string($_POST['hinweise'])
               );
               
               
          $result mysqli_query ($db$sql);
               
          printf ('Veränderte Datensätze: %d'mysqli_affected_rows($db));

              
          $db->query($sql) or die (mysqli_error()); 
              echo 
          '<h2>Datensatz ge&auml;ndert</h2>';
              echo 
          'Erfolgreich!<br /><br />';
              
          $db->close();
            } else {
              echo 
          'Fehler';
            } 
          ?>
          Vorher muss ich noch ein dickes DANKE an alle sagen, die sich die Zeit für mich nehmen!
          Ich hoffe ich hab durch mein ständiges rumprobieren jetzt nicht alles durcheinander gebracht..

          Gruß
          Dieter
          Zuletzt geändert von hansdieter; 02.06.2010, 15:33. Grund: Hoffe hab die 100 Zeichen eingehalten :)

          Kommentar


          • #20
            Lies sprintf!
            Lass dir $sql ausgeben!

            Und verwende passende Spaltentypen in der DB. Bei dir ist scheinbar alles Varchar. Das ist Käse.

            Kommentar


            • #21
              Och nee, ich dachte die ganz Zeit, dass das z. B.
              Code:
              SET `username` = 'username'
              auch eine deiner Code-Kürzungen ist und nicht wirklich so dasteht.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #22
                Ok ihr könnt mich nun hauen!!!

                Ich sitz nun den ganzen Tag davor und es ist mir auch nicht aufgefallen...

                Also klar hiermit gehts dann:

                PHP-Code:
                UPDATE `tabelleSET `username` = '" .$_POST["username"]. "',
                `
                vorname` = '" .$_POST["vorname"]. "'uswusw
                Es werden zwar alle Felder neu geschrieben aber das ist mir jetzt auch egal.

                @onemorenerd - plz und street_number sind integer, timestamp hab ich auch noch drin. Wollte erst alle funktionen zum laufen bringen, dann gehts an den richtigen Aufbau. Nächste Aufgabe ist die Terminvergabe jedes einzelnen User's Also nicht verstecken, auch du nicht AmicaNoctis, ich find euch

                1000 dank noch mal

                Gruß
                Dieter

                Kommentar


                • #23
                  Dein Script ist anfällig für SQL-Injections, eine der am meist ausgenützten Sicherheitslücken.

                  Kommentar


                  • #24
                    Zitat von h3ll Beitrag anzeigen
                    Dein Script ist anfällig für SQL-Injections
                    Hallo h3ll

                    ja ich weiss. Ich könnte noch prepare statements einbauen.
                    Für die die das gleich beachten möchten z.B. so:

                    PHP-Code:
                    $kommando mysqli_prepare($db$sql);
                    mysqli_stmt_bind_param($kommando'ss'$_POST['username'], $_POST['vorname']); 
                    // die zwei 'ss' bedeuten strings, für integer einfach in i austauschen etc. etc. 

                    $ergebnis mysqli_stmt_execute($kommando); 
                    Da ich diese DB aber erstmal nur lokal laufen lasse, sollte das kein Problem sein für den Anfang Trotzdem danke für den Hinweis!

                    Gruß
                    Dieter

                    Kommentar

                    Lädt...
                    X