• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Kurioses SQL Problem - PHP Variabel wird falsch geupadet

NE4Y

Mitglied
Hallo,

ich habe ein sehr kurioses Problem. Ich möchte eine einfache Zeit updaten in meiner Datenbank. Wenn ich eine Variable benutze ($newTime) und sie mir vorher ausgebe hat sie den Wert 1434549718. Gebe ich diesen Wert direkt in meinen Query ein, wird dieser Wert auch in der DB gesetzt. Gebe ich nun anstatt des Wertes die Referenzvariabel an ($newTime die direkt vor dem Query per Ausgabe 1434549718 ausgibt) wird in meine DB folgender Wert geschrieben: 1437179461 (in etwa 1 Monat zu weit --> handelt sich um einen timestamp).

Mein Code sieht folgendermaßen aus:
PHP:
echo 'NewTime vor Update: '.$newTime.'<br />';      
$this->db->query("UPDATE account SET `payed_til` = ? WHERE id = ? LIMIT 1", array($newTime, $id));
echo '<br />NewTime nach Update: '.$newTime;
Dabei gibt sowohl NewTime vor Update als auch NewTime nach Update meine gewünschte 1434549718. Nur in der DB kommt das nicht an.

Setze ich $newTime manuell auf 143459718 klappt es, genauso wie wenn ich statt $newTime den exakten Wert in den Query eingebe.

Ich bin gerade etwas ratlos und habe keine Ahnung woran es liegen könnte.

Ich hoffe mir kann jemand helfen.

Mfg

#Edit:
Habe es jetzt testweise mit normalem mysql_* gemacht, da man mit PDO seine Querys nicht ankucken kann. Doch selbst damit stehen falsche Daten in der DB, obwohl der ausgegebene Query stimmt (Feld ist int).
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    188,5 KB · Aufrufe: 6
Zuletzt bearbeitet:
Werbung:
Hallo,

ich habe ein sehr kurioses Problem. Ich möchte eine einfache Zeit updaten in meiner Datenbank. Wenn ich eine Variable benutze ($newTime) und sie mir vorher ausgebe hat sie den Wert 1434549718. Gebe ich diesen Wert direkt in meinen Query ein, wird dieser Wert auch in der DB gesetzt. Gebe ich nun anstatt des Wertes die Referenzvariabel an ($newTime die direkt vor dem Query per Ausgabe 1434549718 ausgibt) wird in meine DB folgender Wert geschrieben: 1437179461 (in etwa 1 Monat zu weit --> handelt sich um einen timestamp).

Mein Code sieht folgendermaßen aus:
PHP:
echo 'NewTime vor Update: '.$newTime.'<br />';    
$this->db->query("UPDATE account SET `payed_til` = ? WHERE id = ? LIMIT 1", array($newTime, $id));
echo '<br />NewTime nach Update: '.$newTime;
Dabei gibt sowohl NewTime vor Update als auch NewTime nach Update meine gewünschte 1434549718. Nur in der DB kommt das nicht an.

Setze ich $newTime manuell auf 143459718 klappt es, genauso wie wenn ich statt $newTime den exakten Wert in den Query eingebe.

Ich bin gerade etwas ratlos und habe keine Ahnung woran es liegen könnte.

Ich hoffe mir kann jemand helfen.

Mfg

#Edit:
Habe es jetzt testweise mit normalem mysql_* gemacht, da man mit PDO seine Querys nicht ankucken kann. Doch selbst damit stehen falsche Daten in der DB, obwohl der ausgegebene Query stimmt (Feld ist int).


Versteh ich nicht ganz.
Wie sieht denn die Struktur deiner Tabelle aus? Vielleicht hast du ja ein AI auf der betreffenden Spalte?
 
1. Wie schaut deine Tabellenstruktur aus?
2. Wie schaut denn der Original-Codeabschnitt aus (incl. Wertzuweisung der $newTime)?
 
Werbung:
Meine Tabelle hat für die Spalte payed_til den Typ int.

PHP:
if($data['payed_til'] == 0) {
            $time = time();
        }
        else if($data['payed_til'] < time()) {
            $time = time();
        }
        else  if($data['payed_til'] > time()) {
            $time = $data['payed_til'];
            echo'Gezahlt bis: '.date('d.m.Y', $data['payed_til']).'<br />';
        }
        echo 'Aktueller Stand: '.date('d.m.Y', $time).'<br />';
        echo'Sollte 18.05 sein --> '.$time.'<br />';
  
        switch($type) {
            case 'p1':
               $time = $time + 2629743;
                break;
            case 'p6':
               $time += 60*60*24*6*30;
                break;
            case 'p12':
               $time += 60*60*24*12*30;
                break;
        }

$newTime = $time;
$this->db->query("UPDATE account SET `payed_til` = ? WHERE id = ? LIMIT 1", array($newTime, $id));
Dabei steht p1, p6, p12 für die Anzahl der Monate (1 Monat, 6, 12)
Habe das selbe gerade mit dem date Format getestet, über formatierte Timstamps passend, genau das selbe Problem es geht immer 1 Monat zu weit obwohl $newTime vor dem Query exakt der Wert ist den ich in der DB stehen haben will nur der Query macht daraus einen Monat weiter.

AI ist nicht drauf.

Aber abgesehen von der Ermittlung von $newTime, wenn es direkt vor dem Query mein gewünschter Wert ist und sogar im Query drin steht wenn man es sich ausgeben lässt mit den mysql_* Funktionen, was für Gründe kann es haben, dass die DB daraus dann was anderes macht? (auf 2 verschiedenen Mysql DBs getestet)
 
Zuletzt bearbeitet:
Meine Tabelle hat für die Spalte payed_til den Typ int.

PHP:
if($data['payed_til'] == 0) {
            $time = time();
        }
        else if($data['payed_til'] < time()) {
            $time = time();
        }
        else  if($data['payed_til'] > time()) {
            $time = $data['payed_til'];
            echo'Gezahlt bis: '.date('d.m.Y', $data['payed_til']).'<br />';
        }
        echo 'Aktueller Stand: '.date('d.m.Y', $time).'<br />';
        echo'Sollte 18.05 sein --> '.$time.'<br />';

        switch($type) {
            case 'p1':
               $time = $time + 2629743;
                break;
            case 'p6':
               $time += 60*60*24*6*30;
                break;
            case 'p12':
               $time += 60*60*24*12*30;
                break;
        }

$newTime = $time;
$this->db->query("UPDATE account SET `payed_til` = ? WHERE id = ? LIMIT 1", array($newTime, $id));
Dabei steht p1, p6, p12 für die Anzahl der Monate (1 Monat, 6, 12)
Habe das selbe gerade mit dem date Format getestet, über formatierte Timstamps passend, genau das selbe Problem es geht immer 1 Monat zu weit obwohl $newTime vor dem Query exakt der Wert ist den ich in der DB stehen haben will nur der Query macht daraus einen Monat weiter.

AI ist nicht drauf.

Aber abgesehen von der Ermittlung von $newTime, wenn es direkt vor dem Query mein gewünschter Wert ist und sogar im Query drin steht wenn man es sich ausgeben lässt mit den mysql_* Funktionen, was für Gründe kann es haben, dass die DB daraus dann was anderes macht? (auf 2 verschiedenen Mysql DBs getestet)

Trigger vielleicht?
Aber ohne Tabellenstruktur können wir nicht wirklich helfen. Du sagst ja in der Query steht garantiert der richtige Wert, daher muss das Problem in der Datenbank auftreten. Dein PHP Code ist deshalb eher uninteressant.
 
Trigger ist keiner drin.
Und das seltsame ist ja, wenn ich den Wert direkt in den Query schreibe ohne Variabel klappt es. Daher kann es ja eigentlich auch nicht an der DB liegen.


BXvLf.png
 
Zuletzt bearbeitet:
Werbung:
Omg. Aus diesem Grund sollte man einen Designer nicht eine Seite coden lassen.... Die Angabe beim favicon hat gefehlt, das führt unter Umständen dazu, dass die Seite 2x aufgerufen wird (ohne das es ersichtlich ist) ergo 2x update ergo 2Monate statt 1.
 
Ein fehlendes favicon führt auf keinen fall dazu, dass deine Seite 2 mal aufgerufen wird... der fehler muss irgendwo anders liegen

Ps: habe den rest dieses threads nicht gelesen. liefere nur fakren zum letzten post
Pps: Wenn solch einfehler passiert ist es übrigens eindeutig die schuld des Programmierers. ;P :-D :-D
 
Nein liegt daran wenn das href Attribut leer ist hab dazu auch Referenzen im Internet gefunden mit href passt es ja ... Naja wenn ich den ganzen Kram vom Designer erst durchkucken muss kann ich den HTML/CSS gleich selber machen :/

Referenz:

Laut W3C ist eine Adresse im SRC-Subtag relativ, wenn sie keine vollständige Adresse ist. Und "relativ" in HTML bedeutet, dass der Inhalt des SRC-Tags einfach an die Base-URL angehängt wird, was bei leerem SRC halt dazu führt, dass die resultierende URL die gleiche wie vom Dokument ist.

Gleiches gilt für href

Gesendet von meinem iPhone mit Tapatalk
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben