![](/img/trans.png)
[英]How to display contents of a file with formatting preserved on the browser using Perl CGI
[英]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个参数打开命令这样的做法是标准做法,并且已经存在很多年了。
一般建议:
strict
warnings
。 open
与词汇手柄,或者只是使用IO ::文件。 open my $fh, '>>', $pathtofile or die "Ouch $!";
print
可以处理参数列表。 您的代码中不需要50条打印语句。 在最后几点,这是一个示例:
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.