2013-01-23 164 views
0

我做了一個表單,在我的項目中插入和修改類別。 當我點擊「提交」我得到提交到數據庫中的記錄,但它看起來是空的! 如果我去databse字段,並寫我自己的文本,它會出現在MySQL和和「????」在瀏覽器中!用PHP插入MySQL數據庫時的空白數據

這裏是我寫的代碼:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<body> 

<?php 
$con = mysql_connect("localhost","user","pass"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("mydb", $con); 

$sql="INSERT INTO categories (name, parent_id,description) 
VALUES 
('$_POST[name]','$_POST[parent_id]','$_POST[description]')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 

mysql_close($con) 
?> 

<form action="ins.php" method="post"> 
category: <input type="text" name="name" /><br><br> 
parent: <input type="text" name="parent_id" /><br><br> 
description: <input type="text" name="description" /><br><br> 

<input type="submit" /> 
</form> 

</body> 
</html> 
+0

btw,phpmyadmin中的編碼是utf-8_unicode_ci。並且引擎是MYISSAM – user2003332

+0

您是否注意到您在pge加載時已經運行了查詢?打開錯誤報告。 **排除你的代碼容易受到sql注入的影響,並且你正在使用不推薦的mysql_ *函數** – itachi

+0

它應該是$ _POST ['name'] – Tarika

回答

0
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<body> 

<?php 
if ($_POST['action']=="doformpost") { 
    //only do DB insert if form is actually posted 

    $con = mysql_connect("localhost","user","pass"); 
    if (!$con) 
     { 
     die('Could not connect: ' . mysql_error()); 
     } 

    mysql_select_db("mydb", $con); 

    $sql="INSERT INTO categories (name, parent_id,description) 
    VALUES 
    ('".$_POST['name']."','".$_POST['parent_id']."','".$_POST['description']."')"; 


    if (!mysql_query($sql,$con)) 
     { 
     die('Error: ' . mysql_error()); 
     } 
    echo "1 record added"; 

    mysql_close($con) 
} 
?> 

<form action="ins.php" method="post"> 
<input type="hidden" name="action" id="action" value="doformpost" /> 
category: <input type="text" name="name" /><br><br> 
parent: <input type="text" name="parent_id" /><br><br> 
description: <input type="text" name="description" /><br><br> 

<input type="submit" /> 
</form> 

</body> 
</html> 
2

你必須在你的索引名引用(使用」),在SQL請求,因爲$ _ POST是一個數組:

$sql="INSERT INTO categories (name, parent_id,description) 
VALUES 
('".$_POST["name"]."','".$_POST["parent_id"]."','".$_POST["description"]."')"; 

但是一般來說請不要直接相信用戶發佈到腳本中的內容以避免SQL注入。您可以使用mysqli :: query來更好更安全地使用:

Mysqli

+0

解析錯誤:語法錯誤,第25行ins.php中的意外'}' – user2003332

+0

我的代碼中沒有括號,分析錯誤在代碼的其他地方(也許某些條件括號沒有終止)。您可以使用IDE的語法高亮來檢查。 – robinef

-1

使用本聲明爲您的代碼

if(isset($_POST['name']) && isset($_POST['parent_id']) && isset($_POST['description'])) 

//your insert query 
0
$sql="INSERT INTO categories (name, parent_id,description) 
VALUES 
("'.$_POST['name'].'","'.$_POST['parent_id'].'","'.$_POST['description'].'")"; 

請在插入數據庫值

+2

雖然提供代碼是好的,但如果您可以添加對更改的解釋,則更好。 – ryadavilli

-1

不要忘了安全提供報價!

$sql="INSERT INTO categories (name, parent_id,description) 
VALUES 
('".mysql_real_escape_string($_POST['name'])."','".intval($_POST['parent_id'])."','".mysql_real_escape_string($_POST['description'])."')"; 

而且我認爲編碼有問題。

推出查詢您插入數據之前:

$sql = 'set names `utf-8`'; (for example) 
0

嘗試使用雙引號在你的聲明是這樣的:

$ SQL =「INSERT INTO類別(名稱,PARENT_ID,描述) VALUES ( 「 '$ _ POST [ '名稱']'。」, 「 '[PARENT_ID ']。' $ _ POST'。」,「 '[原文 ']。' $ _ POST'。 」)「;

0

很多問題在這裏。

  • $_POST[name]應該$_POST['name']
  • 您的查詢就會運行,即使形式不提交。
  • 您正在使用已棄用的mysql_*函數。使用PDO的mysqli
  • 您的代碼很容易受到SQL注入

與所有的出,這裏就是你需要做什麼。

只是爲了驗證表單提交,使用

if(!empty($_POST['name']) && 
!empty($_POST['parent_id']) && 
!empty($_POST['description'])) 

(如果爲空值允許使用isset。)

然後運行查詢。


在PDO,代碼將看起來像這樣 - >

<?php 
// configuration 
$dbtype  = "mysql"; 
$dbhost    = "localhost"; 
$dbname  = "mydb"; 
$dbuser  = "user"; 
$dbpass  = "pass"; 

// database connection 
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 

// query 
$sql = "INSERT INTO categories (name, parent_id,description) 
     VALUES 
     (?,?,?)"; 
$q = $conn->prepare($sql); 
$q->execute(array($_POST[name],$_POST[parent_id],$_POST[description])); 


?> 

這僅僅是一個開始。您可以使用trycatch塊來捕獲異常。

在運行查詢之前,檢查表單是否如上所述由!empty()isset()提交。

-1

使用下面插入查詢插入數據,我相信它一定會幫助你。

$sql="INSERT INTO categories (name,parent_id,description) 
VALUES 
('".$_POST['name']."','".$_POST['parent_id']."','".$_POST['description']."')"; 
-1

Try this

<?php 
if(isset($_POST['submit'])) { 
    $con = mysql_connect("localhost","user","pass"); 
    if (!$con){ 
     die('Could not connect: ' . mysql_error()); 
    } 
    mysql_select_db("mydb", $con); 

    $sql="INSERT INTO categories (name, parent_id,description) VALUES 
    ('".$_POST['name']."','".$_POST['parent_id']."','".$_POST['description']."')"; 

    if (!mysql_query($sql,$con)) { 
     die('Error: ' . mysql_error()); 
    } else { 
     echo "1 record added"; 
    } 
    mysql_close($con); 
} 
?> 
<html> 
<body> 
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post"> 
category: <input type="text" name="name" /><br><br> 
parent: <input type="text" name="parent_id" /><br><br> 
description: <input type="text" name="description" /><br><br> 
<input type="submit"name="submit" value="Submit" /> 
</form> 
</body> 
</html> 
-1

我也面臨着同樣的問題。

繼續這樣插入查詢,這對我有幫助。

$email_id = $_POST['email_id']; 
$device_id = $_POST['device_id']; 
***For My Sqli*** 
if(!empty($email_id)) 
    { 
     $result_insert = mysqli_query($db_conn,"INSERT INTO tableName (user_email, user_device_id,last_updated_by) VALUES('".$email_id."', '".$device_id."', '".$email_id."') "); 

     if(mysqli_affected_rows($db_conn)>0) 
     { 
      $response["success"] = 1; 
      $response["message"] = "Successfully Inserted"; 
     } 
     else 
     { 
      $response["success"] = 0; 
      $response["message"] = "Problem in Inserting"; 
     } 
    } 
    else 
    { 

     $response["success"] = 4; 
     $response["message"] = "Email id cannot be Blank"; 
    } 
} 
/////////////////////////////////////////////////////////////////////////////// 
**For My Sql** 
if(!empty($email_id)) 
    { 
     $result_insert = mysql_query("INSERT INTO tableName (user_email, user_device_id,last_updated_by) VALUES('".$email_id."', '".$device_id."', '".$email_id."') "); 

     if(mysql_affected_rows()>0) 
     { 
      $response["success"] = 1; 
      $response["message"] = "Successfully Inserted"; 
     } 
     else 
     { 
      $response["success"] = 0; 
      $response["message"] = "Problem in Inserting"; 
     } 
    } 
    else 
    { 

     $response["success"] = 4; 
     $response["message"] = "Email id cannot be Blank"; 
    } 
} 

注意:這裏我只檢查了電子郵件。

1

首先清理您的用戶輸入。

如果你在那之後想要使用數組中的值而沒有所有的連接,其他人都會提到在數組訪問器周圍使用{}。

$sql="INSERT INTO categories (name, parent_id, description) 
VALUES 
('{$_POST['name']}','{$_POST['parent_id']}','{$_POST['description']}')"; 

要清理例如$ _POST做這樣的事情是一個好的開始。這是我的舊代碼。正如其他人寫的使用mysqli來代替

function clean_array($t_array) 
{ 
    foreach($t_array as $key=>$value) 
     $array[$key] = mysql_real_escape_string(trim($value)); 

    return $t_array; 
}