Session SQL-Abfrage
Basti1981
- php
Hallo zusammen!
Nachdem mir hier im Forum schon bei einem anderen PHP Problem super geholfen worden ist, hoffe ich, das mir auch bei diesem Problem jemand weiterhelfen kann.
Es sieht so aus, das ich über eine SESSION einen Datensatz aus meinem LogIn Script in die nächste PHP-Datei überführen möchte.
....session_start();
$_SESSION["kd_nr"] = $row[1];...
Die nächste Datei soll dann über SQL den passenden Namen und den Vornamen zu der Kundennummer aus der DB suchen und diese dann ausgeben.
....$sql_string = "select name, vorname from kunden3 where kd_nr = '".$_SESSION["kd_nr"]."'";
$stmnt = OCIParse($conn, $sql_string);
OCIExecute($stmnt);
OCIFetchinto($stmnt,&$row);
$vna = $row[0];
$na = $row[1];
echo "<br>Willkomen im LogIn-Bereich, ".$vna." ".$na."!";
Das Problem, er findet nichts in der DB. Dabei ist der komplette Datensatz vorhanden.
Hat von euch jemand eine Idee??
Gruß
Basti
你好 Basti1981,
....session_start();
$_SESSION["kd_nr"] = $row[1];...
Hast du dir den Wert von $\_SESSION["kd\_nr"] mal ausgeben lassen? Ist der Wert korrekt?
> Die nächste Datei soll dann über SQL den passenden Namen und den Vornamen zu der Kundennummer aus der DB suchen und diese dann ausgeben.
>
> ~~~php
....$sql_string = "select name, vorname from kunden3 where kd_nr = '".$_SESSION["kd_nr"]."'";
> $stmnt = OCIParse($conn, $sql_string);
> OCIExecute($stmnt);
> OCIFetchinto($stmnt,&$row);
> $vna = $row[0];
> $na = $row[1];
> echo "<br>Willkomen im LogIn-Bereich, ".$vna." ".$na."!";
>
Hast du dir den SQL-String mal ausgeben lassen? Ist der String korrekt?
再见,
克里斯蒂安
echo $begrüßung;
....$sql_string = "select name, vorname from kunden3 where kd_nr = '".$_SESSION["kd_nr"]."'";
$stmnt = OCIParse($conn, $sql_string);
OCIExecute($stmnt);
OCIFetchinto($stmnt,&$row);
$vna = $row[0];
$na = $row[1];
echo "<br>Willkomen im LogIn-Bereich, ".$vna." ".$na."!";
> Das Problem, er findet nichts in der DB. Dabei ist der komplette Datensatz vorhanden.
> Hat von euch jemand eine Idee??
Verbessere deine grundlegende Fehlersuchstrategie. Kontrollausgaben sind wichtig, um Wunsch und Wirklichkeit miteinander zu vergleichen. Verwende hierzu var\_dump(), das gibt die genaueste Information über eine Variable oder ein Ausdrucksergebnis. Besonders Datenbankfunktionen erzeugen keine PHP-Fehlermeldungen, wenn das DBMS einen Fehler meldet. Stattdessen sind die Rückgabewerte der DB-Funktionen auszuwerten und spezielle Funktionen aufzurufen, um an den Fehlermeldungstext zu gelangen, in deinem Fall oci\_error(). PHPs error\_reporting auf E\_ALL (und display\_errors auf on) zu setzen ist auch immer eine gute Idee. Damit bekommst du Hinweise auf Zugriffe auf nicht vorhandene Variablen angezeigt, die dich zusammen mit den Kontrollausgaben beim Fehlersuchen unterstützen.
Bei Datenbankabfrageproblemen ist es auch hilfreich, ein zusammengesetztes Statement, das man sich zur Kontrolle ausgegeben hat, an einer DB-Konsole auszuführen. Die sind meist von Haus aus etwas auskunftsfreudiger eingestellt. Somit kannst du feststellen, ob ein Abfrageformulierungsproblem oder eins bei deiner Programmierung vorliegt.
Du verwendest [OCI-Funktionen](http://de.php.net/manual/en/book.oci8.php) ohne Unterstrich. Diese sind manchmal nur ein Alias auf das Pendant mit Unterstrich, manchmal explizit missbilligt, wie ocifetchinto(). Im Prinzip sind sie aber alle missbilligt. Du musst ja sowieso das Handbuch aufsuchen, um dich über die Rückgabewerte zu informieren. Dabei kannst du dich auch gleich über aktuelle Funktionen beziehungsweise Funktionsnamen informieren.
Ein weiterer Punkt ist deine Art, das Statement zusammenzusetzen. Du missachtest dabei die Möglichkeit einer SQL-Injection. Desweiteren geht es bei OCI sowieso nicht, eine Abfrage ohne Prepared Statement zu erstellen. Also kannst du auch gleich dessen Möglichkeit zur Übergabe von variablen Werten nutzen. Dann kann auch keine SQL-Injection mehr auftreten. Ein Beispiel zur Anwendung gibt es unter [oci_bind_by_name()](http://de.php.net/manual/en/function.oci-bind-by-name.php). Beachte, so wie es auf verlinkter Handbuchseite steht, dass das Feature [Magic Quotes](http://de.php.net/manual/en/security.magicquotes.php) deaktiviert ist oder [seine Auswirkungen beseitigt wurden](http://de.php.net/manual/en/security.magicquotes.disabling.php).
echo "$verabschiedung $name";