-4

OK、私が達成しようとしているのは、次のような非常に単純なフォーム検証です。

  1. 名前: [必須、最小の長さ: 2、最大の長さ: 255]
  2. メール: [必須、最小長: 3、最大長: 255、有効なメール形式]
  3. 生年月日: [オプション、形式: dd/mm/yyyy]

ただし、送信をクリックすると (フィールドが空であるか入力されている場合)、エコーされたすべてのエラーが空白のページに表示されます。

「名前は 2 文字以上である必要があります名前は必須です電子メールは少なくとも 3 文字である必要があります無効な電子メール電子メールを空のままにすることはできません」

これまでの私のコード:

index.php

<form method="post" action="confirm.php">
Name:<input type="text" name="name" />
email:<input type="text" name="email" />
DOB:<input type="date" name="dob" />
<input type="submit" value="submit" />
</form>

確認.php

<?php

$name = $_POST['$name'];
$email = $_POST['$email'];
$dob = $_POST['$dob'];

$namelen = strlen($email);
$emaillen = strlen($email);
$max = 255;
$minname = 2;
$minemail = 3;

if($namelen<$minname){
    echo"name must be at least 2 characters";
}
elseif($namelen>$max){
    echo"name must be less than 255 characters";
}

if(empty($name)){
    echo"name is required";
}
else{
    continue;
}

if($emaillen<$minemail){
    echo"email must be at least 3 characters";
}
elseif($emaillen>$max){
    echo"email must be less than 255 characters";
}

if(filter_var($email, FILTER_VALIDATE_EMAIL)){
    continue;
}
else{
    echo"invalid email";
}

if(empty($email)){
    echo"email cannot be left empty";
}
else{
    continue;
}

?>

助けていただければ幸いです、ありがとうございます。

4

4 に答える 4

1

コードには次のものがあります。

$name = $_POST['$name'];
$email = $_POST['$email'];
$dob = $_POST['$dob'];

基本的に、未定義のインデックスにアクセスしようとしています。$キー名から余分なものを削除します。

$name = $_POST['name'];
$email = $_POST['email'];
$dob = $_POST['dob'];

次に、さらに下に、次のような条件があります。

if(condition == true) {
    continue;
} else {
    // do something
}

実際には必要ありません。次のように変更できます。

if(!condition) {
    // do something
}

また、エラー メッセージを配列 ( ) にプッシュし、$errorsそれをループしてエラー メッセージを表示することをお勧めします。コードをもう少し整理するのに役立つかもしれません。

変更されたコードは次のようになります。

if(!empty($_POST)) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $dob = $_POST['dob'];

    $namelen = strlen($name);
    $emaillen = strlen($email);
    $max = 255;
    $minname = 2;
    $minemail = 3;

    if($namelen < $minname){
        $errors[] = "name must be at least 2 characters";
    } elseif($namelen > $max){
        $errors[] = "name must be less than 255 characters";
    }

    if($emaillen < $minemail){
        $errors[] = "email must be at least 3 characters";
    } elseif($emaillen > $max){
        $errors[] = "email must be less than 255 characters";
    }

    if(empty($name)){
        $errors[] = "name is required";
    }

    if(empty($email)){
        $errors[] = "email cannot be left empty";
    }

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $errors[] = "invalid email";
    }

    echo "<ul>";
    foreach ($errors as $error) {
        echo "<li>$error</li>";
    }
    echo "</ul>";

}

まだ改善される可能性がありますが、これで始められるはずです。

于 2013-11-05T14:01:43.613 に答える
0

if(!empty($_POST[fieldname])) を確認し、リダイレクトして、フィールドが空であるというアラートをjavascriptで表示します

于 2013-11-05T15:38:24.547 に答える
0
$name = $_POST['$name'];
$email = $_POST['$email'];
$dob = $_POST['$dob'];

それは間違っています、あなたは使わなければなりません

$name = $_POST['name'];
$email = $_POST['email'];
$dob = $_POST['dob'];

また、ラインを変更することもできます

$namelen = strlen($email);

$namelen = strlen($name);
于 2013-11-05T13:59:42.693 に答える