2

PHP で HTML フォームを検証しています。メッセージフィールドを除いて、私のコードはすべて問題ありません。メッセージ フィールドに何かを入力し、他のフィールドにエラーが表示されている場合でも、送信されます。しかし、他のフィールドに何かを入力し、他のフィールドにエラーがあると、送信されません。これは正しいです。コードの最後の if-else と関係があると思われます。前もって感謝します。

contact.php
<?php

include 'includes/config.php';
$errors = FALSE;
$displayErrors = NULL;

if (isset($_POST['submit'])) {

$first = $_POST['first'];
$last = $_POST['last'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];

//Connect to MYSQL Database server
$connect = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Could not connect to MYSQL Database.");
$result = mysql_select_db(DB_NAME, $connect) or die("Could not connect to MYSQL table.");

//Clean Data to prevent malicous injections
mysql_real_escape_string(strip_tags(stripcslashes(trim($first))));
mysql_real_escape_string(strip_tags(stripcslashes(trim($last))));
mysql_real_escape_string(strip_tags(stripcslashes(trim($email))));
mysql_real_escape_string(strip_tags(stripcslashes(trim($subject))));
mysql_real_escape_string(strip_tags(stripcslashes(trim($message))));

if (empty($first)) {
    $errors = TRUE;
    $displayErrors .= 'First name is invalid.<br/>';
}
if (empty($last)) {
    $errors = TRUE;
    $displayErrors .= 'Last name is invalid.<br/>';
}
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors = TRUE;
    $displayErrors .= 'Email is invalid.<br/>';
}
if (empty($subject)) {
    $errors = TRUE;
    $displayErrors .= 'Subject is invalid.<br/>';
}
if (empty($message)) {
    $errors = TRUE;
    $displayErrors .= 'Message is invalid.<br/>';
} else {
    $errors = FALSE;
          //Database insertion goes here
    echo 'Form submission successful. Thank you ' . $first . '.';

}

}
?>
4

5 に答える 5

2

基本的に、メッセージが空でない場合は と言って$errors=FALSEいますが、他のすべてのフィールドを考慮していません。

エラーを次のような配列に入れることをお勧めします。

$errors['email'] = true;

次に、最後にその配列をforeach

于 2012-05-25T22:55:31.307 に答える
2

に変えてみてelseください

if($errors == FALSE) {//just corrected the equality operator
    //Database insertion goes here
    echo 'Form submission successful. Thank you ' . $first . '.'
}
于 2012-05-25T22:55:39.687 に答える
0

すべての ifs else ifs をそのようにして、最後の else が検証を台無しにしないようにします。

于 2012-05-25T22:56:06.547 に答える
0

これらすべての if の前に、$errors = FALSE を配置する必要があります。次に、コードの最後にある else の代わりに、 if(!$errors){ //データベース挿入をここに } を置くことができます。

于 2012-05-25T22:56:31.087 に答える
-1

まず、新しいコードで関数を使用しないでくださいmysql_*。それらはもはや保守されておらず、公式に非推奨です赤いボックスが見えますか? 代わりに準備済みステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。


ectを使用する代わりに$error=true、エラー配列 (エラー テキストを含む) を作成し、最後にそれが空かどうかを確認する必要があります。また、あなたが持っていると思われる魔法の引用符の問題をクリーンアップし、恐ろしい複数mysql_real_escape_string の、お役に立てば幸いです

contact.php

<?php
include 'includes/config.php';
//Connect to MYSQL Database server
$connect = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Could not connect to MYSQL Database.");
$result = mysql_select_db(DB_NAME, $connect) or die("Could not connect to MYSQL table.");

$errors = array();

if ($_SERVER['REQUEST_METHOD']=='POST') {

    function clean(&$value){
        if (get_magic_quotes_gpc()){
            $value = mysql_real_escape_string(strip_tags(trim($value)));
        }else{
            $value = mysql_real_escape_string(trim($value));
        }
    }
    array_walk($_POST,'clean');


    if (empty($_POST['first'])) {
        $errors['first']= 'First name is invalid.<br/>';
    }else{
        $first = $_POST['first'];
    }

    if (empty($_POST['last'])) {
        $errors['last']= 'Last name is invalid<br/>';
    }else{
        $last = $_POST['last'];
    }

    if (empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $errors['email'] = 'Email is invalid.<br/>';
    }else{
        $email = $_POST['email'];
    }

    if (empty($_POST['subject'])) {
        $errors['subject']= 'Subject is invalid.<br/>';
    }else{
        $subject = $_POST['subject'];
    }

    if (empty($_POST['message'])) {
        $errors['message']= 'Message is invalid.<br/>';
    }else{
        $message = $_POST['messsage'];
    }

    if(empty($errors)){
        //Database insertion goes here
        echo 'Form submission successful. Thank you ' . htmlentities($first) . '.';
    }else{
        //Errors, so your have $errors['name'] ect to output
        //so somthing like:
        echo (isset($errors['name'])?$errors['name']:null);

    }

}
?>

strlen($_POST['first']) > 2また、 ectを使用して、値が最小の特定の長さであるという条件を追加する必要があります。

于 2012-05-25T23:09:34.200 に答える