2017-09-19 1 views
0

フッタ内にフォームがあります。ローカルホストでPHPファイルを実行しています127.0.0.1/form.php、HTML内でPHPコードを使用している場合は明らかですコメントアウトされます。私がPHPドキュメンテーションで理解したところから、私はphpファイルを直接実行する必要があります。PHPとApache2でHTMLフォームを検証できません

コードがW3Schools PHP Form Required tutorialに基づいています。

<!DOCTYPE html> 
<html> 
<body> 
<footer> 
<form method="post" action="form.php"> 
    <input type="text" name="name" placeholder="Name"><span class="form-error">*<?php echo $nameError;?></span><br> 
    <input type="submit" value="Send"> 
</form> 

<?php 

// define variables and set to empty values 
$name = ""; // The variable is defined at the global scope 
$nameError = ""; // The error variable is defined at the global scope 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($POST['name'])) { 
    $nameError = 'Name required'; } 
    else { 
    $name = test_input($_POST["name"]); } 
} 

// The function that will validate the form 
function test_input($data) { 
    $data = trim($data); // The data is stripped of unnecesary characters 
    $data = stripslashes($data); // Backslashes '\' are removed 
    $data = htmlspecialchars($data); // Converts special characters into HTML entities 
    return $data 
} 

?> 

私はテキストを空白のままにした場合、それはスパンでエラーをエコーし​​ませんので、私はそれを

<?php 

// Debugging test_input($data) 
echo $name; 
echo "<br>"; 
echo $nameError; 
echo "<br>"; 

?> 

どんなにをデバッグしようとしました入力時に提出するものは、$nameは常に空白ですが、$nameErrorは常にです。です。 だから私は多分関数は何も返していないことを考えて、私は私が紹介した場合、例えば、& \ a私の出力がもう少しデバッグ

// Debugging without the function 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $name = $_POST['name']; 
    echo $name; 
    echo "<br>"; 
} 
// Debugging after each iteration of whats inside the function (without return) 
$data = trim($data); // The data is stripped of unnecesary characters 
echo $name; 
echo "<br>"; 
$data = stripslashes($data); // Backslashes '\' are removed 
echo $name; 
echo "<br>"; 
$data = htmlspecialchars($data); // Converts special characters into HTML entities 
echo $name; 
echo "<br>"; 

?> 

をした:

*a blank line* 
Name required 
& \ a 
& \ a 
& \ a 
& \ a 

どうやらPHP組み込み関数は、実行することをやっていない。 stripslashes($data)は、バックスラッシュを削除していません。を通過した後に&&amp;と表示されます。

私もそれが何を取得しないだろう、まだこの

function test_input($data) { 
    return $data } 

のように見えたそしてそうすることをtest_input($data)内のすべてのものをコメントしました。なぜどんなアイデア?また、なぜ関数はtest_input($data)で定義されているのではなく、スクリプトで後で定義されています(私の変数を定義する前にそれを入れようとしてもうまくいきません)。前もって感謝します。

+1

あなたはタイプミスがあります: 'empty($ POST ['name'])'は空でなければなりません($ _ POST ['name']) ' –

+2

_"明らかにPHP組み込み関数はやっていません彼らが何をやろうとしているのですか? " - 私は彼らがいると約束することができます。もしそうでなければ、それは大きなもの(よく知られている)のようなものでしょう。あなたの最後のコードスニペットでは、(未定義の) '$ data'変数を変更していますが、' $ name'変数をエコーし​​続けます。それらは無関係の2つの変数です。 –

+0

ありがとう@MagnusEriksson、それは修正されています。私は質問し忘れた。投稿後にエラーが「」にある理由は何ですか? – RaulS

答えて

-1

"あなたがタイプミスがあります:空($ POST [ 'nameが'])($ _ POST [ '名前'])は空である必要があり、" あなたが定義して、変数$ nameErrorを設定しているので@Magnusエリクソン

」あなたがそれをエコーし​​ようとした後に。 @Magnus Eriksson

+0

なぜこれを控除したのですか?コメントに答えられたら、私の質問を閉じる方法はありませんか?私がしたことはメタに対するものでしたか? – RaulS

関連する問題