Php PDO中的preg_替换

Php PDO中的preg_替换,php,pdo,Php,Pdo,我使用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&

我使用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=$\u POST['name'];
if(isset($name))$name=stripslashes(strip_标记($name));
$name=preg_replace('/[^0-9]/',''.$name);
如果(isset($名称)){
如果(!preg_match('/^[0-9]+$/',$name)){
回显“
无效数据”; }否则{ $stmt=$db->prepare(“插入类别(post_主题)值(:name)”); $stmt->bindValue(':name',$name,PDO::PARAM_STR); $stmt->execute(); } }

但是,当页面第一次加载时,即使未设置$name,也会显示无效数据。如何使错误消息仅在值中包含无效字符时显示?

您需要检查是否确实发生了POST。现在,您的代码无条件运行:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    .... do your stuff here ...
}

对于“1”这件事,您需要为
if(isset($name))
设置一个大括号,就像
if(isset($name)){
preg_-replace与PDO无关。一个过多的issetsss
preg_-replace('/[^0-9]/',''$name)
,从这一点开始,
$name
被设置为空字符串。为什么有多个
if
,而不仅仅是地块周围的一个?