入力されたすべてのデータが数値であることを確認するために preg_replace 関数を使用しています。
次のようになります。
$name = $_POST['name'];
if( isset( $name ) ) $name = stripslashes( strip_tags( $name ) );
$name = preg_replace('/[^0-9]/', '', $name);
if (isset($name)){
if(!preg_match('/^[0-9]+$/', $name)){
echo '<br>Invalid data';
} else {
$stmt = $db->prepare("INSERT INTO categories(post_topic) VALUES(:name)");
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
}
}
しかし、ページが最初にロードされると、$name が設定されていなくても、無効なデータが既に表示されます。値に無効な文字が含まれている場合にのみエラーメッセージが表示されるようにするにはどうすればよいですか?