2011-03-14 80 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