如何使用 Select2 创建新标签并保存到数据库

Posted

技术标签:

【中文标题】如何使用 Select2 创建新标签并保存到数据库【英文标题】:How to create new tags with Select2 AND save to database 【发布时间】:2016-10-16 15:16:26 【问题描述】:

所以,我在使用 Select2 时遇到了困难。我希望用户能够在选择列表中进行搜索,并在未找到搜索结果时创建新标签。创建新标签不是问题。主要的事情 - 在大多数论坛中令人惊讶地被忽视 - 是将新闻标签插入数据库。我是 Select2 的新手,所以我想举一个完整的例子。我在这个项目上使用 php,所以,如果有办法用 PHP 做到这一点,那将非常有帮助。

这是我的代码:

$('#caracteristicas').select2(theme:'bootstrap', width:null, placeholder:'Selecione', allowClear:true)
<?php 
$q = mysqli_query($con, "select id, descricao from caracteristicas");
if(mysqli_num_rows($q)>(0))

?>
<div class="form-group">  
	<label for="caracteristicas">Selecione um  ou mais resultados</label>
	<select name="caracteristicas[]" id="caracteristicas" class="form-control" multiple="multiple">
		<option value="">Selecione</option>
		<?php                    
		while($linhas = mysqli_fetch_array($q)):
		?>
		<option value="<?=$linhas["id"]?>">
          <?=strlen($linhas["descricao"])>50 ? substr($linhas["descricao"], 0, 50)."..." : $linhas["descricao"]?>
        </option>
		<?php endwhile;?>
	</select>
</div>
<?php  mysqli_close($con);?>

注意:我使用的是 Select2 4.0

【问题讨论】:

【参考方案1】:

刚刚想出了如何做到这一点。我注意到用户创建的标签没有 id,这意味着选项值将是一个字符串,而不是一个数字。所以,我所要做的就是告诉 PHP 以不同的方式处理字符串值。这是我解决这个问题的方法:

for($i=0; $i<count($opcoes); $i++)

	if(!is_numeric($opcoes[$i]))
	
		if(!mysqli_query($con, "INSERT INTO `atividades`(`id`, `descricao`) VALUES (NULL, '".$opcoes[$i]."')"))
		
			$msg_caracteristicas[$i] = "A atividade n&atilde;o foi cadastrada, <strong>erro <a href='http://randomurl.com' target='_blank'>#".mysqli_errno($con)."</a></strong> - \"".mysqli_error($con)."\"";	
		
		else
		
			echo "<script>alert('deu certo');</script>";	
		
	

【讨论】:

我对这个概念投了赞成票。我使用的是不同的编码语言,所以我无法评论作为答案提供的 PHP 代码是否有效。 我认为如果用户输入数字而不是字符串会出错

以上是关于如何使用 Select2 创建新标签并保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章

Select2 用于创建新标签的事件

Select2 用于创建新标签的事件

键入新标签时 Select2 失去焦点

如何将 Select2 默认的新标签键“tab”更改为“space”?

在 express 中将新的 select2 选项标签写入本地数据库

Select2:选择新标签后更新选项