中途半端に機能している単純なphp検証フォームがあります。フィールドを空のままにして[送信]をクリックすると、正しいエラーメッセージが表示されます。問題は正規表現にあります。たとえば、通貨フィールドが有効でない場合、正しいエラーメッセージは表示されません。[送信]をクリックすると、ページが再読み込みされ、テキストボックス内のすべての値が消去されます。どうして正しいエラーメッセージが表示されないのですか?
HTMLフォーム
<form action="" method="post" id="form">
<label for="tile">Title: <em>*</em></label>
<input type="text" name="title" id="title" value="<?php echo $form['title']; ?>"> <?php echo $error['title'] ?>
<label for="currency">Currency: <em>*</em></label>
<input type="text" name="currency" id="currency" value="<?php echo $form['currency']; ?>"> <?php echo $error['currency'] ?>
<input type="submit" name="submit" id="submit">
</form>
PHPバリデーター
//variables
$error_open = "<label class='error'>";
$error_close = "</label>";
$valid_form = TRUE;
$redirect = "success.php";
$form_elements = array('title', 'currency');
$required = array('title', 'currency');
foreach ($required as $require)
{
$error[$require] = '';
}
if (isset($_POST['submit']))
{
//process form
//get form data
foreach ($form_elements as $element)
{
$form[$element] = htmlspecialchars($_POST[$element]);
}
//check form elements
//check required fields
if ($form['title'] == '')
{
$error['title'] = $error_open . "* This field is required" . $error_close;
$valid_form = FALSE;
}
if ($form['currency'] == '')
{
$error['currency'] = $error_open . "* This field is required" . $error_close;
$valid_form = FALSE;
}
//check formatting
if ($error['title'] == '' && !preg_match('/^([A-Za-z0-9_-]+)/', $form['title']))
{
$error['title'] = $error_open . "* Enter a valid descriptive title" . $error_close;
$valid_form = FALSE;
}
if ($error['currency'] == '' && !preg_match('/^\s*[+-]?(\d*\.\d\d)\s*$/', $form['currency']))
{
$error['currency'] = $error_open . " Enter a valid decimal number <br> * Do not include Dollar($) sign <br> * Example: (1.00)" . $error_close;
$valid_form = FALSE;
}
//check for bad data
if (contains_bad_str($form['title']) ||
contains_bad_str($form['currency']))
{
$valid_form = FALSE;
}
if (contains_bad_str($form['title']) ||
contains_bad_str($form['currency']))
{
$valid_form = FALSE;
}
//check if form is valid
if ($valid_form)
{
//redirect
header("Location: " . $redirect);
}
else
{
include('form.php');
}
}