2010-08-09 173 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