PHP表格不更新
我完全停留在一个问题上。我从PHP练习MySQL数据插入,但我无法得到它的工作。当谈到php时,我是全新的。使用MySQL和HTML,我做了一些课程,所以你可以说我是初学者。这是示例的第三部分,您必须列出表中的所有动物的第一个示例,我开始工作的那部分,然后第二部分是我必须使用命名参数来提取特定动物类型的地方,而且它也是工作正常。现在我坚持最后一个插入数据。我有一个简单的动物名称和动物类型的表单作为文本框,当我点击提交更新的行必须在示例一中自动更新并显示在表中,但是当我点击提交时,没有任何反应,没有任何东西插入到数据库,但是当我刷新页面或再次点击提交时,我只能看到更新的数据。在单击刷新或提交后,在两个文本字段中填写数据时,会将空白数据插入到数据库中。PHP表格不更新
<?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>
你在哪里创建数据库?我唯一看到的是一个名为$db
我想你忘记了创建像PDO对象的字符串这个 $db = new PDO('mysql:host=localhost;dbname=animals', $username, "");
否则IST尝试对一个准备语句字符串
和数组索引必须是这样的$_POST["animal_type"]
要像super_globals获得价值($_POST
,$_REQUEST
,$_GET
)你必须通过索引串
变化
$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注入。使用绑定参数去插入值
$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();
<?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>
这几乎是正确的。即将升级它。检查你的插入语法。它应该是VALUES没有设置,请添加解释,因为OP是一个初学者 – Akintunde007
我改正了,我没有太注意所有的东西:) –
插入的语法是INSERT INTO表(col,col)VALUES(val,val) – Akintunde007
<?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
为什么当你有没有在你的插入查询中使用的值,你绑定值?我可以添加,你应该使用':value'作为插入值而不是变量:| – Option
您能告诉我们上面的代码 –
的输出或错误是什么,请首先确定您需要插入还是更新? 有问题,你说你想要更新,但在代码中,你插入的数据。 –