Schrift
[thread]676[/thread]

Kann nicht auf Cookies prüfen



<< >> 4 Einträge, 1 Seite
pug
 2006-02-21 16:34
#6975 #6975
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,
ich habe noch ein kleines Problem mit dem Prüfen von Cookies. Bei fast allen Skripten, die ich erzeugt habe bereitet das Auslesen der Cookies keine Probleme. Nur, wenn ich auf das vorhandensein eines Cookies prüfe, ist der Cookie-Wert danach irgendwie nicht mehr vorhanden.

Also das sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$cookieValue = $cgi_obj->cookie('zocalo_id');


if ( undef ( $cookieValue ) )
{
print $cgi_obj->redirect ( -url => "http://localhost/db/user-error.html" );
exit;
}


#schaue in 'kunden' nach welcher Name mit der Nummer in $cookieValue asoziert ist
$result = $dbh->prepare ( "SELECT vorname, nachname FROM kunden WHERE kid = $cookieValue" ) or die "Vorbereitung nicht durchfuehrbar!\n";
$result->execute() or die "Abfrage nicht ausfuehrbar -kunden! $DBI::errstr \n";
$zeile = $result->fetchrow_arrayref();
$vorname = $zeile->[0];
$nachname = $zeile->[1];
$result->finish();


Wenn ich die Überprüfung ( ganz oben ) auskommentiere, gibt es keine Probleme. Wenn ich es wieder reinnehme, kann die Datenbank-Abfrage nicht mehr ausgeführt werden.
Quote
neue_auktion.cgi: Use of uninitialized value in concatenation (.) or string at /usr/lib/cgi-bin/neue_auktion.cgi line 46.
[Tue Feb 21 15:18:14 2006] neue_auktion.cgi: DBD::Pg::st execute failed: FEHLER: Fehler »Syntaxfehler« am Ende der Eingabe at character 50
[Tue Feb 21 15:18:14 2006] neue_auktion.cgi: Abfrage nicht ausfuehrbar -kunden!
Wo liegt das Problem?

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
Relais
 2006-02-21 17:16
#6976 #6976
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
undef ( $cookieValue ) ist eine Funktion (siehe perldoc -f undef), die $cookieValue den Wert undef zuweist. Daher Dein Misverstaendnis.\n\n

<!--EDIT|Relais|1140535151-->
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
pug
 2006-02-21 17:56
#6977 #6977
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Ok, das war wirklich ein Missverständniß von mir. Ich habe es jetzt folgendermaßen geändert:
Code: (dl )
1
2
3
4
5
if ( ! $cookieValue )
{
print $cgi_obj->redirect ( -url => "http://localhost/db/user-error.html" );
exit;
}

und jetzt tuts das was es soll.

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
nepos
 2006-02-21 21:09
#6978 #6978
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Kleiner Vorschlag zur Datenbankabfrage noch:
Code (perl): (dl )
$zeile = $dbh->selectrow_arrayref(qq{SELECT vorname, nachname FROM kunden WHERE kid=?},undef,$cookieValue);

Das ist etwas kompakter und auch sicherer, da du den Platzhalter nutzt und so das DBI-Modul das sauber an die DB weiterreicht.
Wenn du beim Verbindungsaufbau noch
Code: (dl )
RaiseError=>1
uebergeben hast, kannst du eventuelle Fehler dann schoen mit eval abfangen:
Code (perl): (dl )
1
2
3
4
5
6
eval {
$zeile = $dbh->selectrow_arrayref(qq{SELECT vorname, nachname FROM kunden WHERE kid=?},undef,$cookieValue);
};
if $@ {
... Fehlercode ...
}


Das Konstrukt mit eval ist gerade bei Postgresql ganz praktisch, wenn du mit Transaktionen arbeitest. Dann kannst du mehrere DB-Befehle in einen Block packen und am Ende auf Fehler pruefen und nen Rollback machen, wenn was schiefgelaufen ist.
Ich glaube, in der DBI-Doku sind da paar gute Beispiele zu drin.
<< >> 4 Einträge, 1 Seite



View all threads created 2006-02-21 16:34.