Hej!
Nu har jag ytterligare ett "rookieproblem" som jag suttit fast på ett tag.
Det är så att jag hämtar ut användaruppgifter från en databas när vederbörande loggar in. Fast om det är så att personen som försöker logga in inte finns i databasen med användarnamn och password så vill jag ju dirigera om denne till en annan sida.
Frågan är hur man kollar att inga poster hämtats från databasen?
Formuläret med loginuppgifterna anropar login.cgi som ser ut såhär:
#Windows-based Perl/DBI/MS Access example
use DBI;
use CGI ':standard';
\#prepare and execute SQL statement
$sqlstatement="SELECT FNAMN, EPOST, ORT FROM KUND WHERE ANVNAMN = '$anvnamn' AND PASSWORD = '$passw'";
$sth = $dbh-\>prepare($sqlstatement);
$sth-\>execute \|\|
die "Could not execute SQL statement ... maybe invalid?";
# Tilldelar värdena som hämtats från databasen
($fnamn, $epost, $ort)= $sth->fetchrow_array;
----------------------------------
Finns det något sätt att kolla om $sth i det här fallet är tomt? Dvs. att inget fanns att hämta från databasen?
Sen undar jag ifall man kolla om strängvariabler innehåller nåt? Typ ($str eq null) eller nåt liknande.
Har inte hittat nåt på nätet som behandlar detta så jag hoppas på svar här.
Får det inte att funka med numrows. Får felmeddelandet: Can't locate object method "numrows" via package "DBI::st".
Kollade runt lite på Internet och hittade viss information där det stod att numrows inte fungerade speciellt bra med DBI och att man skulle använda rows istället. Fast det verkar i sin tur inte fungera speciellt bra med MS Access. Värdet i $rader = = $sth->rows; blir -1 oavsett om data hämtats från databasen eller inte.
Kan bara inflika att jag också kör MySQL. Och vid närmare eftertanke stämmer det nog att varken numrows eller rows fungerar när man kör MS-Access. Där får man helt enkelt loopa igenom svaret för att få reda på hur många rader det var.
Peter_Bs variant med att titta i fälten ifall de är tomma fungerar dock utmärkt.