Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 13

Temat: Perl-echo.pl-smthg wrong?

  1. #1

    Question Perl-echo.pl-smthg wrong?

    Witam,
    jestem początkujący jeśli chodzi o perl . Mam pytanie:
    Mam sobie stronke z formularzem i chcę aby po potwierdzeniu np.rejestracji
    stronka przetworzyła zebrane dane z formularza i przedstawiła je na nowej stronie ale ona tworzy strone bez żadnych danych nawet typu print "<p>Witam"; . Co do skryptu jestem pewien jest to raczej popularny skrypt.
    Keidy wykonuje potwierdzenie poprzez <input type="submit">
    Przeglądarks ładuje opcje jak przy downloadzie czy zapisac lub czym otworzyc (ścieżka na początku skryptu się zgadza) więc ręcznie wybieram aby wykonać poprzez perl.exe ale nic niestetypozostaje na tej samej stronie lub błąd że unable do wykonania skryptu CGI.
    Moje pytanie to czy stronka musi znajdować się na serwerze czy wystarczy że mam np. index.html i echo.pl w jednym folderze. Czy kompilator perl.exe również musi znajdować sie w tym folderze. Próbowałem wszystkiego łącznie z umieszczeniem wszystkich tych elementów na serwerze na swoim kompie bez neta (127.0.0.1) i nic. Proszę o pomoc i z góry dziękuję.

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    1. Kazdy CGI czy to w perlu czy nie musi byc serwowany przez serwer www a nie z katalogu. Jesli wiec masz index.html i echo.pl musisz je wrzucic na serwer.
    2. Serwer musi byc skonfigurowany do obslugi CGI oraz wiedziec, ze pliki .pl to tez CGI. Zazwyczaj jako cgi obsluguje tylko .cgi
    3. Skrypt CGI zanim zwroci cokolwiek do klienta musi wyslac naglowek HTTP opisujacy co zawiera zwracany ciag znakow. Dla generowania stron z poziomu CGI przed odeslaniem czegokolwiek do przegladarki (nawet komunikatu o bledzie) trzeba dac:

    Kod:
    print "Content-type: text/html\n\n";
    ... inaczej za kazdym razem dostaniesz blad 500 a w logu bedzie informacja o brakujacych naglowkach.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3

    Lightbulb

    Dzięki za szybką odpowiedź,
    co do punktów 1 i 3 jestem takie próby podjąłem, ale najwyraźniej mam źle skonfigurowany serwer. W takim razie idę to sprawdzić.
    YOU SAVE THE DAY

  4. #4

    Question dalej nic ale ciut lepiej

    No więc w konfiguracji serwera(Xitami) ustawiłem:

    1. CGI aliases dla .pl E:\...(ścieżka do perl.exe)
    2. Pass HTML/form fields oba na tak i domyslnie było:
    using prefix HTTP_/FORM_

    Przeczytałem pól help'a ale nic z tego, następujący błąd mnie nawiedza:
    Bad Request probably tried to post a non-executable URL.

    Oczywiście wszystko znajduje się na serwerze :
    (index.html;folder perl.exe; oraz echo.pl)

  5. #5
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Ustaw w systemie aby pliki .pl byly odpalane z uzyciem perl.exe, wtedy jak w serwerze zezwolisz na uruchamianie CGI i okreslisz ze .pl to tez CGI to powinno dzialac. Nie uzywam xitami, wiec nie pomoge - sorry.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  6. #6

    Question Udało się !!! hihi next problem

    Yeppa udało się serwer generuje nową stronę z head'em, tytułem i wszystko cacy, tylko już tu pojawił się następny problem : mianowicie,
    nowa strona nie zawiera żadnych danych z formularza co najwyżej = z polecenia print "$_=$dane_uzytkownika{$_}\n";, jak już wspominałem co do kodu jestem prawie pewien że się zgadza pochodzi z kursu i na necie też jest często pokazywany jako przykład. No nic pozostaje mi tylko dalej szukać... chociaż jakaś wskazówka od eksperta też nikomu nie zawadzi.
    pozdrawiam.

  7. #7
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Pokaz kod to powiem Ci co nie tak
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  8. #8

    Post Kod

    Oto kod jakiego używam:

    #!/cgi-bin/perl/bin/perl
    %dane_uzytkownika=&wczytaj_dane();
    print "Content-type: text/html\n\n";
    print "<HTML>\n<HEAD>\n";
    print "<TITLE>Dane po stronie serwera</TITLE>\n";
    print "</HEAD>\n<BODY>\n";
    foreach (keys %dane_uzytkownika) {
    print "$_=$dane_uzytkownika{$_}\n";
    }
    print "</BODY>\n</HTML>\n";

    sub wczytaj_dane{
    local(%dane,$dane,$para_pw,@pary_pole_wartosc,$pol e,$wartosc);

    if($ENV{"REQUEST_METHOD"}eq "post"){
    read(STDIN,$dane,$ENV{"CONTENT_LENGTH"});
    }
    else{
    $dane=$ENV{"QUERY_STRING"};
    }
    $dane=~s/\+//g;
    @pary_pole_wartosc=split(/&/,$dane);
    foreach $para_pw(@pary_pole_wartosc){
    ($pole,$wartosc)=split(/=/,$para_pw);
    $pole=~s/%(..)/pack("C",hex($1))/ge;
    if(defined($dane{$pole})){
    $dane{$pole}.=";".$wartosc;
    }
    else{
    $dane{$pole}=$wartosc;
    }
    }
    return %dane;
    }

    a na www:
    ...
    <form action="http://127.0.0.1/cgi-bin/echo.pl" method="post">
    ...
    <input type="submit" name="akcja" value="Zatwierdzam rezerwacje">
    </form>
    ...

  9. #9
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Kod jest na pierwszy rzut oka OK, tylko mam pytanie dlaczego nie uzywasz modulu CGI tylko sam maglujesz parametry post/get.Ja wiem ze modul CGI jest ciezki i dlugo sie laduje, dlatego do czesto wysylanych formularzy warto miec skrypt dzialajacy w postaci FastCGI aby siedzial w pamieci i oszczedzasz wtedy mase czasu...

    Kod:
    use CGI;
    my $cgi=CGI->new();
    ...
    my %dane_uzytkownika = &wczytaj_dane;
    print "Content-type: text/html\n\n";
    print "<HTML>\n<HEAD>\n";
    print "<TITLE>Dane po stronie serwera</TITLE>\n";
    print "</HEAD>\n<BODY>\n";
    foreach (keys %dane_uzytkownika) {
    print "$_ = $dane_uzytkownika{$_}<BR>";
    }
    print "</BODY>\n</HTML>\n";
    
    sub wczytaj_dane {
      local %dane;
      $dane{wiek} = $cgi->param('wiek');
      $dane{miasto} = $cgi->param('miasto');
      ...
      return %dane;
    }
    Jesli nie masz konkretnego powodu aby nie uzywac modulu CGI to proponuje sobie uproscic zycie. W CGI czytasz kazdy parametr tak samo czy to POST czy GET. Jesli koniecznie potrzebujesz to poszukam w moim archiwum dzialajacego kodu do recznego czytania POST/GET ale nie wiem czy jest sens, tym bardziej ze Twoj kod wyglada OK ale go nie uruchamialem... pakuje sie wlasnie do pracy bede za 45 minut...
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  10. #10

    Domyślnie

    No więc powiem tak,
    dopiero się uczę i strasznie mnie irytuje jeżeli mi coś nie działa i tego nie rozumiem. Chcem chociaż zrozumieć czemu to może nie działać, a o fastCGI jeszcze za dużo niewiem. Byłbym dlatego wdzięczny za informacje o których wspominałeś.
    Gdzie pracujesz jeśli wolno spytać?

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. pakiety TCP, UDP, echo, tworzenie i wysyłanie
    By gogulas in forum TCP/IP/Analiza/Badanie
    Odpowiedzi: 22
    Autor: 10-06-2007, 10:34
  2. bot irc PERL
    By jaszu in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 1
    Autor: 08-01-2007, 09:40
  3. Tworzenie katalogow.perl.foreach.
    By riczard_nikson in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 1
    Autor: 01-19-2007, 22:54
  4. Perl - zamiast hashu wyświelta mi 00000000000
    By TexPac in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 4
    Autor: 07-25-2006, 18:30
  5. Problem z Petla Perl
    By szpuni in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 11
    Autor: 07-03-2006, 16:23

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj