Javascript 使用ajax和perl更新数据库服务器
我在表中有一组用于更新密码的代码,这里我使用AJAX更新密码,并在相应执行时获得弹出屏幕。当将该代码用于我的应用程序时,它正在正确执行,但我没有获得输出(密码未更新到表中)。我也没有任何错误 Html页面代码Javascript 使用ajax和perl更新数据库服务器,javascript,ajax,perl,Javascript,Ajax,Perl,我在表中有一组用于更新密码的代码,这里我使用AJAX更新密码,并在相应执行时获得弹出屏幕。当将该代码用于我的应用程序时,它正在正确执行,但我没有获得输出(密码未更新到表中)。我也没有任何错误 Html页面代码 <html> <head> <div><IMG src="karvy.jpg" ALT="image"></div> <script language="javascript" type="text/javascript"&
<html>
<head>
<div><IMG src="karvy.jpg" ALT="image"></div>
<script language="javascript" type="text/javascript">
//Browser Support Code
var xmlHttp;
function fetch_javaScript(usr,oldpassword,newpassword,repassword)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var usr = document.getElementById('usr').value;
var oldpassword = document.getElementById('oldpassword').value;
var newpassword = document.getElementById('newpassword').value;
var repassword = document.getElementById('repassword').value;
var url="changepwd1.pl";
url=url+"?usr=" + usr;
url=url+"&oldpassword=" + oldpassword;
url=url+"&oldpassword=" + newpassword;
url=url+"&repassword=" + repassword;
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("POST",url,false);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4 && xmlHttp.status==200)
{
document.getElementById("ajaxDiv").innerHTML=xmlHttp.responseText;
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
</script>
</head>
<body bgcolor="#D2B9D3">
<form name='myForm'>
<center><table> <tr><td>
<div style="width:400px;height:280px;border:3px solid black;">
<center><h4>Please Enter your Password's</h4>
<p><b>User Name</b>        <INPUT TYPE=text NAME="usr" id = "usr" size = "15" maxlength = "15" tabindex = "1"/></p>
<p><b>Old Password:</b>   <INPUT TYPE=PASSWORD NAME="oldpassword" id = "oldpassword" size = "15" maxlength = "15" tabindex = "1"/></p>
<p><b>Password:</b>         <INPUT TYPE=PASSWORD NAME="newpassword" id = "newpassword" size = "15" maxlength = "15" tabindex = "1"/></p>
<p><b>Re-Password:</b>   <INPUT TYPE=PASSWORD NAME="repassword" id = "repassword" size = "15" maxlength = "15" tabindex = "1"/></p>
<input type="submit" id="val" value="Submit" align="middle" method="POST" onclick="fetch_javaScript()"/><INPUT TYPE="reset" name = "Reset" value = "Reset"/>
<p>Main Menu <A HREF = login.pl>click here</A></p>
</center>
</div>
</td></tr></table></center>
</form>
<div id='ajaxDiv'>Your result will display here</div>
<!--<div id="myDiv"></div>-->
</body>
</html>
//浏览器支持代码
var-xmlHttp;
函数fetch_javaScript(usr、oldpassword、newpassword、repassword)
{
xmlHttp=GetXmlHttpObject();
if(xmlHttp==null)
{
警报(“浏览器不支持HTTP请求”);
返回;
}
var usr=document.getElementById('usr').value;
var oldpassword=document.getElementById('oldpassword')。值;
var newpassword=document.getElementById('newpassword')。值;
var repassword=document.getElementById('repassword').value;
var url=“changepwd1.pl”;
url=url+“?usr=“+usr;
url=url+“&oldpassword=“+oldpassword;
url=url+“&oldpassword=“+newpassword;
url=url+“&repassword=“+repassword;
onreadystatechange=stateChanged;
open(“POST”,url,false);
xmlHttp.send(空);
}
函数stateChanged()
{
if(xmlHttp.readyState==4&&xmlHttp.status==200)
{
document.getElementById(“ajaxDiv”).innerHTML=xmlHttp.responseText;
}
}
函数GetXmlHttpObject()
{
var xmlHttp=null;
尝试
{
//Firefox、Opera 8.0+、Safari
xmlHttp=新的XMLHttpRequest();
}
捕获(e)
{
//Internet Explorer
尝试
{
xmlHttp=新的ActiveXObject(“Msxml2.xmlHttp”);
}
捕获(e)
{
xmlHttp=新的ActiveXObject(“Microsoft.xmlHttp”);
}
}
返回xmlHttp;
}
请输入您的密码
用户名
旧密码:  
密码:nbsp   
重新输入密码:  
主菜单
您的结果将显示在这里
Perl代码
#!/usr/bin/perl
use DBI;
use strict;
use CGI;
my $cgi = CGI->new;
print $cgi->header;
print $cgi->start_html("Password Form");
print "Content-type: text/html\n\n";
my $request;
######################################## Query String
if ($ENV{'REQUEST_METHOD'} eq "GET")
{
$request = $ENV{'QUERY_STRING'};
}
elsif ($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN, $request,$ENV{'CONTENT_LENGTH'}) || die "Could not get query\n";
}
#$request="usr=sairam&oldpassword=password123&oldpassword=123456&repassword=123456";
my $j=0;
my ($i,@update_value,@value);
my @parameter=split(/&/,$request);
for $i (@parameter)
{
@value=split(/=/, $i);
$update_value[$j] =$value[1];
$j++;
}
my $user=$update_value[0];
my $oldpward=$update_value[1];
my $newpward=$update_value[2];
my $repward=$update_value[3];
#$user = $_SESSION['username'];
if ($user)
{
## Database Connectivity
my $DSN = q/dbi:ODBC:SQLSERVER/;
my $uid = q/ivr/;
my $pwd = q/ivr/;
my $DRIVER = "Freetds";
my %attr = (PrintError => 1,RaiseError => 1,);
my $dbh = DBI->connect($DSN,$uid,$pwd,\%attr) or die $DBI::errstr;;
my $sth=$dbh->prepare("select password from rpt_account_information where username='$user'") or die("Query didn't work");
$sth->execute();
my $oldpassworddb=$sth->fetchrow();
# check pass
if ($oldpward==$oldpassworddb)
{
# check twonew pass
if ($newpward==$repward)
{
#success
#change pass in db
if (length($newpward)>10||length($newpward)<4) #Here is the code
{
print "<script>alert('Password must be betwwen 4 & 10')</script>";
}
else
{
my $p_update = $dbh->prepare("UPDATE rpt_account_information SET password=? WHERE username=?");
$p_update->execute($newpward,$user);
#session_destroy();
print 'Your pass has benn changed.<a href="login.pl">Return</a> to the main page';
}
}
else
{
print "<script>alert('New Pass does not match')</script>";
}
}
else
{
print "<script>alert('Old Pass does not match')</script>";
}
}
#/usr/bin/perl
使用DBI;
严格使用;
使用CGI;
my$cgi=cgi->新建;
打印$cgi->标题;
打印$cgi->start_html(“密码表单”);
打印“内容类型:text/html\n\n”;
我的$请求;
########################################查询字符串
if($ENV{'REQUEST_METHOD'}eq“GET”)
{
$request=$ENV{'QUERY_STRING'};
}
elsif($ENV{'REQUEST_METHOD'}eq“POST”)
{
read(STDIN,$request,$ENV{'CONTENT_LENGTH'})| | die“无法获取查询\n”;
}
#$request=“usr=sairam&oldpassword=password123&oldpassword=123456&repassword=123456”;
我的$j=0;
我的($i,@update\u value,@value);
my@parameter=split(/&/,$request);
对于$i(@parameter)
{
@值=拆分(/=/,$i);
$update_value[$j]=$value[1];
$j++;
}
my$user=$update_值[0];
my$oldpward=$update_值[1];
my$newpward=$update_值[2];
my$repward=$update_值[3];
#$user=$\会话['username'];
如果($user)
{
##数据库连接
my$DSN=q/dbi:ODBC:SQLSERVER/;
my$uid=q/ivr/;
我的$pwd=q/ivr/;
my$DRIVER=“Freetds”;
我的%attr=(PrintError=>1,RaiseError=>1,);
my$dbh=DBI->connect($DSN、$uid、$pwd、\%attr)或die$DBI::errstr;;
my$sth=$dbh->prepare(“从rpt_帐户信息中选择密码,其中用户名='$user'))或die(“查询不起作用”);
$sth->execute();
我的$oldpassworddb=$sth->fetchrow();
#检查通行证
如果($oldpward==$oldpassworddb)
{
#检查两张新的通行证
如果($newpward==$repward)
{
#成功
#数据库中的更改传递
如果(长度($newpward)>10 | |长度($newpward)准备(“更新rpt_账户_信息集密码=?其中用户名=?”);
$p_update->execute($newpward,$user);
#会话_destroy();
打印“您的通行证已更改。转到主页”;
}
}
其他的
{
打印“警报(‘新通行证不匹配’)”;
}
}
其他的
{
打印“警报(‘旧通行证不匹配’)”;
}
}
这是我的完整代码,但我无法找出错误或输出
请帮助我…为包含
元素的innerHTML
赋值不会导致执行该脚本
作为一种解决方法,您可以在JS中解析JavaScript,然后
eval
it,但最好处理结构化数据(例如JSON)页面中已经有了JavaScript的表示逻辑。您使用的是CGI.pm
,究竟为什么要手动解码查询字符串/post数据?!我看到了类似if($oldpward==$oldpassworddb)
的行。如果值是字符串(从变量猜测)