Создание Combobox в HTML - PullRequest
       12

Создание Combobox в HTML

0 голосов
/ 09 сентября 2010

На самом деле у меня есть форма CGI, которая состоит из текстовых полей, и мне нужен комбинированный список, в котором я могу динамически вводить свои собственные данные. Может быть, это кажется очень глупым вопросом, но я новичок в cgi-perl, а также в HTML, так что понятия не имею, что делать. Вот моя форма:

 #!C:\perl\bin\perl.exe

use CGI;
use CGI qw/:standard/;
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
my $q = new CGI;
use DBI;
use CGI qw(:all);
use strict;
use warnings;
print "Content-Type: text/html\n\n";
print $q->header ( );

if ( $q->param("submit") )
{
process_form ( );
}
else
{
display_form ( );
}


sub process_form
{
 if ( validate_form ( ) )
 {
  display_form ( );
  }
  }


 sub validate_form
 {
 my $User_Name = $q->param("User_Name");
 my $User_Password= $q->param("User_Password");
 my $User_Permission = $q->param("User_Permission");
 my $User_Department= join(", ",$q->param("User_Department"));
 my $error_message = "";
 $error_message .= "Please enter your name<br/>" if( !$User_Name );
 $error_message .= "Please enter your Password<br/>" if( ! $User_Password );
 $error_message .= "Please Select a permission<br/>" if( !$User_Permission );
 $error_message .= "Please select atleast 1 department<br/>" if(!$User_Department);

 if ( $error_message )
  {
    display_form ( 
   $error_message,$User_Name,$User_Password,$User_Permission,$User_Department);
    return 0;
  }
 else
 {
 my $dbh = DBI->connect("dbi:SQLite:DEVICE.db","", "",{RaiseError => 1, AutoCommit =>
  1 } );
 my $sql = "SELECT COUNT(UserName) FROM UsersList WHERE UserName='$User_Name'";
 my $sth = $dbh->prepare($sql) or die("\n\nPREPARE ERROR:\n\n$DBI::errstr");
  $sth->execute or die("\n\nQUERY ERROR:\n\n$DBI::errstr");
 my ($n) = $dbh->selectrow_array($sth);
 $sth->finish();
 if ($n > 0) {
 print "Record Already Exists";
 }
  else {
  my $sql = "INSERT INTO UsersList (UserName,Password,Permission,Department) VALUES 
  ('$User_Name ',' $User_Password','$User_Permission','$User_Department')";
   my $sth = $dbh->prepare($sql);
   $sth->execute;
  print "Record Added Successfully";
  $sth->finish();
  $dbh->commit or die $dbh->errstr;
    }
   $dbh->disconnect;
   }
   }

      sub display_form
 {
  my $error_message = shift;
 my $User_Name = shift;
  my $User_Password = shift;
 my $User_Permission= shift;
 my $User_Department= shift;

 my $User_Permission_Add_sel = $User_Permission eq "Add" ? " checked" : "";
 my $User_Permission_Edit_sel =$User_Permission eq "Edit" ? " checked" : "";
 my $User_Permission_Delete_sel =$User_Permission eq "Delete" ? " checked" : "";
 my $User_Permission_View_sel =$User_Permission eq "View" ? " checked" : "";

 my $User_Department_html = "";
 my $dbh = DBI->connect("dbi:SQLite:DEVICE.db","", "",{RaiseError => 1, AutoCommit =>
  1 } );
 my $sql = "select DepartmentName from Departments order by DepartmentName";
  my $sth = $dbh->prepare($sql);
 $sth->execute() ;

 while (my  $User_Department_option= $sth->fetchrow_array)
 {
   $User_Department_html.= "<option value=\"$User_Department_option\"";
   $User_Department_html.= " selected" if ( $User_Department_option eq
    $User_Department );
   $User_Department_html.= ">$User_Department_option</option>";
  }
  $sth->finish();
  $dbh->commit or die $dbh->errstr;
  print <<END_HTML;
  <html>
 <head><title>Form Validation</title></head>
 <body>

 <form action="AddUser.cgi" method="post">
 <input type="hidden" name="submit" value="Submit">

 <p>$error_message</p>


 <TABLE BORDER="1" align="center">
  <TR>
 <TD>Name</TD>
 <TD> <input type="text" name="User_Name" value="$User_Name"></TD>
 </TR>

  <TR>
<TD>Password</TD>
 <TD colspan="2"><input type="password" name="User_Password" value="$User_Password" 
   size="20" maxlength="15" /></TD>

  </TR>
  <TR>
 <TD>Role</TD>
 <TD>"HERE I NEED A COMBOBOX"</TD>
  </TR>

<TR>
 <TD>Permission</TD>
  <TD><input type="radio" name="User_Permission" 
   value="Add"$User_Permission_Add_sel>Add<input type="radio" name="User_Permission"
   value="Edit"$User_Permission_Edit_sel>Edit<input type="radio" 
   name="User_Permission" value="Delete"$User_Permission_Delete_sel>Delete<input
   type="radio" name="User_Permission" value="View"$User_Permission_View_sel>View</TD>
</TR>

<TR>
<TD>Department</TD>
<TD colspan="2"> <select name="User_Department" MULTIPLE
  SIZE=4>$User_Department_html</select></TD>

</TR>
</TR>
<TR>
<TD align="center" colspan="2">
<input type="submit" name="submit" value="ADD">
</TD>
 </TR>
 </TABLE
  </form>

   </body></html>
   END_HTML

 }

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

То, что вы ищете здесь, сделано не на стороне Perl, а на стороне HTML + Javascript. Как отмечали другие, в HTML нет встроенного элемента формы со списком. Итак, вы застряли с Javascript.

Лично мне нравится использовать JQuery при работе с Javascript. Это библиотека Javascript, которая значительно упрощает управление элементами веб-страниц.

В зависимости от вашего вопроса, вы захотите взглянуть на http://jqueryui.com/demos/autocomplete/ (справа приведена демоверсия комбинированного списка, если вам действительно нужен комбобокс вместо текстового поля автозаполнения в стиле Google) .

Не относится к комбинированному списку, но вы также можете взглянуть на Template :: Toolkit - систему шаблонов для Perl (и других), которая позволит вам убрать HTML из ваших сценариев perl. Поверьте мне, встраивание HTML-кода в CGI-скрипты для чего-то, что выходит за рамки простого использования, скоро превратится в кошмар.

0 голосов
/ 09 сентября 2010

Вместо "HERE I NEED A COMBOBOX" вы должны написать:

<select name='User_Department' id='User_Department'>
$User_Department_html
</select>

Однако вы получаете параметры в пределах sub display_form, но вы никогда не передавали их.

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