David Silva wrote:
> Hi Matthew,
>
> I resolved the problem like this :
>
> # HTML::Mason
>
> if ($validar){
> my $dbcon= DBI->connect("dbi:mysql:dbname=dbcontactos","root","");
> my $sql = $dbcon->prepare("select name, pass from Utilizador where
> name=? and pass=?");
> $sql->execute($name,$pass) or die "erro" . $sql->errstr;
>
> if($sql->rows == 1){ # muda de página
> $m->redirect('main.html');
> # $token = 1; #send token to main.html but not yet
>
> }
> else{ # continua na mesma página
> $m->redirect('login.html');
> # $token = 0;
> }
> }
>
> Thank you for your reply!
>
> 2009/10/14 Matthew Ramadanovic <[email protected]>
>
>>
>>> my $dbcon= DBI->connect("dbi:mysql:dbname=dbcontactos","root","");
>>> my $sql = $dbcon->prepare("select name,pass from Utilizador where
>> name='?' >and pass='?'");
>>> $sql->execute($user,$pass);
>>> if($sql == 1){
>>> redirect to other page
>>> }
>>> if($sql == 0){
>>> stay in the login page
>>> }
>> Not quite sure what you are expecting $sql to be. If your intention is
>> to compare $pass or other table variables to the value in column before
>> proceeding why not just pull it into a structure that will allow you to
>> do so? :
>>
>> my $pass;
>> my $name;
>> my %record;
>> my $sql = "select name,pass from Utilizador where name='?' and
>> pass='?'";
>> my $sth = $dbh->prepare($sql);
>> $sth->execute($name,$pass);
>> my $rowref;
>> my $column;
>> my $val;
>> while ($rowref = $sth->fetchrow_hashref()) {
>> #not sure if you will have multiple records so you may need to
>> exit
>> #the loop after %record is filled the first time
>> while (($column, $val) = each %$rowref) {
>> $record{$column} = $val;
>> }
>> }
>> If ($record{'pass'} eq $pass) {
>> #redirect to other page
>> } else {
>> #stay on logon
>> }
>>
>>
>> -M
>>
>>
>> -----Original Message-----
>> From: David Silva [mailto:[email protected]]
>> Sent: Wednesday, October 14, 2009 6:30 AM
>> To: [email protected]
>> Subject: Stuck with form validation
>>
>> Hi everyone,
>>
>> I have a form with username and password, and when the user enter the
>> right
>> user and pass he/she go to other page. (that is my thought)
>>
>> What i did?
>>
>> my $dbcon= DBI->connect("dbi:mysql:dbname=dbcontactos","root","");
>> my $sql = $dbcon->prepare("select name,pass from Utilizador where
>> name='?' and pass='?'");
>> $sql->execute($user,$pass);
>> if($sql == 1){
>> redirect to other page
>> }
>> if($sql == 0){
>> stay in the login page
>> }
>>
>> My problem is that i can't see any other way to do this and even if the
>> values are correct with the ones in database it stays in the login page.
>>
>> How can i do this?
>>
>> Thank you
>> --
>> David Silva
>>
>
You may need to be aware that call to rows might not reliable across all
DBDs. rows is documented as:
Returns the number of rows affected by the last row affecting command,
or -1 if the number of rows is not known or not available.
Generally, you can only rely on a row count after a non-SELECT execute
(for some specific operations like UPDATE and DELETE), or after fetching
all the rows of a SELECT statement.
Also, you issued a select and did not read the row or close the cursor
(although I believe once "$sql" goes out of scope the latter does not
matter). If username is a unique then why don't you just do:
my $sql = $dbcon->prepare(q{select 1 from Utilizador where name=? and
pass=?});
$sql->execute($user,$pass);
my $found = $sql->fetch;
if ($found) {
redirect to other page
} else {
stay in the login page
}
Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com