Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] "UPDATE" geänderte Daten werden nicht in DB übernommen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] "UPDATE" geänderte Daten werden nicht in DB übernommen

    Hallo Community,

    ich bin in sachen PHP und SQL ein Anfänger. Ich habe mich bis hierher durch diverse Tutorials gearbeitet wodurch ich auch mal eine kleine Private Adressdatenbank erfolgreich erstellt habe nun ja.
    Mittlerweile versuche ich für meine tägliche Arbeit als Kundendienstmonteuer eine Kundendatenbank zu erstellen in dem diverse informationen über beim Kunden aufgestellte und Inbetriebgenommene Kaffeemaschinen gesammelt werden. Diese Datenbank soll nur über XAMMP auf meinen Laptop laufen. Im Internet ist sie nicht nötig.

    Gut soviel zur Vorgeschichte!

    Das Problem das ich habe ist das wenn ich über ein Formular einen Kunden Datensatz ändern möchte mir der Geänderte Datensatz nicht in die DB geschrieben wird obwohl ich vom Script eine "Erfolgsmeldung" geliefert bekomme. Prüfe ich dann die Daten in PHPmyAdmin sind diese nicht geändert worden.
    Ich finde den Fehler im Script nicht vllt. Kann jemand von euch mal drüber schauen und mir einen Tipp geben.

    PHP-Code:
    require_once('../inc/db.connect.php');

    print_r($_POST);
        
        
    $nr=$_POST["nr"];
        
    $datum=$_POST["datum"];
        
    $kundenart=$_POST["kundenart"];
        
    $t_fnr=$_POST["t_fnr"];
        
    $restaurant=$_POST["restaurant"];
        
    $name=$_POST["name"];
        
    $strasse=$_POST["strasse"];
        
    $plz=$_POST["plz"];
        
    $ort=$_POST["ort"];
        
    $telefon=$_POST["telefon"];
        
    $email=$_POST["email"];
        
    $hersteller=$_POST["hersteller"]; 
        
    $masch_a=$_POST["masch_a"];
        
    $masch_b=$_POST["masch_b"];
        
    $masch_c=$_POST["masch_c"];
        
    $masch_d=$_POST["masch_d"];
        
    $masch_e=$_POST["masch_e"]; 
        
    $sn_a=$_POST["sn_a"];
        
    $sn_b=$_POST["sn_a"];
        
    $sn_c=$_POST["sn_c"];
        
    $sn_d=$_POST["sn_d"];
        
    $sn_e=$_POST["sn_e"];
        
    $zusatz_a=$_POST["zusatz_a"];
        
    $zusatz_b=$_POST["zusatz_b"];
        
    $zusatz_c=$_POST["zusatz_c"];
        
    $zusatz_d=$_POST["zusatz_d"];
        
    $zusatz_e=$_POST["zusatz_e"];
        
    $zusatzsn_a=$_POST["zusatzsn_a"]; 
        
    $zusatzsn_b=$_POST["zusatzsn_b"];
        
    $zusatzsn_c=$_POST["zusatzsn_c"];
        
    $zusatzsn_d=$_POST["zusatzsn_d"];
        
    $zusatzsn_e=$_POST["zusatzsn_e"];
        
    $wasserfilter=$_POST["wasserfilter"];
        
    $kaffeeroester=$_POST["kaffeeroester"];
        
    $sorte_m_links=$_POST["sorte_m_links"];
        
    $sorte_m_rechts=$_POST["sorte_m_rechts"];  
        
    $datuminb=$_POST["datuminb"];
        
    $datumaftersale=$_POST["datumaftersale"];
        
    $letztewartung=$_POST["letztewartung"];
        
    $naechstewartung=$_POST["naechstewartung"]; 
        
    $werksvertretung=$_POST["werksvertretung"];
        
    $bemerkung=$_POST["bemerkung"];
        
        
        
    $sql="UPDATE `kaffee` 
                SET
                    `datum`='
    $datum',
                    `kundenart`='
    $kundenart',
                    `t_fnr`='
    $t_fnr',
                    `restaurant`='
    $restaurant',
                    `name`='
    $name',
                    `strasse`='
    $strasse',
                    `plz`='
    $plz',
                    `ort`='
    $ort',
                    `telefon`='
    $telefon',
                    `email`='
    $email',
                    `hersteller`='
    $hersteller', 
                    `masch_a`='
    $masch_a',
                    `masch_b`='
    $masch_b',
                    `masch_c`='
    $masch_c',
                    `masch_d`='
    $masch_d',
                    `masch_e`='
    $masch_e', 
                    `sn_a`='
    $sn_a',
                    `sn_b`='
    $sn_b',
                    `sn_c`='
    $sn_c',
                    `sn_d`='
    $sn_d',
                    `sn_e`='
    $sn_e',
                    `zusatz_a`='
    $zusatz_a',
                    `zusatz_b`='
    $zusatz_b',
                    `zusatz_c`='
    $zusatz_c',
                    `zusatz_d`='
    $zusatz_d',
                    `zusatz_e`='
    $zusatz_e',
                    `zusatzsn_a`='
    $zusatzsn_a', 
                    `zusatzsn_b`='
    $zusatzsn_b',
                    `zusatzsn_c`='
    $zusatzsn_c',
                    `zusatzsn_d`='
    $zusatzsn_d',
                    `zusatzsn_e`='
    $zusatzsn_e',
                       `wasserfilter`='
    $wasserfilter',
                    `kaffeeroester`='
    $kaffeeroester',
                    `sorte_m_links`='
    $sorte_m_links',
                    `sorte_m_rechts`='
    $sorte_m_rechts',  
                    `datuminb`='
    $datuminb',
                       `datumaftersale`='
    $datumaftersale',
                    `letztewartung`='
    $letztewartung',
                    `naechstewartung`='
    $naechstewartung', 
                    `werksvertretung`='
    $werksvertretung',
                       `bemerkung`='
    $bemerkung'
                WHERE `nr` = '"
    .$nr."';"
                
     
    $result=mysql_query($sql);
     
     if(
    $result)
            {
                echo
    "Datensatz wurde erfolgreich hinzugefügt.";
            }
            else
            {
                die(
    'Fehler: ' mysql_error());
            }
     
        
    mysql_close($connect);   // Verbindung zur Datenbank wird geschlossen 
        
        
    ?> 
    Die Funktion print_r($_POST); die ich eingebaut hatte um erstmal zu Prüfen ob die Daten vom änderungsformular übergeben werden bestätigt mir das die Daten eingelesen wurden.


    Schonmal vielen Dank
    Ciggy


  • #2
    Aber du aktualisiert schon im PMA bevor du die geänderte query suchst?

    Mach mal ein echo $sql und kopiere das Statement in PMA und lass es dort laufen, was passiert.

    (PMA = PhpMyAdmin)

    Und mysql_ wird bald nicht mehr funktionieren, weil es veraltet ist und aus PHP rausfliegt. Kann man durch mysqli_ oder PDO ersetzen. Und ja deine Anwendung ist unsicher, sie dir dessen trotzdem bewusst.

    http://php.net/manual/en/migration55.deprecated.php

    http://www.peterkropff.de/site/php/pdo.htm

    http://www.peterkropff.de/site/php/mysqli.htm

    http://php-de.github.io/jumpto/sql-injection/

    http://php-de.github.io/jumpto/sicherheit/

    LG
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Hallo Hausl,

      vielen dank für deine Tips.

      echo $sql

      habe ich im script ausführen lassen mit dem ergebnis das mir der geänderte eintrag angezeigt wird.
      Allerdings erkannte ich in PMA immer noch keine änderung des eintrages also alles wie gehabt.
      Anschließend habe ich das komplette statement rauskopiert und so wie du es vorgeschlagen hattest im PMA durchlaufen lassen wiederum mit dem Ergebnis das keine Fehlermeldung ausgegeben wurde aber der eintrag auch nicht geändert worden ist.

      Beim genauen betrachten des Statements ist mir aufgefallen das nach der WHERE Bedingung meine Variable

      PHP-Code:
       WHERE `nr` = '".$nr."'
      nicht übergeben wird.

      Siehe letzte Zeile

      PHP-Code:
      UPDATE `kaffeeSET `datum` = '',
      `
      kundenart` = 'AGIP-Kunde',
      `
      t_fnr` = '99999',
      `
      restaurant` = '',
      `
      name` = 'bbb',
      `
      strasse` = 'Freiburger Str. 12',
      `
      plz` = '79232',
      `
      ort` = 'March',
      `
      telefon` = '00000000000000',
      `
      email` = 'konkret@gr.de',
      `
      hersteller` = 'Thermoplan',
      `
      masch_a` = 'BWone',
      `
      masch_b` = '',
      `
      masch_c` = '',
      `
      masch_d` = '',
      `
      masch_e` = '',
      `
      sn_a` = 'B1080808',
      `
      sn_b` = 'B1080808',
      `
      sn_c` = '',
      `
      sn_d` = '',
      `
      sn_e` = '',
      `
      zusatz_a` = 'CH (Tassenw',
      `
      zusatz_b` = '',
      `
      zusatz_c` = '',
      `
      zusatz_d` = '',
      `
      zusatz_e` = '',
      `
      zusatzsn_a` = 'f84r8zef',
      `
      zusatzsn_b` = '',
      `
      zusatzsn_c` = '',
      `
      zusatzsn_d` = '',
      `
      zusatzsn_e` = '',
      `
      wasserfilter` = 'Purity C300',
      `
      kaffeeroester` = 'Tchibo',
      `
      sorte_m_links` = 'Piacetto Esspresso',
      `
      sorte_m_rechts` = 'Piacetto Cafe Crema',
      `
      datuminb` = '03.11.',
      `
      datumaftersale` = '',
      `
      letztewartung` = '',
      `
      naechstewartung` = '',
      `
      werksvertretung` = '',
      `
      bemerkung` = '' WHERE `nr` = '' 
      Das heist für mich eigentlich das in dem vorherigen Formular zur Anzeige bzw. ändern der Daten ein Fehler vorliegen muss da die "nr" nicht mit übergeben wird, diese "nr" ist mein PRIMARY KEY mit dessen hilfe ich die Datensätze weiter bearbeite.

      Kommentar


      • #4
        Es wäre echt zu empfehlen eine Abstraktionsklasse zu verwenden ... in Ado wäre dein update mit nur einer Zeile erledigt:

        $db->AutoExecute("deine_tabelle",$_POST,"UPDATE","id = ".$_POST['nr']);

        PDO funktioniert glaube ich so ähnlich ...

        Vorteil:
        - du musst dich nicht um neue spalten kümmern
        - prepared statements egal ob update, insert oder delete (IMHO schöner als bei PDO)
        - kein nerviges geschreibe von mysql_query etc ... per $data = $db->getAll/getRow/getOne(); etc. direkte rückgabe als array
        Nachteil
        - die Namen der Formularfelder identisch sein müssen mit den Spaltennamen in der DB (oder umgekehrt ...)

        Kommentar


        • #5
          Hallo der robert,

          da ich in php und sql noch anfänger bin und mich nun durch tutorials gearbeitet hatte die wohl nicht mehr ganz up to date zu sein scheinen möchte ich erstmal das eingermasen beherrschen was ich mir dort angeeignet hatte.
          Vielleicht helfen mir ja die alten turioals später die neuen versionen wie msqli, pdo oder die sache mit der abstraktionsklasse besser zu verstehen.

          Für die Tips und und die Links bin ich euch beiden erstmal dankbar!

          Allerdings habe ich mein Problem bisher noch nicht gelöst.
          Da ich der Meinung bin das die "UPDATE" abfrage grundsätzlich funktioniert, bestätigt mir PMA ja auch muss ich den fehler wohl irgendwo anders suchen.

          gruss ciggy

          Kommentar


          • #6
            Zitat von der_robert Beitrag anzeigen
            - du musst dich nicht um neue spalten kümmern
            - prepared statements egal ob update, insert oder delete (IMHO schöner als bei PDO)
            Das kriegt man auch ohne Layer hin.

            - kein nerviges geschreibe von mysql_query etc
            Ob das nervig ist, ist ne subjektive Sache. Ich persönlich finde natives SQL sogar ziemlich cool. Will ja auch nicht verlernt werden.

            Diese zusammengehackten abstrakten Parameter-Queries erhöhen mE auch nicht wirklich die Leserlichkeit, aber gut, dass sei jedem selbst überlassen.
            Die mysql_* Erweiterung ist veraltet!
            Besser: mysqli_* oder (noch besser) PDO

            Kommentar


            • #7
              Hallo Zusammen,

              Der Fehler ist behoben und nun werden die Daten auch aktualisiert.
              Der Fehler lag in dem Formular in dem ein Datensatz geändert werden kann.

              Vielen Dank an Hausl mit seinen Vorschlägen bzw Tips zur Fehlersuche
              damit konnte ich selbst "nachforschen" wo der berühmte Hund begraben liegt

              ----- Falls das in diesem Forum üblich ist dann kann hier abgeschlossen werden -----


              gruss ciggy

              Kommentar

              Lädt...
              X