尝试使用PHP通过表单创建数据库条目
我只是不知道我错在哪里。尝试使用多个表,但未成功尝试使用PHP通过表单创建数据库条目,php,html,mysql,Php,Html,Mysql,我只是不知道我错在哪里。尝试使用多个表,但未成功 <?php if(isset($_POST['submit'])){ // create sql $catName = $_POST['category_name']; $sql = "INSERT INTO Categories(c_name) VALUES($catName)"; } if($catName->query($sql) === TRUE) {
<?php
if(isset($_POST['submit'])){
// create sql
$catName = $_POST['category_name'];
$sql = "INSERT INTO Categories(c_name) VALUES($catName)";
}
if($catName->query($sql) === TRUE) {
echo "success";
} else {
echo "error" . $sql . "<br>" . $catName->error;
}
?>
<?php include ('templates/footer.php')?>
我没有犯错,也没有成功。它只是变为空白,表中没有条目。问题
您的代码有一些问题
mysqli|pdo
方法(即,不是mysqli|pdo
)- 此外,在本例中,变量似乎是字符串,因此即使要在查询中直接使用它,也需要在引号中
if
语句意味着即使此代码以其他方式工作,有时也会使用非SQL语句运行查询- 当前,由于存在未捕获的错误,您将获得一个空白页。如果启用错误报告,则会收到一条消息,说明问题的原因
$catName
,可能会导致日志文件中出现注意
消息- 在开发环境中显示和登录(&L)
- 隐藏并登录生产
// Enable error reporting in PHP; making errors output to page
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
// Database credentials:
// You need to change these to your DB / DB User
$db_host = '127.0.0.1';
$db_user = 'db_username';
$db_pass = 'db_password';
$db_name = 'db_name';
// Database connection
// - Setting error reporting mode in options
$pdo = new \pdo(
"mysql:host={$db_host};dbname={$db_name}",
$db_user,
$db_pass,
[
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => FALSE
]
);
// Initialise the variable from the form
// ?? null => if the variable doesn't exist then the value will be null
$catName = $_POST["category_name"] ?? null;
// Check to see if the variable exists (and isn't false)
// Warning:
// If false equivalent values can be entered then you should
// use a different condition (e.g. `!empty($catName)` )
if ($catName) {
// The SQL statement with ? as a placeholder for the
// variable we want to insert
$sql = "INSERT INTO categories (c_name) VALUES (?)";
$query = $pdo->prepare($sql); // Prepare the query
$query->execute([$catName]); // Run the query; passing in the variable to bind
// Ternary logic to check if "rows were inserted" and echo an appropriate
// "success" or "failure" message
echo $query->rowCount() ?
"Success" :
"Error, something went wrong!";
}
代码,无注释
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
$db_host = '127.0.0.1';
$db_user = 'db_username';
$db_pass = 'db_password';
$db_name = 'db_name';
$pdo = new \pdo(
"mysql:host={$db_host};dbname={$db_name}",
$db_user,
$db_pass,
[
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => FALSE
]
);
$catName = $_POST["category_name"] ?? null;
if ($catName) {
$sql = "INSERT INTO categories (c_name) VALUES (?)";
$query = $pdo->prepare($sql);
$query->execute([$catName]);
echo $query->rowCount() ?
"Success" :
"Error, something went wrong!";
}
我的主要问题不是PHP,尽管上面的一些答案对改进我的代码非常有帮助 原来问题是在形式上。在重做整件事之后,它突然起了作用
谢谢您的回答。看看如何获取。仅仅因为您没有看到错误,并不意味着没有错误。尽管我可以肯定地告诉您,在字符串上运行查询肯定会引发错误:
$catName->query($sql)
。您已初始化$catName=$\u POST['category\u name']代码>,表示它是表单中的字符串。您在哪里连接到数据库?另外,您的整个逻辑应该在if(isset($\u POST['submit'])
中,而不仅仅是变量初始化。太好了,这解决了我的问题!非常感谢。