フッタ内にフォームがあります。ローカルホストで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)
は、バックスラッシュを削除していません。を通過した後に&
は&
と表示されます。
私もそれが何を取得しないだろう、まだこの
function test_input($data) {
return $data }
のように見えたそしてそうすることをtest_input($data)
内のすべてのものをコメントしました。なぜどんなアイデア?また、なぜ関数はtest_input($data)
で定義されているのではなく、スクリプトで後で定義されています(私の変数を定義する前にそれを入れようとしてもうまくいきません)。前もって感謝します。
あなたはタイプミスがあります: 'empty($ POST ['name'])'は空でなければなりません($ _ POST ['name']) ' –
_"明らかにPHP組み込み関数はやっていません彼らが何をやろうとしているのですか? " - 私は彼らがいると約束することができます。もしそうでなければ、それは大きなもの(よく知られている)のようなものでしょう。あなたの最後のコードスニペットでは、(未定義の) '$ data'変数を変更していますが、' $ name'変数をエコーし続けます。それらは無関係の2つの変数です。 –
ありがとう@MagnusEriksson、それは修正されています。私は質問し忘れた。投稿後にエラーが「」にある理由は何ですか? – RaulS