webForumDet fria alternativet

Kontroll av data från databas?

5 svar · 306 visningar · startad av pennypacker

pennypackerMedlem sedan mars 200291 inlägg
#1

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';

#open connection to Access database
$dbh = DBI->connect('dbi:ODBC:mediastore');
$var = $ENV{'QUERY_STRING'};
$anvnamn = param('name');
$passw = param('passw');

\#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.

JojoxxMedlem sedan juni 20004 308 inlägg
#2

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?

$sth->numrows returnerar antalet rader som returneras från databasen efter att du exekverar SQL-anropet. Alltså;

if($sth->numrows ne 0){
   print "Här fanns det rader att hämta...";
} else {
   print "Nehepp, inte det";
}

Sen undar jag ifall man kolla om strängvariabler innehåller nåt? Typ ($str eq null) eller nåt liknande.

Typ;

if($mystring eq "")

eller ?

pennypackerMedlem sedan mars 200291 inlägg
#3

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.

Peter_BMedlem sedan apr. 2000642 inlägg
#4

Jag använder alltid $sth->rows, men jag kör ju iofs med MySQL.

Om det inte är så implementerat i access-delen så kanske du kan kolla istället om arrayen du får är odefinerad eller på nått annat sätt tom?

@array = $sth->fetchrow_array();
if (!defined @array) {
 # nehepp
}

eller kanske

if (!defined $array[0] or $array[0] eq "") {
 # nehepp
}

Annars... prova att läsa i dokumentationen för access-DBD-modulen (ODBC-modulen?) . borde kunna finnas några ledtrådar där kanske.

JojoxxMedlem sedan juni 20004 308 inlägg
#5

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.

pennypackerMedlem sedan mars 200291 inlägg
#6

Japp, fick det att fungera med Peters förslag.

Tackar för hjälpen.

132 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)