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">&nbsp;<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这样的模板系统。