繁体   English   中英

我无法将html表的内容保存到文本文件中。 使用CGI和PERL

[英]I can't save the contents of a table in html into a text file. Using CGI and PERL

您好,我的朋友们,我在javascript和html方面还相当陌生,因此该项目花费的时间比我可能需要的长得多。 这是问题,我想将表的内容保存到文本文件中。

这是表格中的代码

print start_form(-action=>"",-onSubmit=>"return false;");
print table({-border=>1,-cellpadding=>3,-name=>"tabla",-id=>"tab"},
    th(["Matricula","Nombre","Apellido Paterno","Apellido           Materno","Sexo","Edad","Carrera","Email",
    "Materias","Promedio","Borrar"]));
print   submit(-label=>'Guardar',-onClick=>'salvar();',-onSubmit=>"salvar(); return false;");
print hidden(-name=>'escondido',-id=>'hid',
             -default=>['0']);
print hidden(-name=>'escondido2',-id=>'hid2',
             -default=>['nadiemeve2']);
print   end_form;

当它使用javascript读取文件时,会将行添加到表中,因此当我要将显示的表的内容保存到文本文件中时,请执行以下操作:

if (param) {
open FT, "+>>".param('escondido2') or die "No se puede abrir el archivo";
print FT param('celda60');
close FT;
}

在这里,“ celda60”是字段内单个文本字段的名称,该名称是在创建单元格时给出的。 您可能会注意到,我只是想保存一个单元格作为测试,事实是,它不起作用。 它不会保存任何东西。 但如果我这样做:打印FT param('celda60')。“ TEST”; 它保存在我的文件中的唯一东西是TESTESTESTEST,所以问题就必须是param('celda60'),以防万一您怀疑'salvar()'看起来像这样

   function salvar(){

   var table2 = document.getElementById('tab');

   var rowCount2 = table2.rows.length - 1;
   document.getElementById('hid').value=rowCount2; }

唯一要做的就是获取行数,因此当我进行保存时,可以通过执行几个循环来保存每个单元格中每个文本字段内的内容。

有什么想法我在这里做错了吗? 我的意思是,我猜除了很多基本的东西。

HTML文档的客户端修改不会通过CGI自动反映到服务器端程序的状态中。 您需要其他机制,例如AJAX。

您需要在1998年以后的某个时间阅读编写良好的 Perl和CGI教程。

我推荐Ovid的CGI课程 这是一个古老的经典,但写得很好,不鼓励不良作法。

您至少有一个地方可以在CGI参数中使用shell换码来运行任意命令。 这就是为什么像污染用户数据和3个参数打开命令这样的做法是标准做法,并且已经存在很多年了。

一般建议:

  1. 确保使用strict warnings
  2. 用3论点open与词汇手柄,或者只是使用IO ::文件。 open my $fh, '>>', $pathtofile or die "Ouch $!";
  3. 您不必在Perl中使用CGI模块来执行CGI。 这是处理参数解析和HTML构建的一种便捷方法。 有很多选项。
  4. print可以处理参数列表。 您的代码中不需要50条打印语句。
  5. 在代码中添加空格。 放宽所有内容使其更具可读性。

在最后几点,这是一个示例:

sub print_form {

    print 

        start_form(-action=>"", -onSubmit=>"return false;"),

        table({-border=>1,-cellpadding=>3,-name=>"tabla",-id=>"tab"},
              th([  "Matricula",        "Nombre",
                    "Apellido Paterno", "Apellido Materno",
                    "Sexo",             "Edad",
                    "Carrera",          "Email",
                    "Materias",         "Promedio",
                    "Borrar",
              ])
        ),

        submit( -label    => 'Guardar', 
                -onClick  => 'salvar();',
                -onSubmit => 'salvar(); return false;',
        ),

        hidden( -name=>'escondido',  -id=>'hid',  -default=>['0'] ),
        hidden( -name=>'escondido2', -id=>'hid2', -default=>['nadiemeve2'] ),

        end_form();
}

虽然,在我的代码中,我会制作HTML并将其传回。 我喜欢保持副作用,例如将东西打印出来。

也许您使问题过于复杂,类似的事情将使您可以让用户输入表单的值列表,然后将这些值保存到服务器上的数据文件中。

use strict;
use warnings;
use CGI;
use IO::File;

my @FIELDS = qw(
        matricula        nombre
        apellido_paterno apellido_materno
        sexo             edad
        carrera          email
        materias         promedio
        borrar
);

i    f( param('gotstuff') ) {


   my $fh = IO::File->open( 'datafile.txt', '>>' );

   my @data = param( @FIELDS );

   $fh->print join ',', @data;

   # Print a thank you for your data page here.

}
else {

     # Do your other junk here, start some html, etc
     # print the form and so on.

     print_form();

     # Print the rest of your HTML here.
}

sub print_form {

    my @fields = qw(
        matricula        nombre
        apellido_paterno apellido_materno
        sexo             edad
        carrera          email
        materias         promedio
        borrar
     );
    my @headings = map {my $w = $_; $w=~/_/ /g; uc_first $w } @fields;



    print 

        start_form(-action => script_name(), -method => 'POST' ),

        table({-border=>1,-cellpadding=>3,-name=>"tabla",-id=>"tab"},
            Tr([
              th(\@headings),
              td([ map textfield($_), @fields ]),
            ]),
        ),

        submit( -label    => 'Guardar', 
                -onClick  => 'salvar();',
                -onSubmit => 'salvar(); return false;',
        ),
        hidden( 'gotstuff', 'gotstuff' ),
        end_form();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM