我能';t将html格式的表格内容保存到文本文件中。使用CGI和PERL
你好,我的朋友们 我在javascript和html方面也是相当新的,所以这个项目花费的时间比我可能需要的要长得多。 问题是,我想将表的内容保存到文本文件中 这是表格中的代码我能';t将html格式的表格内容保存到文本文件中。使用CGI和PERL,html,perl,cgi,text-files,Html,Perl,Cgi,Text Files,你好,我的朋友们 我在javascript和html方面也是相当新的,所以这个项目花费的时间比我可能需要的要长得多。 问题是,我想将表的内容保存到文本文件中 这是表格中的代码 print start_form(-action=>"",-onSubmit=>"return false;"); print table({-border=>1,-cellpadding=>3,-name=>"tabla",-id=>"tab"}, th(["Matricula
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参数(“celda60”)“测试”;
它保存在我的文件中的唯一内容是testestest,所以问题一定是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教程 我推荐。这是一部古老的经典,但它写得很好,不鼓励不良做法 至少有一个地方我可以在CGI参数中使用shell转义来运行任意命令。这就是为什么像污染用户数据和3参数打开命令这样的做法是标准做法,并且已经存在多年了 一般忠告:
严格
和警告
open
,或者只使用IO::File<代码>打开我的$fh,“>>”,$pathtofile或“哎哟!”代码>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();
}
服务器日志有什么说明吗?此外,您应该使用open的三个arg版本,如“open FT,>>”、param('escondido2')或die$!;“您当前的版本使您面临shell注入攻击。使用“>>”而不是“+>>”,因为你没有从文件中读取。谢谢你的建议,不是吗?我一点也不担心安全性,但很高兴知道这一点。我使用了+>>,因为我只是从同一个项目中的另一个文件中复制了它,而忘记了“+”它不是必需的谢谢你的回答,我会研究它。我唯一的疑问是,我能用AJAX修改一个文件吗?我很感激你对我的坏习惯的关注,我已经知道了一些关于这些坏习惯的事情,但我决定暂时忽略它们,因为这是一个不在web服务器上运行的项目,并且不被认为在我自己的计算机之外的任何地方使用。我将研究3参数open命令,我对此一无所知。不管怎样,你有什么办法解决我保存表格内容的问题吗?我正在读关于AJAX的书,但我想我最终会做一个非常愚蠢的解决方案,比如使用隐藏的文本区域或类似的东西。@Jmex,看起来你对CGI环境中的事情是如何发生的感到困惑。用户请求一个页面,该页面作为静态文档构建在服务器上。用户与静态文档交互。AJAX和相关技术将这一点混合起来。@Jmex,在AJAX情况下,您将有一组服务器端代码来生成基本页面,另一组用于处理AJAX请求。您的基本页面将包含一些Javascript,这些Javascript将表数据作为一个JSON数据块发送到您的服务器。然后,服务器会将表数据保存到文件中或执行任何需要执行的操作。在尝试使用AJAX之前,您确实需要很好地掌握信息流的基本结构。