PHP表单:答案未显示

时间:2017-08-27 19:50:33

标签: php forms

我是编程新手,并尝试制作一个简单的表单来测试。问题是,当我点击发送按钮时,它只显示文本而不显示数据...

以下是HTML文件中的表单:

<FORM ACTION="FORM.PHP" METHOD="POST">
<P> 
Ton nom: <INPUT TYPE="TEXT" NAME="Tonnom" /> <br />
Espace test: <INPUT TYPE="TEST" NAME="Espacetest" />
</P>

<P>
Est-ce que ce site s'affiche correctement ?
<INPUT TYPE="RADIO" NAME="AFFICHAGE" VALUE="OUI" CHECKED="CHECKED" /> Oui
<INPUT TYPE="RADIO" NAME="AFFICHAGE" VALUE="NON" /> Non 
<INPUT TYPE="RADIO" NAME="AFFICHAGE" VALUE="PAS SÛR" /> Pas sûr 
</P>

<P>
Des commentaires ? <BR />
<TEXTAREA NAME="COMMENTAIRES" ROWS="10" COLS="40"></TEXTAREA>
</P>

<P>
<INPUT TYPE="SUBMIT" VALUE="GO!"></P>
</FORM>

这是链接到它的PHP文件:

<HTML>

<HEAD>
<META CHARSET="UTF-8">
</HEAD>

<BODY>
Ton nom est: <?php echo $_POST['Tonnom']; ?><BR />
Dans l'espace test, tu as écris: <?php echo $_POST['Espacetest']; ?><BR />
<BR />

Est-ce que ce site s'affiche correctement ? <?php echo $_POST['AFFICHAGE']; 
?><BR />
<BR />

Commentaires:<BR />
<?php echo $_POST['COMMENTAIRES']; ?>
</BODY>

</HTML>

当我点击发送按钮时,这是唯一显示的内容:

enter image description here

我仔细检查过,php文件的名字真的是''FORM.PHP''。 它通过000webhost的文件管理器托管,它支持PHP。

如果有人可以提供帮助,我会感激,因为我很无能为力。

3 个答案:

答案 0 :(得分:2)

默认情况下,Apache(以及可能在其他Web服务器上)的文件扩展名区分大小写。

将您的文件名从FORM.PHP更改为form.php(重要的部分是.php)。

通过右键单击页面并选择&#34;查看源&#34;,您可以看到您的FORM.PHP呈现为纯HTML。然后,您应该看到打印出的实际PHP代码。

您没有直接在页面上看到它的原因是因为浏览器将其呈现为HTML标记(因为开放<并且关闭>包裹在PHP语句中)

答案 1 :(得分:0)

1)如果你想在本地服务器或实时服务器上检查php是否正常工作,那么添加此代码

<?php phpinfo();?>

在你的php中,如果php正常工作,那么这个功能就可以了。

2)我认为你会在点击Go按钮后刷新页面。所以不要在浏览器中显示代码。 我在我的本地电脑上检查你的2个代码,所以你的HTML代码和PHP代码完美地工作。 我填写表格并单击转到按钮以显示内容

答案 2 :(得分:0)

可以将整个代码放在一个文件 form.php 中,而不是使用HTML文件和PHP文件,并显示输入的数据或错误的表单。该代码使用此处doc 来显示结果。 OP代码中缺少的关键部分是服务器端验证,我在此示例中包含:

<HTML>
<HEAD>
</HEAD>

<BODY>
<?php
if ( isset($_POST['SUBMITTED']) && $_POST['SUBMITTED'] == 'GO!' ){
  $error = 0;
  $clean['Tonnom'] =  ctype_alnum($_POST['Tonnom'])?  $_POST['Tonnom'] : '';
  if ($clean['Tonnom'] == '') $error++;

  $clean['Espacetest'] = ctype_alnum($_POST['Espacetest'])?  $_POST['Espacetest'] : '';
  if ($clean['Espacetest'] == '') $error++;

  if ( $_POST['AFFICHAGE'] == 'OUI' || $_POST['AFFICHAGE'] == 'NON' || $_POST['AFFICHAGE'] == 'PAS SÛR') {
          // data is what is expected
          $clean['AFFICHAGE'] = $_POST['AFFICHAGE'];
  }
  else
  {
   // somebody messed with this form field, so:
      $clean['AFFICHAGE'] == '';
      $error++;
      // redisplay form and/or provide error message
  }

  $clean['COMMENTAIRES'] = ctype_alnum($_POST['COMMENTAIRES'])?  $_POST['COMMENTAIRES'] : '';
  if ($clean['COMMENTAIRES'] == '') $error++;
    // if any data results in empty string decide about error messages and whether you
    // want to throw an exception 
  if ($error > 0) { 
       header("Location: form.php");
  }

echo <<<"FOOBAR"
Ton nom est: {$clean['Tonnom']}<BR />
Dans l'espace test, tu as écris: {$clean['Espacetest']}<BR />
<BR />

Est-ce que ce site s'affiche correctement ? {$clean['AFFICHAGE']} 
<BR />
<BR />

Commentaires:<BR />
   {$clean['COMMENTAIRES']}
FOOBAR;
exit();   
}
?>

<FORM ACTION="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" METHOD="POST">
<P> 
Ton nom: <INPUT TYPE="TEXT" NAME="Tonnom" /> <br />
Espace test: <INPUT TYPE="TEST" NAME="Espacetest" />
</P>

<P>
Est-ce que ce site s'affiche correctement ?
<INPUT TYPE="RADIO" NAME="AFFICHAGE" VALUE="OUI" CHECKED="CHECKED" /> Oui
<INPUT TYPE="RADIO" NAME="AFFICHAGE" VALUE="NON" /> Non 
<INPUT TYPE="RADIO" NAME="AFFICHAGE" VALUE="PAS SÛR" /> Pas sûr 
</P>

<P>
Des commentaires ? <BR />
<TEXTAREA NAME="COMMENTAIRES" ROWS="10" COLS="40"></TEXTAREA>
</P>

<P>
<INPUT TYPE="SUBMIT" name="SUBMITTED" VALUE="GO!"></P>
</FORM>

</BODY>
</HTML>

将表单的ACTION属性设置为echo htmlentities( $_SERVER['PHP_SELF'] );会将提交的页面重定向到form.php并避免任何PHP_SELF漏洞利用,例如XSS;见here

观察到在没有首先验证的情况下使用提交的数据是不明智的。当然,验证代码可以根据更深入的验证以及修改错误处理来适应一个人的喜好。在您知道使用安全数据之前,每个人都希望得到不使用提交数据的主要想法。

顺便提一下,如果您使用NTFS运行Windows,则文件名不区分大小写,因此该环境中的Apache会根据讨论here将FORM.PHP识别为PHP文件。

此外,由于某些原因,“PASSÛR”的外国字母只在Google Chrome中正确显示,一旦我删除了指定UTF-8的元标记并使用ANSI编码保存了该文件。

最后,我向提交输入提供了“已提交”的名称,以便代码可以知道表单何时提交。