我完全陷入了问题。我正在从php练习MySQL数据插入,但我无法让它工作。对于php来说,我是全新的。使用MySQL和HTML,我做了一些课程,所以你可以说我是初学者。这是示例的第三部分,第一个示例是您必须列出表中的所有动物,我开始工作的那部分,然后第二部分是我必须使用命名参数来提取特定动物类型的地方,它也是工作良好。现在我坚持使用最后一个插入数据。我有一个简单的形式,动物名称和动物类型作为文本框,当我点击提交更新的行必须在示例一中自动更新并显示在表中,但当我点击提交,没有任何反应,没有任何内容插入到数据库,但是当我刷新页面或再次单击“提交”时,我才会看到更新的数据。在单击刷新或提交后填写两个文本字段中的数据时,空白数据将插入到数据库中。
<?php
$db = 'mysql:host=localhost;dbname=animals';
$username = 'root';
$password = '';
$animal_type = $_POST[animal_type];
$animal_name = $_POST[animal_name];
$query = "INSERT INTO animals
(animal_type, animal_name)
VALUES
('$animal_type', '$animal_name')";
$animal = $db->prepare($query);
$animal->bindValue(':animal_id', $animal_id);
$animal->execute();
$animals = $animal->fetchAll();
$animal->closeCursor();
?>
<form action="example3.php" method="post">
Animal Name: <input type="text" name="animal_name"><br>
Animal Type: <input type="text" name="animal_type"><br>
<input type="submit" />
</form>
非常感谢任何帮助。 JasonK
更新
所以这就是它完成时的样子,但你看到那些空白的条目是当我填写动物类型和动物名称并点击提交时发生的事情 - 它只是将字段留空,我在数据库中检查,它确实单击“提交”时的插入。我推断,无论何时单击提交或页面刷新,它都会再次运行整个代码,即空白条目的来源。
这就是我的整个代码。
<!DOCTYPE html>
<html>
<head>
</head>
<body>
/////////////////////////////////////////////////////////////////////////////////Example1/////////////////////////////////////////////////////////////////////////////////////////
<?php include 'menu.inc';
$db = 'mysql:host=localhost;dbname=animal';
$username = 'jason';
$password = '';
try {
$db = new PDO($db, $username, $password);
echo 'Connection successful';
echo '<br />';
}
catch(PDOException $e)
{
echo 'Connection failed' . $e->getMessage();
}
$query = 'SELECT animal_type, animal_name
FROM animals';
$animal = $db->query($query);
$animal->execute();
$animals = $animal->fetchAll();
$animal->closeCursor();
echo "<br>";
?>
<table border="1">
<tr>
<th>Animal Type</th>
<th>Animal Name</th>
</tr>
<?php foreach ($animals as $animal) { ?>
<tr>
<td><?php echo $animal['animal_type']; ?></td>
<td><?php echo $animal['animal_name']; ?></td>
</tr>
<?php } ?>
</table>
/////////////////////////////////////////////////////////////////////////////////Example2/////////////////////////////////////////////////////////////////////////////////////////
<?php
$animal_type = "leopard";
$query = 'SELECT *
FROM animals
WHERE animal_type = :animal_type';
$animal = $db->prepare($query);
$animal->bindValue(':animal_type', $animal_type);
$animal->execute();
$animals = $animal->fetchAll();
$animal->closeCursor();
?>
<p>
<table border="1">
<tr>
<th>Animal Type</th>
<th>Animal Name</th>
</tr>
<?php foreach ($animals as $animal) { ?>
<tr>
<td><?php echo $animal['animal_type']; ?></td>
<td><?php echo $animal['animal_name']; ?></td>
</tr>
<?php }?>
</table>
</p>
/////////////////////////////////////////////////////////////////////////////////Example3/////////////////////////////////////////////////////////////////////////////////////////
<?php
$db = 'mysql:host=localhost;dbname=animals';
$username = 'jason';
$password = '';
$animal_type = $_POST['animal_type'];
$animal_name = $_POST['animal_name'];
$db = new PDO('mysql:host=localhost;dbname=animals', $username, $password);
$query = "INSERT INTO animals
SET animal_type = :animal_type,
animal_name = :animal_name";
$animal = $db->prepare($query);
$animal->bindParam(':animal_type', $animal_type, PDO::PARAM_STR);
$animal->bindParam(':animal_name', $animal_name, PDO::PARAM_STR);
$animal->execute();
?>
<form action="example3.php" method="post">
Animal Name: <input type="text" name="animal_name"><br>
Animal Type: <input type="text" name="animal_type"><br>
<input type="submit" />
</form>
</body>
</html>
答案 0 :(得分:1)
要从($_POST
,$_REQUEST
,$_GET
等super_globals获取值,您必须将index作为字符串传递
变化
$animal_type = $_POST[animal_type];
$animal_name = $_POST[animal_name];
到
$animal_type = $_POST["animal_type"];
$animal_name = $_POST["animal_name"];
删除不必要的绑定值
$animal->bindValue(':animal_id', $animal_id); //remove this
也希望您已创建数据库连接并将其存储在$db
您的插入查询也容易受到SQL注入攻击。使用bind param插入值
$query = "INSERT INTO animals
(animal_type, animal_name)
VALUES
(:animal_type, :animal_name)";
$animal = $db->prepare($query);
$animal->bindParam(':animal_type', $animal_type);
$animal->bindParam(':animal_name', $animal_name);
$animal->execute();
答案 1 :(得分:1)
<?php
$db = 'mysql:host=localhost;dbname=animals';
$username = 'root';
$password = '';
$animal_type = $_POST['animal_type'];
$animal_name = $_POST['animal_name'];
$db = new PDO('mysql:host=localhost;dbname=animals', $username, "");
$query = "INSERT INTO animals
SET animal_type = :animal_type,
animal_name = :animal_name";
$animal = $db->prepare($query);
$animal->bindParam(':animal_type', $animal_type, PDO::PARAM_STR);
$animal->bindParam(':animal_name', $animal_name, PDO::PARAM_STR);
$animal->execute();
?>
<form action="example3.php" method="post">
Animal Name: <input type="text" name="animal_name"><br>
Animal Type: <input type="text" name="animal_type"><br>
<input type="submit" />
</form>
答案 2 :(得分:0)
你在哪里创建数据库?我唯一看到的是一个名为$db
的字符串我想你忘了创建一个像这样的PDO对象
$db = new PDO('mysql:host=localhost;dbname=animals', $username, "");
否则,请尝试使用字符串的准备语句
和数组索引必须是这样的字符串$_POST["animal_type"]
答案 3 :(得分:0)
<?php
if(isset($_POST['submit'])){ //check wheter form submit or not
$db = 'mysql:host=localhost;dbname=animals';
$username = 'root';
$password = '';
$animal_type = $_POST['animal_type'];
$animal_name = $_POST['animal_name'];
$stmt = $db->prepare("INSERT INTO animals
(animal_type, animal_name) VALUES (?, ?)");
$stmt->bind_param("ss", $animal_type, $animal_name);
$stmt->execute();
}
?>
<form method="post">
Animal Name: <input type="text" name="animal_name"><br>
Animal Type: <input type="text" name="animal_type"><br>
<input type="submit" name="submit"/> // change this markup input
</form>
请参阅此链接以获取更多php和mysql tutoral https://www.w3schools.com/PhP/php_mysql_prepared_statements.asp