2017-08-27 122 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中正確顯示。

最後,我給了提交輸入名稱「提交」,以便代碼可以知道何時提交表單。