Javascript 使用ajax和perl更新数据库服务器

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"&

我在表中有一组用于更新密码的代码,这里我使用AJAX更新密码,并在相应执行时获得弹出屏幕。当将该代码用于我的应用程序时,它正在正确执行,但我没有获得输出(密码未更新到表中)。我也没有任何错误

Html页面代码

<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>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT TYPE=text NAME="usr" id = "usr" size = "15" maxlength = "15" tabindex = "1"/></p>
<p><b>Old Password:</b>&nbsp&nbsp&nbsp<INPUT TYPE=PASSWORD NAME="oldpassword" id = "oldpassword" size = "15" maxlength = "15" tabindex = "1"/></p>
<p><b>Password:</b>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<INPUT TYPE=PASSWORD NAME="newpassword" id = "newpassword" size = "15" maxlength = "15" tabindex = "1"/></p>
<p><b>Re-Password:</b>&nbsp&nbsp&nbsp<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)
的行。如果值是字符串(从变量猜测)