Как отобразить вывод формы на той же html-странице с ошибкой Конец вывода скрипта перед заголовками: inputcgi.cgi
Я получил ошибку: сервер обнаружил внутреннюю ошибку и не смог выполнить ваш запрос. Сообщение об ошибке: конец сценария перед заголовками: inputcgi.cgi
Пожалуйста, дайте мне знать, что может быть причиной этого? Я попытался добавить и удалить некоторые строки, но ничего не помогает... Файлы Cgi работают правильно, кроме этих..
#!"c:\xampp\perl\bin\perl.exe"
use strict;
use warnings;
use CGI qw(:all);
my $cgi= new CGI;
my $this_url=$cgi->url();
my $cr=$cgi->param("cr");
print $cgi->header();
print"Content-type:text/html\n\n";
print << EndofHTML;
<html>
<head><link rel="stylesheet" type="text/css" href="style.css">
<link href="CalendarControl.css"
rel="stylesheet" type="text/css">
<script src="CalendarControl.js"
language="javascript"></script><script src="inputvalidation.js"></script> </head>
<title>Baseline Automation-Inputs </title>
<body>
<font face = "Calibri">
<div class="divtop"><img src="logo.jpg" </div>
<div class="head"><h2><font color = "white"><b>TI Patch Request </b></font><h2></div>
      
If you have already submitted a request, Click on this button. <a href="google.com" target="_blank">Track Application status </a></td><br><br><br>
<form name="input" method="POST" action="$this_url">
      <i> Fields marked with asterisk <font color="red">*</font> are compulsory</i>
<div class="divtable">
<table cellpadding="3" cellspacing="5">
<tr>
<td></td>
<td>Operating System<font color = red>*</font></td>
<td><input type="radio" name="ostype" id="windows" onclick="checkno()" >Windows</td>
<td><input type="radio" name="ostype" id="linux" onclick="checkyes()">Linux</td>
<td><font color="red"><span id="enteros"></font></span></td>
</tr>
<tr>
</tr>
<tr>
<td></td>
<td>Patch Date and Time<font color = red>*</font></td>
<td><input name="todays_date"
onfocus="showCalendarControl(this);"
type="text" style="width:100px;"></td>
</tr>
<tr>
<td></td>
<td>Server Name <font color = red>*</font></td>
<td><span title="Press the 'ctrl' key to select multiple servers"><select name="serverlist" id="slist" size="4" multiple>
<option value="" disabled selected>Select servers</option>
<option>Server 1</option>
<option>Server 2</option>
<option>Server 3</option>
<option>Server 4</option>
<option>Server 5</option>
</select></span>
</td>
<td><font color="red"><span id="enterlist"></font></span></td>
</tr>
<tr>
</tr>
<tr>
<td></td>
<td>Frequency<font color = red>*</font></td>
<td><input type="radio" name="frequency" id="biannual" onclick="checkcondition()">Biannual</td>
<td rowspan><input type="radio" name= "frequency" id="monthly" onclick="checkcondition()">Monthly</td>
<td><font color="red"><span id="enterfreq"></font></span></td>
</tr>
<tr>
</tr>
<tr>
<td></td>
<td>Snapshot Required?<font color = red>*</font></td>
<td><input type="radio" name="snap" id="yes">Yes</td>
<td><input type="radio" name="snap" id="no">No</td>
</tr>
<tr>
</tr>
<tr>
<td></td>
<td>Baseline Update duration<font color = red>*</font></td>
<td> <input type="radio" name="update" id="one">1 hour</td>
<td> <input type="radio" name="update" id="two">2 hours</td>
<td> <input type="radio" name="update" id="four">4 hours</td>
<td><font color="red"><span id="enterhour"></font></span></td>
</tr>
<tr>
</tr>
<tr>
<td></td>
<td>Change Request </td>
<td><input type="text" name="cr" id="cr" maxlength="6" style="width:100px;"></td>
</tr>
<tr>
</tr>
<tr>
<td></td>
<td>Description</td>
<td colspan="5"> <textarea rows="5" cols="40" placeholder="Enter any comments or queries" align="center"></textarea></td>
</tr>
<tr>
</tr>
<tr>
<td></td>
<td style="word-wrap: break-word;">E-mail (in case you want to <br> receive notifications)</td>
<td><input type ="text" name="email" style="width:150px;" onfocus=" " onBlur="ValidateEmail()"> </td>
<td><font color="red"><span id="invalidemail"></font></span></td>
</tr>
</table></div>
<br> <br>
         
         
         
                  
         
         
         
<input type="button" name="prev" id="prev" value="<<Prev">
<input type="button" name="save" id="save" value="Save" onClick="blank()">
<input type="button" name="next" id="next" value="Next>>">
<br>
<br><br>
<div class="head"><h2><font color = "white"><b>Selected Request</b></font><h2></div><br> <br>
         
         
         
                  
         
         
                  
         
         
                  
         
         
         
<input type = "submit" value ="Submit Request" name="submit">
</form></font>
<p>The cr you entered was '$cr'</p>
</body>
</html>
EndofHTML
#So this was the code.
2 ответа
Если вы ищете perl cgi internal error
вы увидите, что для сценариев CGI обычно требуется заглянуть в журнал ошибок. Это покажет вам фактическую ошибку, которая произошла.
В этом случае у вас есть ошибка в так называемой here-document
, Читайте об этом в perldoc perlop, ищите <<EOF
,
print <<EOF;
The price is $Price.
EOF
print << "EOF"; # same as above
The price is $Price.
EOF
Обратите внимание, что метка здесь-док, EOF
должны прийти сразу после <<
, Вы можете использовать пробел, только если вы явно используете заключенный в кавычки ярлык.
В конце документа маркер должен находиться в начале строки.
В другом ответе у вас есть объяснение того, что не так с вашим кодом. Это для более общего случая.
Как правило, всегда полезно использовать библиотеку. CGI::Carp
(см. здесь), пока вы отлаживаете свои CGI-скрипты. Он будет отправлять любые ошибки на экран браузера вместо того, чтобы записывать их в журнал ошибок.
Это будет работать для ошибок, сообщенных с croak
, confess
, carp
, warn
а также die
, Последние два исходят от использования этих инструкций Perl или от ошибок, исходящих от самого Perl; остальные придут от использования библиотеки Carp
Это то, что большинство библиотек CPAN используют для сообщения о проблемах любым вызывающим сценариям.
Так вы размещаете use CGI::Carp;
под use CGI
и наслаждаться. Если вы хотите только поймать die
, вы можете использовать use CGI::Carp qw(fatalsToBrowser);
,
После того, как вы отладили свой скрипт, не забудьте исключить использование этой библиотеки, так как она дает слишком много информации для потенциального злоумышленника.