Я не могу сохранить содержимое таблицы в формате HTML в текстовый файл.Использование CGI и PERL - PullRequest
0 голосов
/ 19 мая 2011

Привет, друзья! Я довольно новичок в 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 () выглядит следующим образомполучите количество строк, чтобы, когда я приступил к сохранению, я мог сохранить содержимое внутри каждого текстового поля из каждой ячейки, выполнив несколько циклов.

Есть идеи, что я здесь делаю неправильно?Я имею в виду, помимо множества элементарных вещей, я думаю.

Ответы [ 3 ]

3 голосов
/ 19 мая 2011

Клиентские модификации HTML-документа не автоматически отражаются через CGI в состояние серверной программы. Вам нужен дополнительный механизм, например AJAX.

2 голосов
/ 20 мая 2011

Возможно, вы слишком усложняете свой вопрос, что-то вроде этого позволит пользователю ввести список значений в форму, а затем сохранить эти значения в файле данных на сервере.

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();
}
2 голосов
/ 19 мая 2011

Вам нужно прочитать хорошо написанное руководство по Perl и CGI в течение некоторого времени после 1998 года.

Я рекомендую Курс CGI Овидия . Это почтенная классика, но она очень хорошо написана и не поощряет плохие практики.

У вас есть хотя бы одно место, где я могу запускать произвольные команды, используя экранированные символы в моих аргументах CGI. Вот почему такие практики, как порча пользовательских данных и команды открытия трех аргументов, являются стандартными и применяются уже много лет.

Общий совет:

  1. Убедитесь, что вы используете strict и warnings.
  2. Используйте 3 аргумента open с лексическими дескрипторами или просто используйте IO :: File. open my $fh, '>>', $pathtofile or die "Ouch $!";
  3. Вам не нужно использовать модуль CGI с Perl для выполнения 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 и передал его обратно. Мне нравится избегать побочных эффектов, таких как печать, тесно сгруппированных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...