2012-04-24 110 views
1

我有一個表疾病,其中有diid列,diseasenamedescrption,在一個叫HCP數據庫。MySQL的插入查詢不工作

我想簡單地從HTML表單輸入;這是我的代碼到目前爲止。

<html><head><title>Disease Inssert</title></head> 
<body> 
<form action="diseaselist.php" method="post"> 
Disease Name : <input type="text" name="txtDiseaseName" id="textbox" /><br /> 
Description : <input type="text" name="txtDiseaseDescription" id="textbox" /><br /> 
<input type="submit" name="btnDiseaseSubmit" id="button"/> 

</form> 
</body> 
</html> 

<?php 
mysql_connect("localhost","root",""); 
mysql_select_db("hcp"); 

if($_REQUEST['btnDiseaseSubmit']) 
{ 
$queryDiseaseInsert="INSERT INTO disease (`diseasename` ,`description`) VALUES ('".$_REQUEST['txtDiseaseName']."', '".$_REQUEST['txtDiseaseDescription']."');"; 

$resultDI=mysql_query($queryDiseaseInsert) or die(mysql_error()); 
} 
?> 

提交後,頁面重定向到diseaselist.php,但數據沒有在數據庫中保存。

任何人都可以看到我的查詢有什麼問題嗎?

+0

是的,至少有一件事是錯誤的:您的輸入數據沒有正確的消毒,請參閱http://php.net/filter的更多過濾器擴展名 – Hajo 2012-04-24 06:20:18

+1

這是diseaselist.php頁面的代碼? – heyanshukla 2012-04-24 06:21:18

+0

您必須在插入前轉義字符串變量 – 2012-04-24 06:24:17

回答

2

表格直接提交到列表<form action="diseaselist.php" method="post"> 。 保存到數據庫的代碼從不執行。

您可以創建一箇中間頁,讓我們說process.php包含的代碼添加到數據庫:

<?php 
mysql_connect("localhost","root",""); 
mysql_select_db("hcp"); 

if($_REQUEST['btnDiseaseSubmit']) 
{ 
    $queryDiseaseInsert="INSERT INTO disease (`diseasename` ,`description`) VALUES ('". mysql_real_escape_string($_REQUEST['txtDiseaseName'])."', '".mysql_real_escape_string($_REQUEST['txtDiseaseDescription'])."');"; 

    $resultDI=mysql_query($queryDiseaseInsert) or die(mysql_error()); 
    // insert is complete, redirect to list 
    header("location: diseaselist.php"); 
} else { 
    // the form was not submitted 
    // redirect back to the form or show error message 
} 

?> 

變化:

  • 加入mysql_real_escape_string插入後
  • ,送報頭指令將瀏覽器重定向到列表

現在,在當前的文件,只留下html代碼和更新action屬性的表單提交process.php腳本:

<html><head><title>Disease Inssert</title></head> 
<body> 
<form action="process.php" method="post"> 
Disease Name : <input type="text" name="txtDiseaseName" id="textbox" /><br /> 
Description : <input type="text" name="txtDiseaseDescription" id="textbox" /><br /> 
<input type="submit" name="btnDiseaseSubmit" id="button"/> 

</form> 
</body> 
</html> 

變化:

  • 更新的形式action屬性process.php
+0

我做了更改。但出現了一個新問題:「無法修改頭文件信息 - 在C:\ wamp \ www \ HCP \ insertdisease.php中已經發送的頭文件(輸出在C:\ wamp \ www \ HCP \ insertdisease.php:3中開始) 13「 – 2012-04-24 07:08:27

+0

錯誤意味着在調用'header'函數時已經打印了(回顯)了一些東西。確保PHP代碼在文件開始時是正確的,並且在調用'header'函數 – 2012-04-24 07:11:35

+0

之前,它不會輸出任何東西!謝謝MAZZUCCI :) – 2012-04-24 07:14:23

0

diseaselist.php頁面上嘗試用下面的代碼

<?php 

    mysql_connect("localhost", "root", ""); 
mysql_select_db("hcp"); 

if (isset ($_REQUEST['btnDiseaseSubmit'])) { 
    $queryDiseaseInsert = "INSERT INTO disease ('diseasename' , 'description') VALUES('" . $_REQUEST['txtDiseaseName'] . "','" . $_REQUEST['txtDiseaseDescription'] . "')"; 

    $resultDI = mysql_query($queryDiseaseInsert) or die(mysql_error()); 
} 
?> 
+0

誰是說表格也不是在diseaselist.php? – Shane 2012-04-24 06:35:03

+0

decoyer沒有提到該頁面是同一個頁面,即重定向到同一頁面diseaselist.php。如果它然後isset()代碼將處理剩下的東西@Shane – Poonam 2012-04-24 06:46:21

+0

公平的。在我的評論中,我假定代碼在同一個文件中,因爲這是OP似乎正在做的事情。 – Shane 2012-04-24 07:03:39

2

您的腳本存在一些問題。首先,您在嘗試插入數據之前沒有檢查數據。 HTML表單的典型流程如下所示:

  1. 顯示窗體。用戶輸入數據並提交。
  2. 數據發送到服務器,它應該檢查所有需要的數據。如果沒有顯示,用戶(通常)會收到錯誤的表單。
  3. 這一直持續到用戶提交或提交完整有效的表單。

現在在你的表格上面說的,在這裏:

<?php 

    $mysql = mysql_connect("localhost","root",""); // assign to variable 
    mysql_select_db("hcp", $mysql); 

    // Get into the habit of using $_POST and $_GET instead of $_REQUEST 
    if(isset($_POST['btnDiseaseSubmit']) && !empty($_POST['btnDiseaseSubmit'])) 
    { // Form was completely submitted 
    $sql = "INSERT INTO disease (`diseasename` ,`description`) VALUES ('".$_POST['txtDiseaseName']."', '".$_POST['txtDiseaseDescription']."');"; // No need for massive variable names 

    $resultDI = mysql_query($sql, $mysql) or die(mysql_error()); 

    mysql_close($mysql); // Close database connection - cleans things up 
    echo "Successfolly ran database query!"; 
    } else { // Form was not completely submitted, if at all - display form. 
?> 
<html> 
    <head><title>Disease Inssert</title></head> 
    <body> 
    <!-- If action is not present, the form will submit to the current page. ie. If current page is a.php and we leave out action, the form will submit to a.php! --> 
    <form method="post"> 
     Disease Name : <input type="text" name="txtDiseaseName" id="textbox" /><br /> 
     Description : <input type="text" name="txtDiseaseDescription" id="textbox" /><br /> 
     <input type="submit" name="btnDiseaseSubmit" id="button"/> 
    </form> 
    </body> 
</html> 
<?php 
    } 
?> 

這應該很好地工作適合你。請注意代碼中的註釋,以便您知道我所做的以及爲什麼我已經完成了它。谷歌周圍更多的例子。它很快就會變得清晰。