/ / ¿Cómo puedo recorrer todos los valores marcados de un grupo de casillas de verificación en un script CGI de Perl? - perl, línea de comandos, casilla de verificación, cgi

¿Cómo puedo recorrer todos los valores marcados de un grupo de casillas de verificación en un script Perl CGI? - perl, línea de comando, casilla de verificación, cgi

Yo tengo un xampp probar la configuración del sistema que se ejecuta en una máquina con Windows.

Tengo una pequeña aplicación de línea de comando que me gustaría activar usando un Secuencia de comandos CGI de Perl.

Tengo un formulario que creé usando Perl. Hay varias casillas de verificación, así como una casilla de entrada donde un usuario puede escribir un mensaje.

Aquí está el código que tengo hasta ahora. No soy un experto en perl de ninguna manera, así que no puede que haya algunas cosas aquí que no tienen sentido o que se utilizan para realizar pruebas

#!"C:xamppperlbinperl.exe"

#print a standard 200 -level HTTP header
print "Content-Type:text/htmlnn";

print "<html><head><title>Broadcast Message</title></head>n";
print "<body>n";

#display form data
#&displayInfo();

print "</body></html>n";

if ($ENV{REQUEST_METHOD} eq "GET")
{
&formDisplay();
exit;
}
#Else process and display back to screen
else
{
#&switches();
&parseform();
&displayInfo();

exit;
}

#This subroutine will display information without using the HTML document

sub formDisplay
{
print qq~

<FORM METHOD="POST" ACTION="/cgi-bin/broadcast.cgi">
<h3>Broadcast Message to Domain</h3>
***PLEASE NOTE*** This will broadcast a message to ALL machines in the Domain</br></br>
<TABLE cellpadding=0 cellspacing=1 border=0>
<TR>
<TD>Select your target by switch:&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp   </br></TD>
<TD></TD>
<TD>Select your target by department:                       </br></TD>
</TR>
<TR>
<TD><input type=CHECKBOX name=517 value="517">   - 517      </br></TD>

<TD></TD>
<TD><input type=CHECKBOX name=ACC value="ACC">   - ACC      </br></TD>
</TR>
<TR>
<TD><input type=CHECKBOX name=testfiletxt value="testfiletxt"> - testefiletxt </br></TD>
</TR>
</TABLE>
</br></br>
Please type the message you wish to broadcast to the Domain: </br>
<input name="message"></br>

<input type=SUBMIT name=Send value="Send">
<input type=RESET name=Reset value="Reset">
</form>
~;
}

#This subroutine will display information received from a form
sub displayInfo {
print "<b>Your Message:</b> </br>  ",         $form{"message"}, "</br>";
$system_message=$form{"message"};
#system "sent.exe /u:testmachine "$system_message"" ;
print qq~
<form>
<input type="button" value="Back" onclick="history.go(-1);return true;">
</form>
~;
# Working loop for form hash
delete $form{"Send"};

foreach(keys %form) {
print "$form{$_} </br>";
}
##############################
$textme=$form{"testfiletxt"};
open( FILE, "< $textme" ) or die "Can"t open $filename : $!";

while( <FILE> ) {
chomp;
print "sent.exe $_ ", $form{"message"} , "</BR>";
}

close FILE;

}


sub parseform
{
#get data from environment variable
read STDIN,$qstring,$ENV{"CONTENT_LENGTH"};
#$qstring = $ENV{"QUERY_STRING"};

#break data up on ampersands, and store in array
@pairs = split(/&/, $qstring);

#start a loop to process form data
foreach (@pairs) {
#split field name and value on "=", store in two scalar variables
($key, $value) = split(/=/);
#translate "+" signs back to spaces
$value =~ tr/+/ /;
#translate special characters
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#store data in hash
$form{$key} = $value;
}
}

Lo que tengo problemas es procesar los cuadros de texto que se han marcado.

Lo que necesito que haga el script es ejecutar la utilidad de línea de comando con los parámetros especificados por el usuario (es decir, las casillas de verificación y el cuadro de entrada).

Cómo creo que esto funcionará es el siguiente:

  1. Tenemos archivos de texto prediseñados que contendrán Nombres de Netbios de computadoras en nuestra red, un nombre de computadorapor línea. Estos archivos representarán conmutadores, cada archivo de conmutador contendrá el nombre Netbios de las computadoras conectadas a él. Con el tiempo, expandiremos esto también en grupos de trabajo.

  2. El usuario irá a esta página de transmisión yseleccione los conmutadores a los que desean transmitir. Por lo tanto, cualquier máquina conectada a un conmutador en particular recibirá este mensaje transmitido. El usuario también proporcionará un mensaje que se transmitirá.

  3. Cuando el usuario hace clic en "Enviar", hay algunas cosas que deben suceder.

    • El archivo que representa el conmutador seleccionado deberá abrirse y el mensaje que el usuario ingresó debe adjuntarse al final de cada nombre de Netbios en la lista. Ejemplo:

    mensaje netbiosName proporcionado por el usuario

    • Luego, una vez que se complete. La utilidad de la línea de comandos debe ejecutarse utilizando los archivos que acabamos de editar en el siguiente formato:

       sent.exe /t:15 /f:$filename
      

    Entonces, si el usuario seleccionó 3 interruptores, el comando debe ejecutarse 3 veces

         sent.exe /t:15 /f:swtich1
    sent.exe /t:15 /f:switch2
    sent.exe /t:15 /f:switch3
    

Debo señalar que el /f"opción le dice al sent.exe comando para usar un archivo que debe formatearse de una manera específica.

He tenido cierto éxito procesando una opción a la vez.

Pero estoy atascado con lo que sucederá cuando el usuario seleccione más de una casilla de verificación.

¿Cómo puedo procesar las casillas de verificación seleccionadas fácilmente usando un bucle?

¿Puedo sacar esto del &parseform subrutina? ¿O hay una forma más sencilla de hacerlo?

Respuestas

4 para la respuesta № 1

Utilizando CGI.pm:

my @checked = $cgi->param("department");

le dará todas las casillas de verificación marcadas con el nombre "departamento". Para hacer esto, necesita limpiar su HTML:

<input type="checkbox" name="department" value="517"
id="department_517"><label for="department_517">517</label>

<input type="checkbox" name="department" value="ACC"
id="department_ACC"><label for="department_ACC">ACC</label>

<input type="checkbox" name="department" value="testfiletxt"
id="department_testfiletxt"><label
for="department_testfiletxt">testfile.txt</label>