2010-08-09 79 views
0

好吧我使用strip_tags来摆脱用户标记帖子时的HTML,但是当用户输入类似于下一个示例中的内容时。PHP和MySQL问题

我得到五个输入到数据库中的空值,我不希望其他的一切都很好。我怎样才能阻止呢?

,,,,,,,, ,, ,,,,a,d, <html> , ruby-on-rails , ad, <html>

我碰到下面的输入数据库注意逗号没有进入数据库

, , , a, d, , ruby-on-rails, ad, 

这是我的代码。

$tags = preg_split('/,/', strip_tags($_POST['tag']), -1, PREG_SPLIT_NO_EMPTY); 
$tags = array_map('trim', $tags); 
$tags = str_replace(' ', '-', $tags); 

只有以下内容应该输入数据库。

a,d,ruby-on-rails,ad 

这是我插入的一个快速示例。

for ($x = 0; $x < count($tags); $x++){ 
    $query1 = "INSERT INTO tags (tag) VALUES ('" . mysqli_real_escape_string($mysqli, strtolower($tags[$x])) . "')"; 
} 
+1

你期望进入数据库? – 2010-08-09 17:38:53

+0

@Peter Bailey只能将'a,d,ruby-on-rails,ad'输入到数据库中。 – myTIME 2010-08-09 17:40:20

+0

发布您的INSERT语句。 – Joseph 2010-08-09 17:46:14

回答

0

为什么在将数据插入数据库之前不检查字符串是否为空?

for ($x = 0; $x < count($tags); $x++){ 
    if ($tags[$x] != '') { 
     $query1 = "INSERT INTO tags (tag) VALUES ('" . mysqli_real_escape_string($mysqli, strtolower($tags[$x])) . "')"; 
    } 
} 
1

您应该检查数值是否为empty()。如果是,请从数据库插入查询中省略它们或将它们标记为“空”。

在没有看到数据库表设计或任何必须处理数据库的代码的情况下,很难说我们如何更好地帮助您。

UPDATE

从插入查询新信息,这里是你如何运用空(未经测试的申请中的语法错误):

$tags = array_filter($tags, function ($v) { return !empty($v);}); 

for ($x = 0; $x < count($tags); $x++){ 
    $query1 = "INSERT INTO tags (tag) VALUES ('" . mysqli_real_escape_string($mysqli, strtolower($tags[$x])) . "')"; 
} 

应该从数组中删除空值,等待我没有犯一个简单的错误。

编辑

这里是一个选项,以做到这一点,但高雅。既然你已经在使用循环,你可以在循环中添加一个if。使用array_filter,它应该从数组中删除所有空值。

移动了函数定义。以上应该工作。

+0

我将如何添加到我的代码? – myTIME 2010-08-09 17:41:58

+0

我不想让他们进入数据库。 – myTIME 2010-08-09 17:43:13

+0

根据您的数据库架构,这可能是不可能的。如果你张贴了这些,我(我们)可以告诉你这是否可能适合你的情况。给定正常的数据库设计(如果是正常的),答案将是他们必须输入数据库。但是,再次,没有看到这个结构,这是不可能告诉的。 – 2010-08-09 17:46:08

0

我想你只需要以加强你拆什么。

我可能会做一些更喜欢这个

$input = ",,,,,,,, ,, ,,,,a,d, <html> , ruby-on-rails , ad, <html>"; 

$tags = preg_split("/(?:\s*,\s*)+/", trim(strip_tags($input), ', ')); 
$tags = array_map('mysqli_real_escape_string', str_replace(' ', '-', $tags)); 

然后,当它来到你的查询,需要MySQL的多重插入语法

$query1 = "INSERT INTO tags (tag) VALUES ('" . implode("'),('", $tags) . "');"; 

的优势,但是你可能想看看duplicate insert handling