Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在将css合并到perl cgi中时遇到问题_Css_Perl_Cgi - Fatal编程技术网

在将css合并到perl cgi中时遇到问题

在将css合并到perl cgi中时遇到问题,css,perl,cgi,Css,Perl,Cgi,下面的代码是一个cgi文件,我在显示外部css文件中的图像和样式时遇到问题。代码在第18-28行,我不确定我做错了什么。我将感谢任何帮助 #!/usr/bin/perl -w use strict; use DBI; use CGI; use CGI::Carp('fatalsToBrowser'); my $query = new CGI; print $query->header(); my $my_database = "TrypSnoDB"; my $localhost = "

下面的代码是一个cgi文件,我在显示外部css文件中的图像和样式时遇到问题。代码在第18-28行,我不确定我做错了什么。我将感谢任何帮助

 #!/usr/bin/perl -w
use strict;
use DBI;
use CGI;
use CGI::Carp('fatalsToBrowser');

my $query = new CGI;
print $query->header();
my $my_database = "TrypSnoDB";
my $localhost = "localhost";
my $dsn = "DBI:mysql:$my_database:$localhost";
my $db_user_name = "adrian";
my $db_password = "temp_pass";
my $dbh = DBI->connect("DBI:mysql:database=TrypSnoDB;host=localhost;mysql_socket=/private/software/mysql/mysql.sock","adrian","temp_pass", {'RaiseError' => 1});

print "<html>\n";
print "<head>\n";
print "<title>Welcome to the T. Brucei snoRNA Database</title>\n";
print "<link type='text/css' rel='stylesheet' href='/public_html/style.css'>\n";
print "</head>\n";
print "<body>\n";
print "<h1>Trypanosomatid snoRNA Database</h1>\n";   
print "<img class='my_images' src='/public_html/tb_pic1.png'>\n";
print "</body>\n";
print "</html>\n";


if ($query->param('submit1')){
    my $orig_sno = $query->param('snorna1');
    my $family = $query->param('family1');
    my $query_type = $query->param('target_option1');
    my $target = $query->param('target_name1');
    if ($orig_sno eq "Trypanosoma brucei") {
        $orig_sno = 1;
    }
    elsif ($orig_sno eq "Leishmania major") {
        $orig_sno = 7;
    }
    elsif ($orig_sno eq "ALL") {
        $orig_sno = "1 or ST.org_id=7";
    }
    if ($family eq "ALL") {
        $family = "'C/D' or ST.family='H/ACA'";
    }
    else {
        $family = "'$family'";
    }
    if ($target ne "ALL") {
        $family = "$family and T.target_name='$target'";
    }
    my($db_query,$common_tar,$exp_ver_sno,$exp_ver_tar,$total);
    $db_query = "SELECT ST.sno_name,T.target_name,T.location,T.base_pair,SM.annotated_seq FROM sno_Table ST,sno_Modifications SM,Targets T WHERE ST.sno_id=SM.sno_id and SM.mod_id=T.target_id and (ST.org_id=$orig_sno) and (ST.family=$family)";
    $common_tar="and T.target_id in(SELECT T.target_id FROM sno_Table ST,sno_Modifications SM,Targets T WHERE ST.sno_id=SM.sno_id and SM.mod_id=T.target_id group by T.target_id having count(*)=2) order by T.location desc";
    $exp_ver_sno="and ST.exper_ver='Y'";
    $exp_ver_tar = "and T.exp_ver='Y'";
    if ($query_type eq "snoRNAs with common targets") {
        $db_query=$db_query.$common_tar;
    }
    elsif ($query_type eq "Experimentally verified snoRNAs") {
        $db_query=$db_query.$exp_ver_sno;
    }
    elsif ($query_type eq "snoRNAs with experimentally verified targets") {
        $db_query=$db_query.$exp_ver_tar;
    }
    elsif ($query_type eq "ALL"){
        $db_query=$db_query;
    }   
    my $sth = $dbh->prepare($db_query);
    $sth->execute();
    my$total = $sth->rows; 
        print "<table border=1>\n
    <tr>
        <th>snoRNA</th>\n
        <th>Target Name</th>\n
        <th>Target Location</th>\n
        <th>Target Base Pair</th>\n
        <th>Annotated Sequence</th>\n
    </tr>\n";
    while (my@row = $sth->fetchrow_array()){
        my$sno_name = $row[0];
        my$tar_name = $row[1];
        my$tar_loc = $row[2];
        my$tar_bp = $row[3];
        my$annotated_seq = $row[4];
        print "<tr>\n<td>$sno_name</td><td>$tar_name</td><td>$tar_loc</td><td>$tar_bp</td><td>$annotated_seq</td></tr>\n";
    }
    print "<tr>
        <th>TOTAL</th>\n
        <th>$total</th>\n
    </tr>\n";
    print "</table>";
}   

您的问题几乎可以肯定是CSS文件的URL错误。您可以通过查看web服务器错误日志并查看CSS请求是否有404记录来确认这一点

不幸的是,我无法告诉您正确的URL是什么,因为我不知道您的web服务器是如何配置的

不过,您可能还需要解决几个其他问题:

生成的HTML无效。打印和标记外部的标记。在Perl程序中打印原始HTML是一个糟糕的想法——这里的错误太容易了。您最好使用我推荐的模板引擎。 您的数据库查询很容易出错。请在有人破坏您的服务器之前切换到使用绑定变量。
这是对Dave关于SQL语句生成的交叉评论的回应。为了防止SQL注入,将语句生成转换为使用绑定似乎相当简单

要使用占位符绑定,我认为OP只需要将$db\u查询变量中的变量$orig\u sno和$family替换为?性格像这样:

$db_query = "SELECT ST.sno_name,T.target_name,T.location,T.base_pair,SM.annotated_seq
FROM sno_Table ST,sno_Modifications SM,Targets T WHERE ST.sno_id=SM.sno_id and
SM.mod_id=T.target_id and (ST.org_id=?) and (ST.family=?)";   # one line
...
my $sth = $dbh->prepare($db_query);
$sth->execute($orig_sno, $family);
但是,由于$family变量可能是根据以前的条件构建的,因此还有一个变量$target也在起作用

    if ($family eq "ALL") {
    $family = "'C/D' or ST.family='H/ACA'";
}
else {
    $family = "'$family'";
}
if ($target ne "ALL") {
    $family = "$family and T.target_name='$target'";
}
占位符会处理这个插值变量吗?或者$target变量也需要它自己的占位符吗

在这种情况下,这就是阻止SQL注入攻击所需要做的全部工作吗

解决了。如果$target变量确实需要自己的占位符,那么对条件进行一些调整就可以了

else {
    $family = "'$family'";
}
# removed - if $target ne ALL conditonal

my($db_query,$common_tar,$exp_ver_sno,$exp_ver_tar,$total);

$db_query = "SELECT  ...  and (ST.org_id=?) and (ST.family=?)";
if ($target ne "ALL") {     
    $db_query =~ s/\)$//;
    $db_query .= ' and T.target_name=?)';
}
$common_tar="and T.target_id ... ";
... 
my $sth = $dbh->prepare($db_query);

if ($target ne 'ALL'){
  $sth->execute($orig_sno, $family, $target);
else{
  $sth->execute($orig_sno, $family);
}

尝试删除/public_html并尝试!!您是否尝试使用完整的url?示例:\nHi,我尝试了两种方法。当我运行它时,我得到的只是h1标记之间的内容,以及它下面的一个小正方形,我猜这就是图像应该在的位置。您已经有很多答案告诉您出了什么问题:@user2393845,因为您没有接受建议。调试问题:css/映像问题不是最严重的,您的服务器容易受到SQL注入攻击,因为您是如何创建SQL的。他们已经告诉你了:非常感谢你的建议!