2017-08-27 123 views
1

我是新来编程,并试图做一个简单的形式来测试一下。问题是,当我点击发送按钮,它只显示文本,并没有显示数据...PHP表格:答案没有显示

这里是在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''。 它通过支持PHP的000webhost的文件管理器托管。

如果有人能帮助,我会感激,因为我很无能。

+0

很难说,第一个猜测将是目标文件命名为小写,但在您的窗体中是大写 – James

+0

没有我检查它,它是大写,所以这不是问题 – Hayclair

+0

阅读XSS和如何防止它之前你把这个活下去。 –

回答

2

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

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

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

你不直接看到它在页面上的原因是因为浏览器呈现为HTML标签

+0

就是这样!谢谢:D – Hayclair

0

1)如果您要检查PHP是在本地服务器或Live服务器工作或没有那么在PHP中添加此代码

<?php phpinfo();?> 

如果PHP是工作,所以此功能生效。

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

0

(因为开口<>周围的PHP语句包裹的)而不是使用的HTML文件和一个PHP文件,可以将整个代码放在一个文件中,并显示输入的数据或错误的表单。该代码使用这里的文档来显示结果。关键件从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将把FORM.PHP识别为一个PHP文件,每个讨论here

此外,出于某种原因,只有在删除指定UTF-8的元标记并使用ANSI编码保存文件后,“PASSÛR”的外文字才在Google Chrome中正确显示。

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