Php 如何修复空$u POST[';name';]的错误

Php 如何修复空$u POST[';name';]的错误,php,Php,我想用php创建一个表单。但在很多小时里,我都遇到了一个错误,错误发生在$\u POST=['name']希望检查是否为空时。 当我检查数据库时,该行是白色的,没有任何内容。 为了检查$_POST是否为空,我打印单词“empty”,以确定它为空,并将打印为“empty”; 我的错误在哪里?它与数据库mysql有关还是仅仅在代码上? 请帮帮我,我感到困惑和无聊。 这是我的全部代码: <!doctype html> <html lang="fa"> <head>

我想用php创建一个表单。但在很多小时里,我都遇到了一个错误,错误发生在$\u POST=['name']希望检查是否为空时。 当我检查数据库时,该行是白色的,没有任何内容。 为了检查$_POST是否为空,我打印单词“empty”,以确定它为空,并将打印为“empty”; 我的错误在哪里?它与数据库mysql有关还是仅仅在代码上? 请帮帮我,我感到困惑和无聊。 这是我的全部代码:

<!doctype html>
<html lang="fa">
<head>
<meta charset="utf-8">
<title>form</title>
<link href="addContact.css" rel="stylesheet"/>
<link href="main.css" rel="stylesheet"/>
<link href="table.css" rel="stylesheet"/>
</head>
<body>

<?php
$name = "";
$nameErr = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
 if (empty($_POST["name"])) {
    echo 'empty';
    $nameErr = "Name is required";
} else {
    echo 'full';
    $name = test_input($_POST["name"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/", $name)) {
        $nameErr = "Only letters and white space allowed";
    }
  }


  $servername = "localhost";
  $username = "abc";
  $password = "abc";
  $dbname = "abc";

  try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, 
  $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO abc (firstname)
    VALUES ('$name')";
    // use exec() because no results are returned
    $conn->exec($sql);
    $last_id = $conn->lastInsertId();
    echo "New record created successfully. Last inserted ID is: " . $last_id;
} catch (PDOException $e) {
    echo $sql . "<br>" . $e->getMessage();
}

$conn = null;

}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

?>


<form method="post" action="<?php echo 
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

形式

问题在于使用
empty()

您可以在变量上使用它,而不是在值上使用它

请看这里

要检查此项,请先将其保存在另一个变量中,然后检查:

$tempVal = $_POST["name"];
if (empty($tempVal))

您可以使用这个简单的示例

<?php
if(isset($_POST['submit'])) 
{ 
    $name = $_POST['name'];
    echo "User Has submitted the form and entered this name : <b> $name </b>";
    echo "<br>You can use the following form again to enter a new name."; 
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <input type="text" name="name"><br>
   <input type="submit" name="submit" value="Submit Form"><br>
</form>


我不太明白,但是如果($\u POST['name']='')尝试执行
?您使用的PHP版本是什么?您的代码似乎没有任何语法错误,但即使
name
为空,它仍会尝试创建数据库记录-我假设这在逻辑上不是您想要做的。在任何情况下,我都会确保您启用了错误检查-将
添加到文件顶部。@cse php版本为5.6.25。还可以吗?请注意,
“插入abc(firstname)值(“$name”)”
易受SQL注入攻击。您使用的是PDO,它允许您使用编写安全的SQL语句。请注意,这是PHP版本123的情况。感谢您的快速响应,但单击submit后我理解if的条件不为true,因为它不会打印“用户已提交表单并输入此名称”。问题出在哪里?@AmirGh-由于表单正在发回同一URL,因此可以完全删除
操作
属性。