2017-10-04 37 views
-2

我完全停留在一個問題上。我從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

的輸出或錯誤是什麼,請首先確定您需要插入還是更新? 有問題,你說你想要更新,但在代碼中,你插入的數據。 –

回答

0

你在哪裏創建數據庫?我唯一看到的是一個名爲$db我想你忘記了創建像PDO對象的字符串這個 $db = new PDO('mysql:host=localhost;dbname=animals', $username, ""); 否則IST嘗試對一個準備語句字符串

和數組索引必須是這樣的$_POST["animal_type"]

字符串
1

要像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(); 
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> 
+0

這幾乎是正確的。即將升級它。檢查你的插入語法。它應該是VALUES沒有設置,請添加解釋,因爲OP是一個初學者 – Akintunde007

+0

我改正了,我沒有太注意所有的東西:) –

+1

插入的語法是INSERT INTO表(col,col)VALUES(val,val) – Akintunde007

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