Update eines Datensatzes in MySQL DB

fredolin

Erfahrenes Mitglied
Hallo,

ich sehe mal wieder den Baum vor lauter Wälder nicht.
Sitze hier und hämmere meinen Kopf durch die Wand, um eine Update-Script fertig zu machen.
Aber es wird der ausgewählte Datensatz nicht in der Datenbank geändert.

Hier mein Script:
PHP:
function changedetails(){
    print_r($_POST);
    $ID = $_GET['ID'];
    $dbhandle = opendb();
    //echo $ID.'<p></p>';
   
    $m = substr($_POST['newdate'],3,2);
    $d = substr($_POST['newdate'],0,2);
    $y = substr($_POST['newdate'],-4);
    $tstamp = mktime(0, 0, 0, date($m), date($d), date($y));
   
    //echo 'hello '. $tstamp . '<br /><br />';
   
        $query = "UPDATE " . DBFIBU . " SET 
                invoicedate = ".addslashes($tstamp)."
                WHERE ID ='".$ID."'";
                       
        mysql_db_query(DBNAME, $query);
        //echo mysql_error();
        $result = mysql_affected_rows();
        //echo $result;
        if ($result > 0 ){
            echo utf8_encode('<div class="dbfehler">MySQL-ERROR-Typing => ' . mysql_errno() . ' => ' . mysql_error().'<br /><a href="?func=showdata">Zurück zur Übersicht</a>.</div>');
        } else {
            echo utf8_encode('<div class="dbfehler">Der Datensatz würde geändert.<br ><a href="?func=startpage">STartseite</a></div>');
            //header('Loction: '.$_SERVER['PHP_SELF'].'?func=startpage ');
            //exit;
        }

   
    closedb($dbhandle);

}

Über anregende Hilfe von Euch freue ich mich sehr und ich sage schon mal DANKE an alle die mir helfen, den Fehler zu finden.
 
Hi,

1. Die mysql_*-Funktionen sind seit einer gefühlten Ewigkeit deprecated und sollten nicht mehr verwendet werden
2. Dein Code hat eine SQL-Injection Lücke, warum keine Prepared Statements wie sie seit ca. 10 Jahren State-of-the-Art in so ziemlich jeder Programmiersprache sind?
(Warum sicherst du einen Timestamp, der eh nur long sein kann mit addslashes ab, gibst aber direkt einen GET-Parameter in deine Query? SQL-Injection!)
(addslashes soll nur verwendet werden, wenn die Datenbank nativ keine Funktion zum escapen von Daten hat. MySQL hat aber eine: mysql_real_escape_string())
3. Gib dir mal deine $query aus, was steht in dieser? Kannst du diese direkt (z.B. über phpmyadmin) ausführen, was passiert da?
4. Die ID holst du dir über GET, die restlichen Parameter über POST. Absicht oder Copy-Paste-Fehler?

Grüsse,
BK
 
Hi Bratkartoffel,

Du hast mir den entschiedenen Hinweiß gegeben. Nun funktioniert es auch. Der Fehler war das ich die ID per Get über gab. Was aber nicht stimmt. Per Post.. Da habe ich mal wieder den Baum im Wald nicht stehen gesehen.
Aber ich habe da nichts kopüiert.. Also falsch getippert.. Ich danke Dir für deine Hilf. .. Danke....Danke
 

Neue Beiträge

Zurück