/ / मैं एक पर्ल सीजीआई स्क्रिप्ट में एक चेकबॉक्स समूह के सभी चेक किए गए मूल्यों के माध्यम से कैसे पुनरावृति कर सकता हूं? - पर्ल, कमांड-लाइन, चेकबॉक्स, सीजीआई

मैं एक पर्ल सीजीआई स्क्रिप्ट में एक चेकबॉक्स समूह के सभी चेक किए गए मूल्यों के माध्यम से कैसे पुनरावृति कर सकता हूं? - पर्ल, कमांड-लाइन, चेकबॉक्स, सीजीआई

मेरे पास है एक XAMPP परीक्षण सिस्टम सेटअप विंडोज मशीन पर चल रहा है।

मेरे पास एक छोटी कमांड लाइन एप्लिकेशन है जिसका उपयोग करके मैं ट्रिगर करना चाहूंगा पर्ल सीजीआई स्क्रिप्ट।

मेरे पास एक फॉर्म है जिसे मैंने पर्ल का उपयोग करके बनाया है। एक चेक बॉक्स के साथ-साथ एक इनपुट बॉक्स भी होता है जहाँ उपयोगकर्ता एक संदेश लिख सकता है।

यहाँ कोड है जो मेरे पास अभी तक है। मैं किसी भी तरह से पर्ल में विशेषज्ञ नहीं हूं, इसलिए वहां यहाँ कुछ चीजें हो सकती हैं जो "मतलब नहीं बनाती हैं, या परीक्षण के उद्देश्य से हैं

#!"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;
}
}

मेरे पास जो समस्याएँ हैं, वे उन पाठ बॉक्सों को संसाधित कर रहे हैं जिन्हें जाँच लिया गया है।

मुझे जो स्क्रिप्ट करने की आवश्यकता है वह कमांड लाइन उपयोगिता को उपयोगकर्ता द्वारा निर्दिष्ट पैरामीटर (यानी चेक बॉक्स और इनपुट बॉक्स) के साथ चलाने के लिए है।

मैं सोच रहा हूं कि यह कैसे काम करेगा:

  1. हमारे पास पहले से निर्मित पाठ फाइलें हैं जिनमें शामिल होंगे नेटबायोस के नाम हमारे नेटवर्क में कंप्यूटर का, एक कंप्यूटर का नामप्रति पंक्ति। ये फाइलें स्विचेस का प्रतिनिधित्व करेंगी, प्रत्येक स्विच फाइल में कंप्यूटर से जुड़े नेटबायोस का नाम होगा। हम आखिरकार इसका विस्तार समूहों के रूप में भी कर रहे हैं।

  2. उपयोगकर्ता इस प्रसारण पृष्ठ पर जाएगा औरउन स्विच का चयन करें जिन्हें वे प्रसारित करना चाहते हैं। तो, किसी विशेष स्विच से जुड़ी किसी भी मशीन को यह प्रसारित संदेश प्राप्त होगा। उपयोगकर्ता प्रसारण के लिए एक संदेश भी प्रदान करेगा।

  3. जब उपयोगकर्ता "सबमिट" पर क्लिक करता है, तो कुछ चीजें होती हैं जो होने की आवश्यकता होती हैं।

    • चयनित स्विच का प्रतिनिधित्व करने वाली फ़ाइल को खोलना होगा और उपयोगकर्ता को दर्ज किए गए संदेश को सूची में प्रत्येक नेटबायोस नाम के अंत में संलग्न करना होगा। उदाहरण:

    netbiosName उपयोगकर्ता द्वारा प्रदान किया गया संदेश

    • फिर, एक बार जो पूरा हो गया है। कमांड लाइन उपयोगिता को उन फ़ाइलों का उपयोग करके चलाने की आवश्यकता है जो हमने निम्नलिखित प्रारूप में संपादित किए हैं:

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

    इसलिए यदि उपयोगकर्ता 3 चयनित करता है तो कमांड को 3 बार चलाया जाना चाहिए

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

मुझे कहना चाहिए कि /f"विकल्प बताता है sent.exe एक फ़ाइल का उपयोग करने के लिए कमांड जिसे एक विशिष्ट तरीके से स्वरूपित करने की आवश्यकता है।

मुझे एक समय में एक विकल्प को संसाधित करने के साथ कुछ सफलता मिली है।

लेकिन मैं इस बात पर अड़ा हुआ हूं कि जब उपयोगकर्ता अधिक चुनता है तो एक चेक बॉक्स क्या होगा।

मैं एक लूप का उपयोग करके आसानी से चयनित चेक बॉक्स कैसे संसाधित कर सकता हूं?

क्या मैं इससे खींच सकता हूं &parseform उप-दिनचर्या? या वहाँ यह करने का एक आसान तरीका है?

उत्तर:

उत्तर № 1 के लिए 4

का उपयोग करते हुए CGI.pm:

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

आपको "विभाग" नाम के साथ सभी चेक किए गए चेकबॉक्स देंगे। ऐसा करने के लिए, आपको अपना 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>