PHP;原产地保护组织; MySQL; INSERT 查询不接受输入
PHP; PDO; MySQL; INSERT query not taking input
我正在做一个个人项目,试图制作 PDO 和 MySQL 查询。几个星期以来,我一直在与此作斗争。我进行了广泛的研究,并在其他论坛上找到了许多很好的教程和问题。但是,我对这个问题感到非常困惑。我目前的代码只接受一个值传递给数据库。但是我总是收到未定义的变量通知。当我为使用的变量初始化一个空变量时,它只是将一个空记录添加到数据库中。我该怎么办。我已经尽可能推迟要求了。
addpub.php
<?php
require_once("dbconn.php");
try {
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname; charset=utf8",$dbuser,$dbpass,$dbo);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
Comics DB > Add Publisher
</title>
<link rel="stylesheet" type="text/css" href="comicsdb.css">
</head>
<body>
<div class="main">
<menu>
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="add.php">Add</a></li>
<li><a href="edit.php">Edit</a></li>
<li><a href="delete.php">Delete</a></li>
<li><a href="list.php">List</a></li>
<li><a href="search.php">Search</a></li>
</ul>
</menu>
<div class="pub_menu">
<form action="addpub.php" method="POST" enctype="text/plain" id="form">
<p>
Publisher: <input type="text" name="name" id="name"> <input type="submit" value="Add Publisher" name="addPubBtn" id="addPubBtn">
</p>
</form>
<?php
$q = $conn->prepare("INSERT INTO publisher (name) VALUES (:name)");
$q->bindValue(':name', $name, PDO::PARAM_STR);
if(isset($name))
$q->execute();
else
echo "FAIL!";
?>
</div>
</body>
</html>
dbconn.php
<?php
$dbhost = '127.0.0.1';
$dbname = 'comicsdb';
$dbuser = '****';
$dbpass = '****';
$dbo = array(
// important! use actual prepared statements (default: emulate prepared statements)
PDO::ATTR_EMULATE_PREPARES => false
// throw exceptions in case of errors (default: stay silent)
, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
// fetch associative arrays (default: mixed arrays)
, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
?>
你的源应该看起来更像这样(如果你只有一个文件,它是一个示例)
addpub.php的内容
print_r($_POST);
if(isset($_POST['name'])){
require_once("dbconn.php");
try {
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname; charset=utf8",$dbuser,$dbpass,$dbo);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
$q = $conn->prepare("INSERT INTO publisher (name) VALUES (:name)");
$q->execute(array(':name'=>$_POST['name']));
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
Comics DB > Add Publisher
</title>
<link rel="stylesheet" type="text/css" href="comicsdb.css">
</head>
<body>
<div class="main">
<menu>
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="add.php">Add</a></li>
<li><a href="edit.php">Edit</a></li>
<li><a href="delete.php">Delete</a></li>
<li><a href="list.php">List</a></li>
<li><a href="search.php">Search</a></li>
</ul>
</menu>
<div class="pub_menu">
<form action="addpub.php" method="POST">
<p>
Publisher:
<input type="text" name="name" />
<input type="submit" value="Add Publisher" name="addPubBtn" />
</p>
</form>
</div>
</body>
</html>
在这种情况下,您将表单中的数据插入到您的数据库中。如果表单的目标是其他页面,则必须将 "pdo insert part" 添加到 POST-Target。否则你将永远不会有数据!
此外,您不应将输出源与逻辑源混合使用。所以可以看看像Smarty这样的模板系统。
我正在做一个个人项目,试图制作 PDO 和 MySQL 查询。几个星期以来,我一直在与此作斗争。我进行了广泛的研究,并在其他论坛上找到了许多很好的教程和问题。但是,我对这个问题感到非常困惑。我目前的代码只接受一个值传递给数据库。但是我总是收到未定义的变量通知。当我为使用的变量初始化一个空变量时,它只是将一个空记录添加到数据库中。我该怎么办。我已经尽可能推迟要求了。
addpub.php
<?php
require_once("dbconn.php");
try {
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname; charset=utf8",$dbuser,$dbpass,$dbo);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
Comics DB > Add Publisher
</title>
<link rel="stylesheet" type="text/css" href="comicsdb.css">
</head>
<body>
<div class="main">
<menu>
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="add.php">Add</a></li>
<li><a href="edit.php">Edit</a></li>
<li><a href="delete.php">Delete</a></li>
<li><a href="list.php">List</a></li>
<li><a href="search.php">Search</a></li>
</ul>
</menu>
<div class="pub_menu">
<form action="addpub.php" method="POST" enctype="text/plain" id="form">
<p>
Publisher: <input type="text" name="name" id="name"> <input type="submit" value="Add Publisher" name="addPubBtn" id="addPubBtn">
</p>
</form>
<?php
$q = $conn->prepare("INSERT INTO publisher (name) VALUES (:name)");
$q->bindValue(':name', $name, PDO::PARAM_STR);
if(isset($name))
$q->execute();
else
echo "FAIL!";
?>
</div>
</body>
</html>
dbconn.php
<?php
$dbhost = '127.0.0.1';
$dbname = 'comicsdb';
$dbuser = '****';
$dbpass = '****';
$dbo = array(
// important! use actual prepared statements (default: emulate prepared statements)
PDO::ATTR_EMULATE_PREPARES => false
// throw exceptions in case of errors (default: stay silent)
, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
// fetch associative arrays (default: mixed arrays)
, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
?>
你的源应该看起来更像这样(如果你只有一个文件,它是一个示例)
addpub.php的内容 print_r($_POST);
if(isset($_POST['name'])){
require_once("dbconn.php");
try {
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname; charset=utf8",$dbuser,$dbpass,$dbo);
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
$q = $conn->prepare("INSERT INTO publisher (name) VALUES (:name)");
$q->execute(array(':name'=>$_POST['name']));
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
Comics DB > Add Publisher
</title>
<link rel="stylesheet" type="text/css" href="comicsdb.css">
</head>
<body>
<div class="main">
<menu>
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="add.php">Add</a></li>
<li><a href="edit.php">Edit</a></li>
<li><a href="delete.php">Delete</a></li>
<li><a href="list.php">List</a></li>
<li><a href="search.php">Search</a></li>
</ul>
</menu>
<div class="pub_menu">
<form action="addpub.php" method="POST">
<p>
Publisher:
<input type="text" name="name" />
<input type="submit" value="Add Publisher" name="addPubBtn" />
</p>
</form>
</div>
</body>
</html>
在这种情况下,您将表单中的数据插入到您的数据库中。如果表单的目标是其他页面,则必须将 "pdo insert part" 添加到 POST-Target。否则你将永远不会有数据!
此外,您不应将输出源与逻辑源混合使用。所以可以看看像Smarty这样的模板系统。