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> 

completed example scenario

+0

为什么当你有没有在你的插入查询中使用的值,你绑定值?我可以添加,你应该使用':value'作为插入值而不是变量:| – Option

+0

您能告诉我们上面的代码 –

+1

的输出或错误是什么,请首先确定您需要插入还是更新? 有问题,你说你想要更新,但在代码中,你插入的数据。 –

你在哪里创建数据库?我唯一看到的是一个名为$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> 
+0

这几乎是正确的。即将升级它。检查你的插入语法。它应该是VALUES没有设置,请添加解释,因为OP是一个初学者 – Akintunde007

+0

我改正了,我没有太注意所有的东西:) –

+1

插入的语法是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