tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
14
ZUGRIFFE
389
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    puschelchen puschelchen ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    164
    Hallo guten Morgen,
    ich hab ein Problem mit Datensätze ändern
    derzeit sieht mein Code so aus:
    PHP-Code:
    <html>
    <body>
    <form action="" method="GET">
    <div align="right"/>
    Userid <input type="text" name="Userid"><br>
    Vorname<input type="text" name="Vorname"><br>
    Nachname <input type="text" name="Nachname"><br>
    Firma <input type="text" name="Firma" ><br>
    Email<input type="text" name="Email" ><br>
    Telefon<input type="text" name="Telefon"  ><br>
    Laufzeit<input type="text" name="Laufzeit"><br>
    Lizenz PC <input type="text" name="PCLizenzen"  ><br>
    Seriennummer <input type="text" name="dpSrn"  ><br>
    Datum Aktiv <input type="text" name="DatumAktiv"  ><br>
    Datum End Aktiv <input type="text" name="DatumEndAktiv"   ><br>
    <input type=submit name=submit value="Formular absenden"><br>
    <?php
    $Userid
    ="";
    $Host "localhost";
    $User "david";
    $Password "a";
    $dbname "ABMC-Datenbank";
    $tbl="Kunden";
    mysql_connect('localhost''david''a') or die  ("Keine Verbindung möglich: ".mysql_error());
    mysql_select_db($dbname) or die  ("Keine Verbindung möglich: ".mysql_error());
            if(isset(
    $_GET['submit'])) {
    mysql_select_db($dbname);
    mysql_query('UPDATE $tbl SET Vorname=$_GET["Vorname"] WHERE Userid=$_GET["Userid"]');
    }
    mysql_close();
    ?>
    </div>
    </form>
    </body>
    </html>
    die Daten werden nicht übernommen. Ich hoff ihr habt nen Vorschlag was falsch läuft.
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
    [PHP] [MySQL] Debug Queries
    Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
    Nunja, ich kann dir noch den Tipp gebe, dass Strings die in einfache ' gefasst sind, nicht kompliert werden - also Variabeln darin werden nicht mit dem Variableninhalt überschreiben.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    puschelchen puschelchen ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    164
    ich hab vorher update anders geschrieben
    mysql_query("UPDATE $tbl SET Vorname=$_GET['Vorname'] WHERE Userid=$_GET['Userid']");
    Nur kommt hier die Fehlermeldung wegen "
    auch mit error_reporting ist dort kein Fehler bzw wird keiner angezeigt.
     

  4. #4
    puschelchen puschelchen ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    164
    PHP-Code:
    <html>
    <body>
    <form action="" method="GET">
    <div align="right"/>
    Userid <input type="text" name="Userid" value="<?php echo @$_GET['Userid'?>"><br>
    Vorname<input type="text" name="Vorname" value="<?php echo @$_GET['Vorname'?>"><br>
    Nachname <input type="text" name="Nachname" value="<?php echo @$_GET['Nachname'?>"><br>
    Firma <input type="text" name="Firma" value="<?php echo @$_GET['Firma'?>"><br>
    Email<input type="text" name="Email" value="<?php echo @$_GET['Telefon'?>"><br>
    Telefon<input type="text" name="Telefon" value="<?php echo @$_GET['Telefon2'?>" ><br>
    Laufzeit<input type="text" name="Laufzeit"value="<?php echo @$_GET['Laufzeit'?>"><br>
    Lizenz PC <input type="text" name="PCLizenzen" value="<?php echo @$_GET['PCLizenzen'?>" ><br>
    Seriennummer <input type="text" name="dpSrn" value="<?php echo @$_GET['dpSrn'?>" ><br>
    Datum Aktiv <input type="text" name="DatumAktiv" value="<?php echo @$_GET['DatumAktiv'?>" ><br>
    Datum End Aktiv <input type="text" name="DatumEndAktiv" value="<?php echo @$_GET['DatumEndAktiv'?>"  ><br>
    <input type=submit name=submit value="Formular absenden"><br>
    <?php
    if (isset($_GET)  {
        
    $Host "localhost";
        
    $User "david";
        
    $Password "a";
        
    $dbname "ABMC-Datenbank";
        
    $tbl="Kunden";
        
    mysql_connect('localhost''david''a') or die  ("Keine Verbindung möglich: ".mysql_error());
        
    mysql_select_db($dbname) or die  ("Keine Verbindung möglich: ".mysql_error());
    $Vorname=$_GET["Vorname"];
    mysql_query('UPDATE $tbl SET $Vorname WHERE Userid=$_GET["Userid"]');
    }
    mysql_close();
    ?>
    </div>
    </form>
    </body>
    </html>
    So sieht mein derzeitiger Code aus wenn ich in die Browserzeile eingeb
    dbaendern.php?Userid=4&Vorname=Dave steht es zwar nun im Formular aber nicht in der Datenbank.
     

  5. #5
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Mach doch mal

    Code php:
    1
    
    mysql_query("UPDATE $tbl SET Vorname=$_GET['Vorname'] WHERE Userid=$_GET['Userid']") or die(mysql_error());

    Dann wirst du vermutlich eine Fehlermeldung bekommen, das bei der Spalte Vorname die Quotes fehlen.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  6. #6
    puschelchen puschelchen ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    164
    ich bekomm weder ne Fehlermeldung noch einen Eintrag
    ach schon klar hab grad die falsche datei geöffnet tschuldigung +lol+
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /srv/www/htdocs/dbaendern2.php on line 29
    ich sagte doch hab ' und " ausgetauscht
    Geändert von puschelchen (12.01.11 um 10:49 Uhr)
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von yaslaw Beitrag anzeigen
    Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
    [PHP] [MySQL] Debug Queries
    Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
    Mehr gibts da nicht zu sagen wenns mit " nicht geht. Aber dieses Tutorial kannst du ja sicher langsam auswendig und weisst also selber wie du auf Fehlersuche gehen kannst.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  8. #8
    puschelchen puschelchen ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    164
    yo scheint wohl so Yaslaw.
    Na dann probier ich mal.
     

  9. #9
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Versuch es doch mal durch einen kleinen Umweg:

    Code php:
    1
    2
    3
    4
    5
    6
    
    $query = 'UPDATE $tbl SET Vorname=$_GET["Vorname"] WHERE Userid=$_GET["Userid"]'; 
    mysql_query($query);
    if( mysql_affected_rows() == 0)
    {
      echo "Der Query hat keine Zeilen geändert:<br/><pre>$query</pre>";
    }

    Wenn die Meldung unten kommt, kannst du den Query in phpMyAdmin einfügen und dann wirst du sehen, was nicht aus welchem Grund nicht geht.

    Das ist übrigens ein allgemeines Verfahren wenn es um das Debuggen von MySQL-Problemen geht und mit sehr großer Sicherheit auch in yaslaw's Tutorial so beschrieben.

    Wenn du das wieder verwenden willst, kannst du eine Funktion draus machen:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    function mysql_update($query)
    {
      mysql_query($query);
      if( mysql_affected_rows() == 0)
      {
        echo "Der Query hat keine Zeilen geändert:<br/><pre>$query</pre>";
      }
    }
     
    // Achtung hier dann kein mysql_query sonder mysql_update
    mysql_update('UPDATE $tbl SET Vorname=$_GET["Vorname"] WHERE Userid=$_GET["Userid"]');

    Das kannst du dann auch für Inserts und Deletes machen.

    @yaslaw: Spätestens beim zweiten mal ignorieren würde ich es dann auch aufgeben, nicht jeder will ein Tutorial lesen, egal wie lang es ist.
    Geändert von saftmeister (12.01.11 um 10:57 Uhr) Grund: Tag korrigiert
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  10. #10
    puschelchen puschelchen ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    164
    ich hab nun die abfrage auch umgebaut
    $Vorname=$_GET['Vorname'];
    $Userid=$_GET['Userid'];
    mysql_query('UPDATE Kunden SET Vorname=$Vorname WHERE Userid = $Userid') or die(mysql_error());

    jetzt hab ich ja auch ne andere Fehlermeldung aber den Fehler krieg ich schon noch raus.
     

  11. #11
    Back2toxic Back2toxic ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Pfalz
    Beiträge
    219
    Probier das mal
    PHP-Code:
    $query "UPDATE $tbl SET Vorname='".$_GET["Vorname"]."' WHERE Userid='".$_GET["Userid"]."'";
    mysql_query($query) or die ("Fehler in Abfrage ".$query.":<br/>".mysql_errno()." - ".mysql_error()); 
    Strings müssen in 'nem Query doch generell in Anführungszeichen geschrieben werden, oder lieg ich falsch?
    Code :
    1
    2
    
    UPDATE $tbl SET Vorname=Klaus // Wird nicht funktionieren
    UPDATE $tbl SET Vorname='Klaus' // das schon
    Geändert von Back2toxic (12.01.11 um 11:12 Uhr)
     

  12. #12
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    @puschelchen
    Du hast mein Tutorial. Das beinhaltet genau das was saftmeister hier für dich geschrieben hat.

    Hast du beides nicht gelesen?

    Mein Tutorial beinhaltet sogar ein Beispiel das genau das Problem hat, das du auch hast.
    Nun gut, ich will mal nich so sein. Hier mal für dich, wie man sowas angehen sollte
    ------------------------------
    Wir haben einen einfachen Code, der ein Update auf die Datenbank macht. Nun updated dieser Code aber nichts in der Datenbank und wir finden noch nicht heraus warum. In der folgenden Anleitung werden wir anhand dieses Beispiels sehen wie man eine einfache Fehleranalyse durchführen kann um solche Probleme zu lösen.
    Code PHP:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <?php
    mysql_connect('localhost', 'root', '') or die  ("Keine Verbindung möglich: ".mysql_error());
    mysql_select_db('testdb') or die  ("Keine Verbindung möglich: ".mysql_error());
     
    $value = 'test';
    $where = 15;
    $sql  = "UPDATE myTable SET feld1 = {$value}  WHERE id = {$where};";
    mysql_query($sql);
    echo mysql_affected_rows();
    ?>

    Lösung

    1) Report Error All
    Als erstes ergänzen wir unseren Code mal um die folgende Zeile um uns alle Fehlermeldungen auszugeben.
    error_reporting(E_ALL);

    Anschliessend testen wir erneut und schauen ob eine Sinnvolle Fehlermeldung erscheint.
    Code PHP:
    1
    2
    3
    4
    5
    6
    
    <?php
    error_reporting(E_ALL);
    mysql_connect('localhost', 'root', '') or die  ("Keine Verbindung möglich: ".mysql_error());
    mysql_select_db('testdb') or die  ("Keine Verbindung möglich: ".mysql_error());
    ...
    ?>

    Diese Zeile sollte wieder entfernt werden, bevor man in die produktive Umgebung geht. Mehr dazu findest du in der PHP-Doku -> http://php.net/manual/de/security.errors.php

    2) Query-String ausgeben
    Führte der erste Schritt noch nicht zu einem Resultat, so können wir noch den generierten Query-String testen.
    Dazu geben wir diesen mittels echo() aus (Nicht das Result von mysql_query, sondern den zusammengesetzten Query-String). Zudem versuchen wir noch die Fehlermeldung herauszukriegen. Wir erweitern also das mysql_query() um die Errorausgabe mysql_error() .

    Code PHP:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    <?php
    error_reporting(E_ALL);
    mysql_connect('localhost', 'root', '') or die  ("Keine Verbindung möglich: ".mysql_error());
    mysql_select_db('testdb') or die  ("Keine Verbindung möglich: ".mysql_error());
     
    $value = 'test';
    $where = 15;
    $sql  = "UPDATE myTable SET feld1 = {$value}  WHERE id = {$where};";
    echo "{$sql}<br />\n";
    mysql_query($sql) or die(mysql_error());
    //echo mysql_affected_rows();
    ?>


    In der Ausgabe erscheint dann etwa das Folgende: Unser SQL und eine Fehlermeldung

    Code :
    1
    2
    
    UPDATE myTable SET feld1 = test  WHERE id = 15;
    Unknown column 'test' in 'field list'


    So haben wir eine Fehlermeldung die etwas aussagt und das SQL, wie es an die Datenbank abgesetzt wird.
    Mit diesen Informationen können andere Programmierer in Foren etc. besser helfen als 'nur' mit der Meldung 'Es geht nicht'.

    Geübte SQL-Leser sehen hier sofort den Fehler. test ist natürlich kein Feld sondern ein String und sollte in '...' gesetzt werden.

    3) Testen mit phpMyAdmin
    Um das Sql zu verfeinern und zu testen kann man dieses nun aus der Ausgabe kopieren und mit phpMyAdmin oder einem anderen Tool für MySQL testen und anpassen bis es funktioniert. Das funktionierende SQL anschließend wieder zurück in den PHP-Code implentieren

    Unser korrigiertes und getestete SQL sieht dann so aus
    Code sql:
    1
    
    UPDATE myTable SET feld1 = 'test'  WHERE id = 15;


    4) Korrektur einpflegen
    Zum Schluss müssen wir nur noch das error_reporting() sowie unser echo() wieder entfernen und unseren korrigiertes SQL in den Code einpflegen. Und so sieht dann der funktionierende Code aus
    Code PHP:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <?php
    mysql_connect('localhost', 'root', '') or die  ("Keine Verbindung möglich: ".mysql_error());
    mysql_select_db('testdb') or die  ("Keine Verbindung möglich: ".mysql_error());
     
    $value = 'test';
    $where = 15;
    $sql  = "UPDATE myTable SET feld1 = '{$value}'  WHERE id = {$where};";
    mysql_query($sql) or die(mysql_error());
    echo mysql_affected_rows();
    ?>
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  13. #13
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.520
    Zitat Zitat von Back2toxic Beitrag anzeigen
    Probier das mal
    Sollte ne Warning liefern, das mysql_error nicht definiert ist. Jedenfalls, wenn error_reporting und display_errors entsprechend gesetzt sind.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  14. #14
    puschelchen puschelchen ist offline Mitglied Gold
    Registriert seit
    Dec 2010
    Beiträge
    164
    Ok das hat nun Funktioniert. Danke
    Hast du vll nen Tutorial oder sowas das ich das ganze noch erweitern kann? wäre lieb Danke
     

  15. #15
    Back2toxic Back2toxic ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Pfalz
    Beiträge
    219
    Upsa - da hat der saftmeister recht - habe natürlich die Funktionsklammern bei mysql_error() vergessen.
    Hab' die mal dazu editiert..
     

Ähnliche Themen

  1. Datenbank UPDATE
    Von Anubia im Forum PHP
    Antworten: 3
    Letzter Beitrag: 16.12.07, 15:50
  2. Datenbank Update
    Von bambid im Forum PHP
    Antworten: 2
    Letzter Beitrag: 13.09.07, 13:21
  3. Update von SQL Datenbank
    Von Blattspinat im Forum PHP
    Antworten: 5
    Letzter Beitrag: 14.11.05, 07:19
  4. Datenbank Update
    Von dragon90 im Forum PHP
    Antworten: 7
    Letzter Beitrag: 13.11.05, 15:47
  5. Update Datenbank
    Von server im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 24.03.04, 17:14

Stichworte