2016-11-01 6 views
0

Итак, я работаю над школьным проектом, где меня попросили написать скрипт perl cgi для создания сайта социальной сети.Использование perl CGI.pm через несколько подпрограмм

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

Для, например: Это мой новый код страницы пользователя:

#!/usr/bin/perl -w 
    use CGI qw/:all/; 
    use CGI::Carp qw/fatalsToBrowser warningsToBrowser/; 
    my $cgi = new CGI; 

    sub main() { 
      print page_header(); 

      warningsToBrowser(1); 

      first(); 

      page_trailer(); 
     } 


    sub page_header { 
      return header(-charset => "utf-8"), 
       start_html(-title => 'Matelook',-style => "matelook.css"), 
       body({-background =>"background.jpg"}), 
       div({-class => "matelook_heading"}, "matelook"); 
     } 

    sub page_trailer { 
      my $html = ""; 
      $html .= join("", map("<!-- $_=".param($_)." -->\n", param())) if $debug; 
      $html .= end_html; 
      return $html; 
     } 

    sub new_user { 
        $fullname = param("fullname") || ''; 
        $newun = param("newun") || ''; 
        $newpass = param("newpass") || ''; 
        $email = param("email") || ''; 
        $program = param("program") || ''; 

       if(param("Save")){ 
        $data = "full_name=$fullname \n 
         username=$newun \n 
         password=$newpass \n 
         email=$email \n 
         program=$program \n"; 


         $location = "dataset-medium/$newun"; 
         mkdir $location, 0755; 
         open($f,'>',"$location/user.txt"); 
         print $f $data; 
         print $data,"\n"; 
         print "Data Saved !! "; 

       } 

       else{ 
        print start_form,"\n"; 
         print "Enter Full Name :\n", textfield("fullname"); 
         print "New Username :\n", textfield('newun'),"\n"; 
         print "New Password :\n", textfield('newpass'),"\n"; 
         print "Email:\n",textfield('email'),"\n"; 
         print "Program:\n",textfield('program'),"\n"; 
         print submit({-name =>"Save",-class => "matelook_button"}); 
         print end_form,"\n";  
       } 
      } 

    sub first{ 
      if(param("New User")){ 
       new_user(); 
      } 
      else{ 
       print start_form,"\n"; 
        print submit({-class => "matelook_button_first ",-name => 'New User'}),"\n"; 
       print end_form,"\n"; 
      } 
     } 
    main(); 

если я пытаюсь вызвать ту же подпрограмму с подпрограммой «первой» и нажмите кнопку «Сохранить», он перенаправляет меня к " Первая "страница, через которую я назвал new_user.

Любая помощь будет оценена по достоинству.

Благодаря

+0

Вы ожидаете, что 'param (« Новый пользователь »)' когда-нибудь будет правдой? – xxfelixxx

+0

Как в? Как вы предлагаете мне исправить код? @xxfelixxx –

+0

Просьба предоставить минимальную * runnable * демонстрацию проблемы. – ikegami

ответ

1

Ваша программа имеет следующую структуру:

sub new_user { 
    if (param("Save")){ 
     save(); 
    } else { 
     show_input_form(); 
    } 
} 

if (param("New User")){ 
    new_user(); 
} else { 
    show_menu(); 
} 

Проблема заключается в том, что форма ввода не установлен pararm('New User'), так что вы не до конца в new_user при нажатии Save.


Решение 1:

Добавить скрытый вход в форму ввода с именем New User и значением 1.


Решение 2:

Изменить

if (param("New User")) 

в

if (param("New User") || param('Save')) 

Решение 3:

Измените структуру программы на

if (param("New User")){ 
    show_input_form(); 
} 
elsif (param("Save")){ 
    save(); 
} 
else { 
    show_menu(); 
} 
+0

Работал! Спасибо большое @ikegami –

+0

эй, я запутался в подпрограммах с аргументами. Как это исправить? @ikegami –

+1

@UtkarshAtri: «Я запутался в подпрограммах с аргументами. Как мне исправить это?» Мы не можем ответить на этот вопрос, не читая ваш разум. Возможно, вы могли бы написать новый вопрос, объясняющий вашу путаницу. –

Смежные вопросы