2010-08-02 3 views
2

Хорошо, когда пользователь вводит теги в базу данных, я выделяю элементы HTML и разделяю теги с помощью запятой. Но по какой-то причине, когда я выделяю теги html, в базу данных отправляется пустое значение вместе с другими тегами, например если пользователь вводит следующие данные.PHP пользователь ввел данные проблемы?

<html>,tag2,tag3,tag4 //an empty value is entered 
,tag2,tag3,tag4 //this will also enter an empty value 

Тег html будет удален, но пустое значение будет передано в базу данных, как я могу остановить это?

Я думаю, что это как-то связано с этой частью моего кода.

$tags = explode(",", $_POST['tag']); 
+1

как вы удаляете HTML? – carlsborg

+0

'$ tag = mysqli_real_escape_string ($ mysqli, trim (strip_tags ($ purifier-> purify ($ _ POST ['tag']))));' – pHpNUT

ответ

4

Попробуйте

array_filter(//remove elements that evaluate to FALSE (includes empty ones) 
    array_map('trim', //trim space around tags 
     array_map('strip_tags', //remove html tags from the... tags 
      explode(",", $_POST['tag'])))); //separate on comma 
+0

Умная вложенность там! +1, но для новичка это может быть запутанным. – alex

+0

это выводит мои теги и все еще вводит пустую ценность :( – pHpNUT

+0

@pHp См. Здесь: http://codepad.viper-7.com/X5GReo – Artefacto

0

Это позволит удалить пустые теги:

$tags = explode(",", $_POST['tag']); 
$new_set = array(); 

foreach ($tags as $tag){ 

    if ($tag == ''){ 

    $new_set[] = $tag; 
    } 
} 

$tags = implode(',', $new); 

// now store $tags into your database. 
+0

Есть несколько ошибок там ...' $ new' будет null. И вы добавляете элементы массива, если значение равно пустой строке. – alex

0

Удалит все пустые элементы массива.

foreach($tags as $key => $tag) { 
    if (empty($tag)) unset($tags[$key]); 
} 
0

Если запустить

explode(",", ",apple,pear,banana"); 

Вы получите массив, как этот:

array('', 'apple', 'pear', 'banana'); 

Функция взрываются() разбивает строку везде, где есть запятая. Есть три запятых, что означает, что он разделит строку на четыре. Поскольку перед входной строкой нет первой запятой, это означает, что первым результатом будет пустая строка.

Если вы этого не хотите, вам нужно отфильтровать любые пустые строки из результата explode(). Вы можете использовать array_filter() для этого:

array_filter(explode(",", ",apple,pear,banana")); 
Смежные вопросы