0

検証には以下のスクリプトを使用しています。このスクリプトを変換して、一度に1つずつではなく、一度にすべてのエラーを表示する方法があるかどうか知りたいですか?また、ヘッダーインジェクションを防ぐために他にできることはありますか?

ありがとう。

<?php

session_start();

/* Check all form inputs */
$fname   = check_input($_POST['fname'], "Friend's Name cannot be empty.");
$femail  = check_input($_POST['femail'], "Friend's email cannot be empty.");
$yname   = check_input($_POST['yname'], "Your Name cannot be empty.");
$yemail  = check_input($_POST['yemail'], "Your email cannot be empty.");
$subject  = check_input($_POST['subject'], "Subject cannot be empty.");
$comments  = check_input($_POST['comments'], "Comments cannot be empty.");

/*  alphabet only */
if(!preg_match("/^([A-Za-z\s\-]{2,45})$/i", $fname))
{ 
show_error("Friend's name is not valid.");
}

/* If e-mail is not valid show error message */
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $femail))
{
show_error("Your friend's email address is not valid.");
}

if(!preg_match("/^([A-Za-z\s\-]{2,45})$/i", $yname))
{ 
show_error("Your name is not valid.");
}

/* If e-mail is not valid show error message */
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $yemail))
{
show_error("Your email address is not valid.");
}

htmlentities ($message, ENT_QUOTES);


function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlentities($data);
if ($problem && strlen($data) == 0)
{
    show_error($problem);
}
return $data;
}

function show_error($myError)
{
?>
4

1 に答える 1

2

私がよく行うことは、$errors配列を使用することです。したがって、すべてのチェックの前に空の配列を定義し、次にshow_errorの各チェック内で、その文字列をエラー配列に追加します。

$errors[] = "Friend's name is not valid.";

次に、最後に、エラー配列が空かどうかを確認します。もしそうなら、何も失敗しませんでした。それ以外の場合は、必要に応じて表示できるすべてのエラーの配列が作成されます。

于 2013-03-03T22:39:34.550 に答える