crueli: Variablenübergabe funktioniert nicht (PHP + mysql)

Beitrag lesen

Hi!

habe das Problem, dass POST-Variablen an die DB nicht mehr übergeben werden. Ich schätze, dass es durch ein Update der mysql oder PHP-Version kam.

Schätzen allein reicht nicht, um die Ursache zu finden. Kontrolliere deine Annahme mit Kontrollausgaben. Sind die gewünschten Werte in den vorgesehenen Variablen enthalten? var_dump() erzeugt die genauesten Ausgaben (inklusive Typ und Stringlängenangabe).

Habe ein var_dump($_POST) unter echo $sql; eingefügt und die Variablen sind befüllt, wie auch bei der Ausgabe des sql-statements.

  		$sql = [...]  
  	$result = mysql\_query($sql,$db) or die ([...]);  
  	echo $sql;  

Gut, hier machst du eine Kontrollausgabe des fertigen Statements und sagst, es sei richtig. Die Query wird vermutlich auch richtig ausgeführt, sonst hättest du von einem Ausführungsfehler berichtet, die dir von der rudimentären Fehlerbehandlung mit die() angezeigt worden wäre.

Lasse ich mir das Statement über die Oberfläche ausgeben, dann wird mir das Statement richtig mit allen Werten angezeigt und ich kann es über die DB direkt (phpmyadmin) eingeben und es funktioniert (wird also gespeichert). Über die Oberfläche wird nichts gespeichert, da wohl überall Leerzeichen als Werte gesetzt werden.

Das ist widersprüchlich. Mit Oberfläche meinst du wohl beim ersten Mal die Ausgabe deines Script an den Browser und beim zweiten Mal dein Script selbst. Wenn die Kontrollausgabe richtig war, und trotzdem Leerzeichen (Leerzeichen oder Leerstrings?) im DBMS landen, sind irgendwo noch Verarbeitungsschritte dazwischen, oder es passiert etwas komplett anderes, mit dem du nicht gerechnet hast.

Leerstrings. Ich habe keine Verarbeitungsschritte ausgelassen (also Code), falls Du das hiermit meinst. Beim ersten Mal meine ich mit Oberfläche die Web-Oberfläche, also Script an den Browsers. Und beim zweiten Mal meine ich das Gleiche. Man kann über das Script nichts speichern...mit dem Einsetzen des SQL-Statements das mir das Skript ausgibt, in PHPmyadmin, gehts aber.

Gebe ich nämlich einen festen Wert ein, wird dieser gespeichert. Irgendwas stimmt also wohl mit der Übergabe der Wert an die DB nicht.

Dem DBMS ist es komplett egal, ob die Query zusammengebaut oder als fester String notiert wurde. Es zählt das, was sie zu Gesicht bekommt. Nimmst du für den "Fest"-Versuch die gleichen Werte wie sie über das Formular eingegeben werden?

Ja, ich nehme den gleichen Wert. Wenn ich den Wert ins Skript einbinde (ohne Übergabe durch POST), funktionierts. Anders nicht.

Hat jemand eine Ahnung was ich da falsch mache bzw. was durch ein Update der PHP bzw. Mysql Version veraltet ist?

Um für die hintere Teilfrage konkrete Vermutungen anstellen zu können, wären die bisherigen und derzeitigen Versionen interessant.

PHPmyadmin ist 2.11.5 und PHP 4.4.9

Wenn die Query angeblich richtig zusammengabaut wird und sie beim händischen Kopieren gegen das selbe DBMS klaglos ausgeführt wird, kann es kaum an Fehlern bezüglich Versionsimkompatibilität liegen.

Du bist sicher, dass du keine Fehlermeldungen übersehen oder unterdrückt hast? error_reporting steht (zumindest für den Test) auf E_ALL und display_errors auf on? Die Ergebnisse aller MySQL-Funktionen (inklusive Logon) werden auf Fehlerwerte untersucht? (Zur Not mit einem die(), obwohl ich das in den meisten Fällen als dem Anwender gegenüber unangemessene Fehlerbehandlung ansehe.)

Nein, Fehler werden mir 'leider' auch keine ausgegeben.

Das was du im DBMS kontrollierst ist auch das, was das Script in diesem Durchlauf reinschreibt? Oder wird das Script - aus welchem Grunde auch immer - vielleicht ein zweites Mal ohn Werte aufgerufen und du betrachtest nur diese letzte Einfügung und nicht auch die vorhergehenden?

Das Skript wird noch mal aufgerufen und gibt dann einfach die Werte aus die eingegeben wurde. Kurioserweise gibt er sogar das aus (select-abfrage an die db) was ich eingegeben habe, aber in der DB steht gar nichts drin (Kontrolle über phpmyadmin). Lade ich die Seite dann aber neu, steht auch nix mehr drin.

Lo!

Danke schon mal für Hilfe! Das ist wirklich kurios und ich weiß nicht mehr so recht wo ich ansetzen soll.