2011-08-21 55 views
3

我有這個代碼插入到表中。我對INSERT INTO類的問題是它永遠不會向表中插入數據,也沒有錯誤。我在代碼中使用幾乎相同的查詢與不同的表,並在那裏工作。任何線索?插入表不工作,沒有錯誤通過PHP頁面

<?php 
$action = $_GET['action'] ; 
if ($action=='question') 
    question(); 
elseif ($action=='categories') 
    categories(); 

function question() { 
    if ((isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true)) 
    { 
    $include("db.php"); 
    $category = $_POST['category'] ; 
    $subcategory = $_POST['subCategory'] ; 
    $question = $_POST['question'] ; 
    $answer = $_POST['answer'] ; 

    $query = "INSERT INTO faq (category,subcategory,question,answer) 
     VALUES('.$category.','.$subcategory.','.$question.','.$answer')"; 
    $success = mysql_query($query); 

    if ($success) 
    { 
     echo '<a href="admin.php" >done >';  
    } 
    else 
    { 
     echo mysql_error(); 
    } 

    } 
} 


function categories(){ 
    if (! (isset($_SESSION['loggedin']) && ! $_SESSION['loggedin'] == true)) 
    { 
    include("db.php"); 
    $category = $_POST['category'] ; 
    $subcategory = $_POST['subCategory'] ; 

    $query = "INSERT INTO categories (category,subcategory) 
     VALUES('$category' , '$subcategory')"; 
    $success = mysql_query($query); 

    if ($success) 
    { 
     echo '<a href="admin.php" >done>'; 
    } 
    else 
    { 
     echo mysql_error(); 
    } 

    } 
} 
?> 
+4

你好[Bobby Tables](http://xkcd.com/327/)! – Shef

+0

您不應該以這種方式構建SQL字符串。谷歌SQL注入,你會知道爲什麼。 –

+0

我知道SQLi不好處理一次問題修正 – LeoSam

回答

4

的幾個問題:「」

  • 如果要結合變量轉換成字符串,就可以使用字符加入它們,或者你可以在字符串中包含變量,只要字符串用雙引號括起來即可。在你的代碼中,你同時做了兩件事。
  • 你不是在討厭你的數據庫輸入。
  • 您的邏輯檢查「類別」功能是不正確的。
  • 您的超鏈接標籤缺少結束標籤。

請參閱下面的修改代碼。

<?php 

$action = $_GET['action']; 

if($action=='question') 
    question(); 
elseif($action=='categories') 
    categories(); 

function question(){ 
    if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){ 

    include('db.php'); 

    $category = mysql_real_escape_string($_POST['category']); 
    $subcategory = mysql_real_escape_string($_POST['subCategory']); 
    $question = mysql_real_escape_string($_POST['question']); 
    $answer = mysql_real_escape_string($_POST['answer']); 

    $query = "INSERT INTO faq (category , subcategory , question , answer) VALUES('{$category}' , '{$subcategory}' , '{$question}' , '{$answer}')"; 

    echo "SQL Query to execute: $query"; # Debug Message 

    $success = mysql_query($query); 

    if ($success){ 
     echo '<a href="admin.php">done</a>'; 
    }else{ 
     echo mysql_error(); 
    } 

    } 
} 


function categories(){ 
    if(!(isset($_SESSION['loggedin']) || $_SESSION['loggedin']==true)){ 

    include('db.php'); 
    $category = mysql_real_escape_string($_POST['category']); 
    $subcategory = mysql_real_escape_string($_POST['subCategory']); 

    $query = "INSERT INTO categories (category , subcategory) VALUES ('{$category}' , '{$subcategory}')"; 

    echo "SQL Query to execute: $query"; # Debug Message 

    $success = mysql_query($query); 

    if($success){ 
     echo '<a href="admin.php">done</a>'; 
    }else{ 
     echo mysql_error(); 
    } 

    } 
} 
+0

感謝提及所有這些問題,感謝你的時間 – LeoSam

+0

但仍然不能插入 – LeoSam

+0

@MarcoDonJuan:嘗試修改上面的代碼,它應該回顯要執行的SQL代碼,前綴爲「SQL Query to execute:」。通過phpMyAdmin或類似的方式登錄到數據庫,並嘗試直接運行SQL Query。是好的 - 它必須是上述修改代碼之外的問題,不管它是否在** db中。php **文件,或者您正在編輯的字段,或類似的東西。 –

4

首先,爲了幫助調試,我將這兩行放在腳本的頂部以顯示所產生的所有錯誤。但是,不要將它們放在生產環境中。

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

變化

$query = "INSERT INTO faq (category,subcategory,question,answer) VALUES('.$category.','.$subcategory.','.$question.','.$answer')"; 

要這樣:

$query = "INSERT INTO faq (category,subcategory,question,answer) VALUES('".$category."','".$subcategory."','".$question."','".$answer."')"; 

$answer後錯過了一個.(點);這是一個語法錯誤,而不是查詢錯誤。

爲了讓事情簡單一點,你其實可以省略點完全:

$query = "INSERT INTO faq (category,subcategory,question,answer) VALUES('$category','$subcategory','$question','$answer')"; 

千萬要注意的SQL注入攻擊;使用mysql_real_escape_string(),使您的查詢安全(ER)


另一個問題可能是您的包含文件。嘗試改變

include("db.php"); 

require("db.php"); 

這是否包括文件無法找到將失敗。在這種情況下,請修復!

+0

感謝您的時間,但沒有任何東西或語法修復此問題,即使沒有錯誤報告 – LeoSam

+0

@Marco嘗試在'$ query =「''行之前執行'print_r($ _ POST)'。這將打印'$ _POST'數組並顯示是否有任何內容。 – Bojangles

+0

也沒有輸出只是空白頁 – LeoSam

0

我有同樣的神祕情況。更糟糕的是,在一個遠程的,相同的數據庫中,相同的代碼正在工作。解決的辦法是爲所有數據庫字段定義一個默認值(任何值)...希望這有助於。

1

我有同樣的問題,使用or die(mysql_error());,並意識到我沒有對我的一個變量做addslashes($string)。它有我需要逃脫的角色。

0

我一直停留在這個問題上很長一段時間內唯一的解決辦法,我發現是

使用mysqli的,而不是MySQL的,因爲在PHP中的較新版本的這些MySQL已經被棄用例如

使用以下方法

並確保保持順序正確dirst變量例如'$ conn',然後數據庫名稱在方法'mysqli_select_db($ conne,'checksum');'。在'mysqli_query($ conne,$ enter_command);'同樣在'mysqli_query($ connec,$ enter_command)'''''''''''''''''''''''''''''''''''''''''''第一個變量,然後是查詢變量。

$conn=mysqli_connect($mysql_host,$mysql_user,$mysql_password); 
mysqli_select_db($conne,'checksum'); // checksum is database name 
mysqli_query($conne,$enter_command); 
mysqli_close($conne); 

也確保進入數據庫表列

$enter_command = "INSERT INTO dbase (name , lastname , password) VALUES ('".$name."','".$lastname."','".$password."')"; 

,你也可以使用這個語法

$enter_command = "INSERT INTO dbase (name , lastname , password) VALUES ('{$name}','{$lastname}','{$password}')"; 

儘量避免SQL注入

$gender  = mysql_real_escape_string($_POST['gender']); 

希望的時候,給空間這將工作