2014-09-20 128 views
0

首先我對mysql和php很新,現在我只是想在mysql數據庫中插入一些數據形式使用php的兩個文本框。不能在mysql數據庫中插入數據使用php

這裏的數據庫名稱是「信息」和表名是「學生」有三列像id(主鍵,自動增量激活),名稱和部門。有兩個文本框txtName和txtDept。我希望當我按下輸入按鈕的數據形式的文本框將被插入到MySQL數據庫。我曾嘗試下面的代碼,但數據未在表中插入....

<html> 

<form mehtod="post" action="home.php"> 
    <input type="text" name="txtName" /> 
    <input type="text" name="txtDept" /> 
    <input type="submit" value="Enter"/> 

</form> 
</html> 

<?php 

$con = mysqli_connect("localhost","root","","info"); 
if($_POST){ 

    $name = $_POST['txtName']; 
    $dept = $_POST['txtDept']; 
    echo $name; 
    mysqli_query($con,"INSERT INTO students(name,dept) VALUES($name,$dept);"); 


} 

?> 

回答

6

有幾件事情錯了你發佈代碼。

mehtod="post"它應該是method="post" - 拼寫錯誤。

另外,引用你的價值觀

VALUES('$name','$dept')

DO使用prepared statements,或者PDO with prepared statements

,因爲你現在的代碼是開放的SQL injection

,並添加error reporting

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

您也應該檢查數據庫的錯誤。

$con = mysqli_connect("localhost","root","","info") 
      or die("Error " . mysqli_error($con)); 

以及or die(mysqli_error($con))mysqli_query()


旁註/建議:

如果整個代碼是相同的文件內(這似乎是),考慮使用名爲attribute的提交按鈕o在條件語句內包裝您的PHP/SQL此外,您可能會收到Undefined index...警告。

命名您的提交按鈕<input type="submit" name="submit" value="Enter"/>

,做

if(isset($_POST['submit'])){ code to execute }

只是做if($_POST){時錯誤報告設置可能會出現意想不到的結果。


重寫:一些使用mysqli_real_escape_string()stripslashes()

<html> 

<form method="post" action="home.php"> 
    <input type="text" name="txtName" /> 
    <input type="text" name="txtDept" /> 
    <input type="submit" name="submit" value="Enter"/> 

</form> 
</html> 

<?php 

$con = mysqli_connect("localhost","root","","info") 
     or die("Error " . mysqli_error($con)); 

if(isset($_POST['submit'])){ 

    $name = stripslashes($_POST['txtName']); 
    $name = mysqli_real_escape_string($con,$_POST['txtName']); 

    $dept = stripslashes($_POST['txtDept']); 
    $dept = mysqli_real_escape_string($con,$_POST['txtDept']); 
    echo $name; 

    mysqli_query($con,"INSERT INTO `students` (`name`, `dept`) VALUES ('$name','$dept')") 
      or die(mysqli_error($con)); 

} 

?> 

按手動添加的安全性:http://php.net/manual/en/mysqli.connect-error.php,如果你想使用下面的方法,其中評論有被賦予這種效果:

<?php 
$link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db'); 

if (!$link) { 
    die('Connect Error: ' . mysqli_connect_error()); 
} 
?> 
+0

@VMai我不明白。編輯,好吧。 – 2014-09-20 15:06:57

+0

@VMai好點。做了編輯,最後還是'VALUES ...',當我將它放到'mysqli_query'下時,看起來很奇怪。隨意編輯:) – 2014-09-20 15:10:23

+1

爲了在這種情況下檢查連接錯誤,你可以使用'mysqli_connect_error()',因爲如果錯誤'$ con'將會是'FALSE'和'mysqli_error()'需要有效的鏈接標識符。 – Timur 2014-09-20 15:18:40

0

上帝保存我們所有的... 使用PDO類,而不是:)。通過使用PDO,您還可以在客戶端準備語句並使用命名參數。如果你需要改變你的數據庫驅動程序PDO支持的話,那麼MySQLi只支持一個驅動程序(MySQL),這個驅動程序可以支持12個不同的驅動程序(十八個不同的數據庫!)。 :( 在性能方面MySQLi的速度提高了大約2.5%,但這並沒有太大差別,我的選擇是PDO :)。