2011-03-14 70 views
0

這是否有任何問題,因爲我沒有輸出返回?提前致謝。這個PHP代碼有錯誤嗎?

$question_text = $_POST['question_text']; 

$first_word = explode(" ", $question_text); 

$query ="SELECT c.field_name,t.category_name, d.domain_name FROM category_fields c, taxonomy_category t, taxonomy_domain d 
WHERE c.category_Id = t.category_Id AND t.domain_Id = d.domain_Id 
AND c.field_name = '$first_word'"; 

我已經改變了我的代碼這一點,仍然沒有output.Is那裏的方式有問題我展示他們感謝

$ QUESTION_TEXT = $ _ POST [「QUESTION_TEXT」];

list($ first_word)= explode('',$ question_text);

$ query =「SELECT c.field_name,t.category_name,d.domain_name FROM category_fields c,taxonomy_category t,taxonomy_domain d WHERE c.category_Id = t.category_Id AND t.domain_Id = d.domain_Id AND c.field_name = 「」 .mysql_escape_string($ first_word [0])。 「'」;

$ result = mysql_query($ query);

而($行= mysql_fetch_array($結果,MYSQL_ASSOC))

{

回聲 「關鍵字:{$行[ 'c.field_name']}」。 「分類:{$ row ['t.category_name']}」。 「域:{$ row ['d.domain_name']}」; }

?>

+1

此代碼易受[SQL注入攻擊](http://en.wikipedia.org/wiki/SQL_injection)的影響。請不要直接插入POST數據到查詢中 - 做一些轉義。您可以嘗試檢查$ first_word的值是什麼,並針對您的數據庫手動運行查詢。 – 2011-03-14 04:50:11

+0

'print_r'是你的朋友。'print_r($ first_word);'將指出爲什麼它不起作用。此外,'list($ first_word)= explode('',$ question_text);'將生成的數組的第一個元素提取到'$ first_word'中。 – Dan 2011-03-14 04:52:29

回答

1

$ first_word是一個數組,而不是字符串,在查詢你想$ first_word [0]

也是非常不安全的,直接把任何用戶提交的值在一個SQL查詢中,它應該總是被消毒。

+0

謝謝,所以我只需要將數組添加到$ first_word?查詢也是?謝謝:) – Abby 2011-03-14 04:51:36

+0

不知道你在問什麼。 – 2011-03-14 04:54:21

1

取而代之的是explode行,你可以使用以下獲得正確的SQL查詢:

$first_word = mysql_real_escape_string(strtok($question_text, " ")); 

strtok削減的字符串,直到第一個空間。並且需要使用轉義函數來防止來自SQL漏洞的腳本。

0
list($first_word) = explode(' ', $question_text); 

這應該可以做到。 消毒您的數據庫輸入!

+0

嗨,謝謝,我修復了代碼,但仍然沒有輸出。是否有任何問題?新代碼添加上面。 - – Abby 2011-03-14 05:24:40

+0

嗨**艾比**;當你做'list($ first_word)= explode('',$ question_text);',你不再以數組的形式訪問'$ first_word'。 list()函數從第一個元素'explode()'的數組結果中提取數據,並將其存儲在提供的參數中,在本例中爲$ $ first_word。你可以簡單地在查詢中使用'$ first_word'。 **清理你的數據庫輸入!** – Dan 2011-03-14 05:29:58

+0

好吧,我會查找清理輸入的方法,因爲我是一個PHP初學者:)但一個簡短的問題,我必須有一個表來存儲question_text在方法POST,我用?目前我有一個數據庫命名關鍵字與3表(category_fields,taxonomy_category,taxonomy_domain)。我已經使其列表($ first_word),並只查詢$ first_word埠仍然即時通訊關鍵字: 類別: 域: 它沒有顯示1我在查詢中說過。 – Abby 2011-03-14 05:51:10

0

好以後$first_word = explode(" ", $question_text); $first_word是一個數組,因爲explode回報和陣列

因此

$query ="SELECT c.field_name,t.category_name, d.domain_name FROM category_fields c, taxonomy_category t, taxonomy_domain d 
WHERE c.category_Id = t.category_Id AND t.domain_Id = d.domain_Id 
AND c.field_name = '$first_word'"; 

應該

$query ="SELECT c.field_name,t.category_name, d.domain_name FROM category_fields c, taxonomy_category t, taxonomy_domain d 
WHERE c.category_Id = t.category_Id AND t.domain_Id = d.domain_Id 
AND c.field_name = '".mysql_escape_string($first_word[0])."'"; 

http://php.net/manual/en/function.mysql-escape-string.php什麼mysql_escape_string一樣。

+0

嗨,謝謝,我已經修復了代碼,但仍然沒有輸出。是否有任何問題?新代碼添加上面。 – Abby 2011-03-14 05:24:24