Variable wird in String nicht aktualisiert

Hallo zusammen,

ich habe zwei miteinander verknüpfte Tabellen. In der einen werden Kundendaten gespeichert in der anderen die Arbeitgeberdaten des Kunden.

Sobald die Daten für den Kunden und den Arbeitgeber eingetragen sind und der Anwender auf „Speichern“ drückt, prüft das Programm ob der Kunde schon eingetragen war oder nicht und führt entweder einen UPDATE oder einen INSERT-Befehl aus.

Bei den Arbeitgeberdaten wird ein INSERT mit ON DUPLICATE KEY UPDATE durchgeführt, der in einer Variablen vorbereitet ist.

$insertarbeitgeber="INSERT INTO arbeitgeber
(id\_ag, id\_vn, agname, agstrasse, agplz, agort, agtel)
VALUES(
NULL,
'{$\_SESSION['kundenauswahl']}',
'{$mysqli-\>real\_escape\_string($\_POST['agname'])}',
'{$mysqli-\>real\_escape\_string($\_POST['agstrasse'])}',
'{$mysqli-\>real\_escape\_string($\_POST['agplz'])}',
'{$mysqli-\>real\_escape\_string($\_POST['agort'])}',
'{$mysqli-\>real\_escape\_string($\_POST['agtel'])}')

ON DUPLICATE KEY UPDATE

agname = '{$mysqli-\>real\_escape\_string($\_POST['agname'])}',
agstrasse = '{$mysqli-\>real\_escape\_string($\_POST['agstrasse'])}',
agplz = '{$mysqli-\>real\_escape\_string($\_POST['agplz'])}',
agort = '{$mysqli-\>real\_escape\_string($\_POST['agort'])}',
agtel = '{$mysqli-\>real\_escape\_string($\_POST['agtel'])}'";

Die Spalte id_vn ist als UNIQUE definiert.

Damit der Primärschlüssel in der Kundentabelle als Fremschlüssel in der Arbeitgebertabelle verwendet werden kann, wird der Schlüssel in einer $_SESSION Variable gespeichert mit

$\_SESSION['kundenauswahl']=$mysqli-\>insert\_id;

Diese taucht auch oben im INSERT Befehl auf.

Nun wollte ich das ganze folgendermaßen kombinieren.

if ($\_POST['speichern'])
{
...
...
$\_SESSION['kundenauswahl']=$mysqli-\>insert\_id;
$mysqli-\>query($insertarbeitgeber);
}

Das Problem ist aber, dass die $_SESSION Variable im Query immer den Wert 0 bekommt und nicht den tatsächlichen. Ist das so, dass die $_SESSION Variable in einem String nicht aktualisiert wird, wenn der String weiter oben schon deklariert wurde?

Gruß

Hi,
bist du sicher, dass $mysqli->insert_id überhaupt einen Wert0 zurückgegeben hat?

Gruss
Joey

Hallo,

ja, weil ich die $_SESSION Variable mit echo anzeigen hab lassen und es kam der korrekte Werte heraus.

Gruß

Vom Ablauf her, bastelst du den $insertarbeitgeber string erst zusammen, nachdem du die Zuweisung an die $_SESSION Variable gemacht hast?

Vom Ablauf her, bastelst du den $insertarbeitgeber string erst
zusammen, nachdem du die Zuweisung an die $_SESSION Variable
gemacht hast?

Nein, umgekehrt. Erst wird der String zusammengebastelt, dann wird in die Datenbank geschrieben, über den Befehl

$\_SESSION['kundenauswahl']=$mysqli-\>insert\_id;

der Wert des Primärschlüssels von der Kundendatebank gesichert und dann über eine $mysqli->query() Anweisung der String mit der $_SESSION Variable als Fremdschlüssel ausgeführt.

Gruß

Hey,

php speichert mit dem $insertarbeitgeber="…"; einen String ab.

Wenn du danach erst $_SESSION[‚kundenauswahl‘] aktuallisierst kann das natürlich nicht in dem String gespeichert werden.

mach mal ein var_dump($insertarbeitgeber); da siehst du dann was in der Variable gespeichert wird.

Gruß

Stimmt! Alternativen?
Ok, das habe ich selber nochmals probiert und verstanden.

Gibt es denn eine Möglichkeit die Variablen im String zu aktualisieren bevor dieser ausgeführt wird?

Gruß

Hi,
Platzhalter in den String einbauen und kurz vor Verwendung mit str_replace den richtigen Wert einsetzen oder den String erst zusammenbasteln wenn alle Information dazu da ist. Wenn man den String an mehrerern Stellen braucht, spricht auch nichts dagegen das zusammenbasteln in eine eigene Funktion/Klasse auszulagern.

Meine Frage /t/variable-wird-in-string-nicht-aktualisiert/6883931/4

Gruss
Joey

Danke!
So hatte ich die Frage nicht aufgefasst.

Trotzdem Danke!

Das Query einfach erst nach dem setzen von $_SESSION… speichern.

eine anderer Ansatz wäre es das Query mit einem „Prepared Statement“ auszuführen:

http://de2.php.net/manual/en/mysqli-stmt.prepare.php

ich finde da aber die PDO Version mit benannten Parametern sinnvoller:

http://de2.php.net/manual/en/pdo.prepare.php

Gruß