我正在与一个管理员登录页面,学生登录,公司登录和申请表的网站。
我使用的是Perl dancer框架。
申请表内容包括:
Name
Mobile_no
Gender
Password
Email
Address
SSLC
HSC
CGPA
Proficient languages
Internships
Preferred locationHTML的相应代码如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title> APPLICATION FORM </title>
<style>
*
{
margin: 0;
padding: 0;
}
.cont {
background:url("/images/2.jpg");
background-size: 100%;
background-repeat: no-repeat;
padding: 20px;
height: 750px;
}
form
{
height: auto;
border-radius:1px;
margin: 1% auto;
padding: 1%;
background-color:darkgrey;
margin-left: 38%;
width: 30%;
}
input[type=submit] {
margin-left: 10%;
background-color:#D14B57;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
}
input[type=submit]:hover {
background-color:green;
}
</style>
</head>
<div class="cont">
<form method="post">
<h2 style="text-align: center; text-decoration:underline;" id="contactus">APPLICATION FORM </h2> <br>
<label for="fname"><strong>Name*</strong></label>
<input style="margin-left: 26%;" type="text" id="fname" name="name" placeholder="Your name..."> <br> <br>
<label for="mno"><strong>Mobile Number*</strong></label>
<input style="margin-left: 7%;" type="text" id="mno" name="mobile_no" placeholder="Your Mobile Number..."> <br> <br>
<label><strong>Gender*</strong></label>
<input style="margin-left: 22%;" type="radio" name="gender" value="male" >Male<br>
<input style="margin-left: 39%;" type="radio" name="gender" value="female" >Female<br>
<br>
<label for="fname"><strong>Password*</strong></label>
<input style="margin-left: 19%;" type="password" name="password" id="password" pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{7,}" title="at least one number and one uppercase and lowercase letter, and at least 7 characters" required></td>
<br> <br>
<label for="email"><strong>Email</strong></label>
<input style="margin-left: 28%;" type="email" id="em" name="email" placeholder="Your MailId..."> <br> <br>
<label for="add"><strong>Address*</strong></label>
<textarea style="margin-left: 21%;" id="address" name="address" style="height:50px"></textarea>
<br> <br>
<label for="mark1"><strong>SSLC %*</strong></label>
<input style="margin-left: 20%;" type="text" id="sslc" name="sslc" maxlength="2"> <br> <br>
<label for="mark2"><strong>HSC %*</strong></label>
<input style="margin-left: 22%;" type="text" id="HSC" name="hsc" maxlength="2"> <br> <br>
<label for="mark"><strong> CGPA* </strong></label>
<input style="margin-left: 25%;" type="text" id="CGPA" name="cgpa" maxlength="3"> <br> <br>
<label><strong>Proficient Languages*</strong></label>
<input style="margin-left: 12%;" type="checkbox" name="lang" value="C++">C and C++ <br>
<input style="margin-left: 55%;" type="checkbox" name="lang" value="python">Python <br>
<input style="margin-left: 55%;" type="checkbox" name="lang" value="java">Java<br>
<input style="margin-left: 55%;" type="checkbox" name="lang" value="Php">PHP <br>
<br>
<label for="intern"><strong>Internships(if any)*</strong></label>
<textarea id="int" name="internships" style="height:50px"></textarea>
<br> <br>
<label for="country"><strong>Preferred location</strong></label>
<select id="country" name="preferred_loc">
<option value="chennai">Chennai</option>
<option value="bombay">Bombay</option>
<option value="bang">Bangalore</option>
<option value="hyd">Hyderabad</option>
</select> <br> <br>
<br>
<input type="submit" value="SUBMIT">
<input style="margin-left: 10%;" type="reset" value="Reset">
<a style="margin-left: 10%;" href=http://localhost:3000>BACK</a>
</form>
</div>我的.pm文件的内容:
package ors;
use Dancer ':syntax';
use Dancer::Plugin::Database;
use File::Spec;
use File::Slurp;
use Template;
set 'database' => File::Spec->catfile(File::Spec->tmpdir(), 'campus.db');
set 'session' => 'Simple';
set 'template' => 'template_toolkit';
set 'logger' => 'console';
set 'log' => 'debug';
set 'show_errors' => 1;
set 'startup_info' => 1;
set 'warnings' => 1;
set 'username' => 'admin';
set 'password' => '';
set 'layout' => 'main';
our $VERSION = '0.1';
get '/' => sub {
template 'index';
};
get '/admin' => sub {
template 'admin';
};
get '/student' => sub {
template 'student';
};
get '/company' => sub {
template 'company';
};
get '/appform' => sub {
template 'appform';
};
my $flash;
sub set_flash {
my $message = shift;
$flash = $message;
}
sub get_flash {
my $msg = $flash;
$flash = "";
return $msg;
}
sub connect_db {
my $dbh = DBI->connect("dbi:SQLite:dbname=".setting('database')) or
die $DBI::errstr;
return $dbh;
}
sub init_db {
my $db = connect_db();
my $schema = read_file('./schema.sql');
$db->do($schema) or die $db->errstr;
}
post '/appform' => sub {
my $db = connect_db();
my $sql = 'insert into student (name,mobile_no,gender,email,address,sslc,hsc,cgpa,languages,internships,preferred_loc,password,applied_job,company_applied) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
my $sth = $db->prepare($sql);
$sth -> execute(params->{'name'},params->{'mobile_no'},params->{'gender'},params->{'email'},params->{'address'},params->{'sslc'},params->{'hsc'},params->{'cgpa'},params->{'languages'},params->{'internships'},params->{'preferred_loc'},params->{'password'}) or die $sth->errstr;
#$sth->execute();
set_flash('New entry posted!');
redirect '/';
};
any ['get', 'post'] => '/student' => sub {
my $err;
my $db = connect_db();
my $sql = 'select name and password from student WHERE name=? AND password=?';
my $sth = $db->prepare($sql) or die $db->errstr;
$sth->execute();
if ( request->method() eq "POST" ) {
if ( params->{'name'} ne setting('name') ) {
$err = "Invalid username";
}
elsif ( params->{'password'} ne setting('password') ) {
$err = "Invalid password";
}
else {
session 'logged_in' => true;
set_flash('You are logged in.');
return redirect '/';
}
}
template 'add.tt', {
'err' => $err,
}
};
any ['get', 'post'] => '/company' => sub {
my $err;
my $db = connect_db();
my $sql = 'select name and password from company WHERE name=? AND password=?';
my $sth = $db->prepare($sql) or die $db->errstr;
$sth->execute() or die $db->errstr;
if ( request->method() eq "POST" ) {
if ( params->{'name'} ne setting('name') ) {
$err = "Invalid username";
}
elsif ( params->{'password'} ne setting('password') ) {
$err = "Invalid password";
}
else {
session 'logged_in' => true;
set_flash('You are logged in.');
return redirect '/';
}
}
template 'add.tt', {
'err' => $err,
}
};
any ['get', 'post'] => '/admin' => sub {
my $err;
my $db = connect_db();
my $sql = 'select name and password from admin WHERE name=? AND password=?';
my $sth = $db->prepare($sql) or die $db->errstr;
$sth->execute() or die $db->errstr;
if ( request->method() eq "POST" ) {
if ( params->{'name'} ne setting('name') ) {
$err = "Invalid username";
}
elsif ( params->{'password'} ne setting('password') ) {
$err = "Invalid password";
}
else {
session 'logged_in' => true;
set_flash('You are logged in.');
return redirect '/';
}
}
template 'add.tt', {
'err' => $err,
}
};
true;问题是当我尝试填写申请表并在数据库中输入值时,它显示了一个错误:

发布于 2018-07-02 21:08:45
my $sth = $db->prepare($sql);由于prepare失败,$sth未定义,但随后您忽略了检查错误。请参阅documentation for prepare。
要简单地在所有地方启用错误检查,请在构造函数中设置RaiseError:
DBI->connect("dbi:SQLite:dbname=".setting('database'), undef, undef, {RaiseError => 1}) …发布于 2018-07-02 22:09:56
欢迎访问本网站。正如Haem提到的,在发布问题时,最好使用文本而不是图像。尽管如此,也许下面的信息将会有用...
SQL占位符和绑定参数
查询可能会失败,因为要绑定的参数数量不等于SQL占位符的数量。您有14个占位符-但在execute(...)语句中只绑定了12个参数。
在您的/admin、/student和/company路由处理程序中也存在同样的问题--在每种情况下,您都需要准备一个带有两个占位符的语句--例如
my $sql = 'select name and password from admin WHERE name=? AND password=?';
my $sth = $db->prepare($sql);然后尝试在不绑定任何参数的情况下执行它:
$sth->execute();如果在查询中使用占位符,则必须使用$sth->bind_param(...)或向$sth->execute(...)传递值来绑定参数。
Dancer的数据库插件
因为你使用的是Dancer的'Plugin:: database‘模块,你不需要在每次请求时都建立一个新的数据库连接。相反,该模块可以为您自动连接。
您只需要先在config.yml中定义相关的数据库参数。
也就是说,在您的config.yml中添加如下内容(因为您使用的是SQLite):
plugins:
Database:
driver: SQLite
database: 'campus.db'然后,替换
my $db = connect_db();
my $sth = $db->prepare($sql);使用
my $sth = database->prepare($sql);一旦这样做了,你就可以完全删除你的db_connect()函数了。
但是,必须事先在配置文件中将数据库参数设置为set correctly。
https://stackoverflow.com/questions/51136349
复制相似问题