PHP wird nur bis bind_param ausgeführt

R3str4k

Grünschnabel
Drehe mal das Error-Reporting hoch, in dem du am Anfang des Scriptes diese Zeilen einbaust:

ini_set('display_errors', true);
error_reporting(E_ALL);
Danke, habe es mal eingebaut und an der gleichen Stelle von bind_param wird der folgende Fehler ausgegeben:

Fatal error: Uncaught Error: Cannot pass parameter 2 by reference in Seite2.php:116 Stack trace: #0 {main} thrown in Seite2.php on line 116
 

R3str4k

Grünschnabel
Danke für den Tipp, habe es am Anfang eingebaut und folgende Fehlercode erhalten:

Fatal error: Uncaught Error: Cannot pass parameter 2 by reference in de/Creator/Seite2.php:116 Stack trace: /de/Creator/Seite2.php on line 116

Ich habe ebenfalls auch die beiden Parameter ausgeben lassen und da kommen die folgende werte heraus wie erwartet:

Get-Wert:1Session-Wert:u0rvm02fak9bl7v8l6i3ieul

PHP:
    $sql = "UPDATE os_gast SET g_step1=? WHERE g_sessionid = ?;";
    $db = new mysqli("","", "",$db_name);
    $stmt = $db->prepare($sql);

    echo "Get-Wert:".(int)$_GET['wert'];
    echo "Session-Wert:".$_SESSION['gastid'];

    $stmt->bind_Param('is', (int)$_GET['wert'],$_SESSION['gastid']);
    $stmt->execute();
    $stmt->close();

Viele Grüße und schonmal danke!
 

R3str4k

Grünschnabel
Yupp. Fehlerbehandlung hoch.
Oder mal versuchen die zwei Parameter vor dem Bind-Param-Aufruf in zwei Variablen packen, und diese dann checken, obs stimmt
Sorry ich habe das falsch verstanden... Du meintest das ich die Parameter erstmal in eine Variable schreiben soll und diese dann als Parameter einsetze oder?

Ich glaube das war auch das Problem, vielen Dank ich probiere es nochmal :)
 

R3str4k

Grünschnabel
Ich kann es nicht glauben es funktioniert, dass ich die Werte erstmal in eine Variable packe und dann diese als Parameter übergab endlich <3 Vielen Dank @Zvoni und @m.scatello Ihr habt mir sehr viel Arbeit gespart :)
 

Zvoni

Erfahrenes Mitglied
Keine Ahnung von PHP, aber ich tippe auf das hier:
Fatal error: Uncaught Error: Cannot pass parameter 2 by reference in de/Creator/Seite2.php:116 Stack trace: /de/Creator/Seite2.php on line 116

So wie ich das verstehe übergibt bind_param die Parameter per Referenz/Zeiger, und in deiner NICHT-Variablen-Variante würdest du einen zeiger auf die Funktion(en) übergeben.

Aber wie gesagt: Keine Ahnung von PHP (also mit hoher Wahrscheinlichkeit Schmarrn den ich da geschrieben habe)
 

Zvoni

Erfahrenes Mitglied
Nachtrag: kannst du mal deine "originale" variante ausprobieren mit

$stmt->bind_Param('is', (int)$_GET['wert'],(string)$_SESSION['gastid']);

Die Fehlermeldung meckert nur wegen dem zweiten Parameter, und bei dem hast du eben keinen TypeCast
 

R3str4k

Grünschnabel
Nachtrag: kannst du mal deine "originale" variante ausprobieren mit

$stmt->bind_Param('is', (int)$_GET['wert'],(string)$_SESSION['gastid']);

Die Fehlermeldung meckert nur wegen dem zweiten Parameter, und bei dem hast du eben keinen TypeCast
Hi, du hast vollkommen Recht, der Session Cookie wird als Objekt in PHP referenziert und ist somit ein "Zeiger", bei der Fehlermeldung ist Parameter 1 der Get-Wert was als String ausgegeben wird weswegen ich dort zur Sicherheit die Typisierung verwendet habe. Das hat mit dem String nichts zu tun.
 

R3str4k

Grünschnabel
Nachtrag: kannst du mal deine "originale" variante ausprobieren mit

$stmt->bind_Param('is', (int)$_GET['wert'],(string)$_SESSION['gastid']);

Die Fehlermeldung meckert nur wegen dem zweiten Parameter, und bei dem hast du eben keinen TypeCast
Ich habe es für dich ausprobiert und dann kommt die selbe Fehlermeldung mit dem Zeiger :)

Fatal error: Uncaught Error: Cannot pass parameter 3 by reference in Creator/Seite2.php:116 Stack trace: Creator/Seite2.php on line 116
 

Loddar1

Erfahrenes Mitglied
Auch wenn es schon fertig ist,
ich würde es minimal so:
PHP:
$db = new mysqli("","", "",$db_name);

$sql = "UPDATE os_gast SET g_step1=?, spaltegastid=? WHERE g_sessionid = ? ";
    $stmt = $db->prepare($sql);
 
   $g_sid = $_GET['g_sessionid'];

   $gwert = IntVal($_GET['wert']);
   $sessid = trim($_SESSION['gastid']);

    $stmt->bind_Param('iss', $gwert,$sessid, $g_sid);
    $stmt->execute();
schreiben.
Wenn du 2 werte bindest, $_GET['wert'] und $_SESSION['gastid'] benötigst du auch 2 spalten zum speichern.
 
Zuletzt bearbeitet: