在 PHP 中插入 select2 标签 jQuery 数组
Insert select2 tags jQuery array in PHP
我在 Whosebug 上看到了很多关于这个问题的帖子,但我无法做到这一点,所以再次 post。我正在使用 select2 jQuery plugin
,我想使用 PHP 在 SQL 中插入标签。喜欢 [Data, Data, Data
]
我尝试做我通过 google 学到的东西,我在这方面很专业,我是 PHP 的新手。
请帮忙'How I Insert this in DB where show ,
between two words as above I mentioned in Like
'
我的代码是
if(isset($_POST['submit'])) {
$name = "Your_Name";
$email = "Your_Email";
$stmt = $con->prepare("INSERT INTO `test` (`name`, `email`, `color_name`) VALUES (':name',':email',':color')");
foreach ($data as $row)
{
':name' = $name;
':email' = $email;
':color' = 'MYStatus'; //I want mention here Select2 Tags Data and insert in DB where [, (space)] every two words. like [Green, Red, Blue, Pink]
$stmt->execute();
}
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://shashani-humanth.github.io/Notebook-AdminPanel/js/select2/select2.css">
</head>
<body>
<form class="bs-example form-horizontal" id="formid" method="POST" onSubmit="return validate();">
<div class="form-group col-sm-6">
<div>
<input type="hidden" name="selectname[]" id="select2-tags" style="width:260px" value="brown"/>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button type="submit" name="submit" class="btn btn-sm btn-default" id="submit">Save and Publish</button>
</div>
</div>
</form>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/jquery.min.js"></script>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/bootstrap.js"></script>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/select2/select2.min.js"></script>
<script type="text/javascript" language="javascript">
if ($.fn.select2) {
$("#select2-option").select2();
$("#select2-tags").select2({
tags:["Red", "Green", "Blue", "Pink"],
tokenSeparators: [",", " "]}
);
}
</script>
</body>
</html>
您的表单很可能是这样发送的:
Array
(
[selectname] => Array
(
[0] => brown,Green,Blue
)
)
因此,既然您希望将其格式化为 brown, Green, Blue
,那么您可以 explode()
和 implode()
或者只使用 str_replace()
:
# Exploding, imploding
$tags = implode(", ", explode(",", $_POST['selectname'][0]));
# String replace would be
$tags = str_replace(',', ', ', $_POST['selectname'][0]);
如果您尝试拆分该字符串以分别插入每个标签,您可以在逗号上使用 explode()
,然后循环 explode()
.
的结果
我可能会在那里使用 trim()
来删除空的 space,以防万一。另外,如果你想确保它们的格式都相同,你可能想做 ucwords()
以确保每个单词的首字母都是大写 (你的默认值 brown
都是小写的,重置的第一个字母是大写的).
如果你使用方法 1,你可以应用 ucfirst()
和 trim()
如果你在展开的字符串上使用 array_map()
:
# A full combination of functions
$tags = implode(", ", array_map(function($v){
return ucfirst(trim($v));
}, explode(",", $_POST['selectname'][0])));
会给你字符串:
Brown, Green, Blue
编辑:
由于您实际上是按行存储,因此您可以使用 select
:
取回数组
function getColorTags($name, $con)
{
# Query by name, just return the color_name field though
$query = $con->prepare("SELECT `color_name` FROM `test` WHERE `name` = ?");
# Execute the query with bind value
$query->execute([$name]);
# Loop the results
while($result = $query->fetch(\PDO::FETCH_ASSOC)) {
# Store the tags
$row[] = $result['color_name'];
}
# Return the tags or an empty array
return (isset($row))? $row : [];
}
使用:
# Fetch the tags by name, make sure to inject the database connection
$tags = getColorTags('Some Name', $con);
# Print out the array
print_r($tags);
编辑#2
要在同一页上同时执行这两个操作,您只需使用 json_encode()
:
<?php
function insertTags($data, $email, $name, $con)
{
$stmt = $con->prepare("INSERT INTO `test` (`name`, `email`, `color_name`) VALUES (?,?,?)");
foreach ($data as $string) {
# Explode and filter the tags from the js
$arr = array_filter(array_map('trim', explode(',', $string)));
# Loop the "selectname"
foreach($arr as $tag) {
# Execute all the rows
$stmt->execute([$name, $email, $tag]);
}
}
}
# This fetches using the email as the primary key
function getColorTags($email, $con)
{
# Query by name, just return the color_name field though
$query = $con->prepare("SELECT `color_name` FROM `test` WHERE `email` = ?");
# Execute the query with bind value
$query->execute([$name]);
# Loop the results
while($result = $query->fetch(\PDO::FETCH_ASSOC)) {
# Store the tags
$row[] = $result['color_name'];
}
# Return the tags or an empty array
return (isset($row))? $row : [];
}
# Pull these out so you can use them in general
$name = "Your_Name"; // Assuming this is from the session
$email = "Your_Email"; // Assuming this is from the session
# Here is where you insert
if(isset($_POST['submit'])) {
# This will insert your tags separately on new rows
insertTags($_POST['selectname'], $email, $name, $con);
# This will pull them back from the database (helpful if they already have some in there)
$tags = getColorTags($email, $con);
}
# Here you check if there are tags already generated after submission,
# if not, then pull them.
if(!isset($tags))
$tags = getColorTags($email, $con);
?><!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://shashani-humanth.github.io/Notebook-AdminPanel/js/select2/select2.css">
</head>
<body>
<form class="bs-example form-horizontal" id="formid" method="POST" onSubmit="return validate();">
<div class="form-group col-sm-6">
<div>
<input type="hidden" name="selectname[]" id="select2-tags" style="width:260px" value="brown"/>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button type="submit" name="submit" class="btn btn-sm btn-default" id="submit">Save and Publish</button>
</div>
</div>
</form>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/jquery.min.js"></script>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/bootstrap.js"></script>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/select2/select2.min.js"></script>
<script type="text/javascript" language="javascript">
if ($.fn.select2) {
$("#select2-option").select2();
$("#select2-tags").select2({
// Now use this native function to echo the array back to JS
tags: <?php echo json_encode($tags) ?>,
tokenSeparators: [",", " "]}
);
}
</script>
</body>
</html>
我在 Whosebug 上看到了很多关于这个问题的帖子,但我无法做到这一点,所以再次 post。我正在使用 select2 jQuery plugin
,我想使用 PHP 在 SQL 中插入标签。喜欢 [Data, Data, Data
]
我尝试做我通过 google 学到的东西,我在这方面很专业,我是 PHP 的新手。
请帮忙'How I Insert this in DB where show ,
between two words as above I mentioned in Like
'
我的代码是
if(isset($_POST['submit'])) {
$name = "Your_Name";
$email = "Your_Email";
$stmt = $con->prepare("INSERT INTO `test` (`name`, `email`, `color_name`) VALUES (':name',':email',':color')");
foreach ($data as $row)
{
':name' = $name;
':email' = $email;
':color' = 'MYStatus'; //I want mention here Select2 Tags Data and insert in DB where [, (space)] every two words. like [Green, Red, Blue, Pink]
$stmt->execute();
}
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://shashani-humanth.github.io/Notebook-AdminPanel/js/select2/select2.css">
</head>
<body>
<form class="bs-example form-horizontal" id="formid" method="POST" onSubmit="return validate();">
<div class="form-group col-sm-6">
<div>
<input type="hidden" name="selectname[]" id="select2-tags" style="width:260px" value="brown"/>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button type="submit" name="submit" class="btn btn-sm btn-default" id="submit">Save and Publish</button>
</div>
</div>
</form>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/jquery.min.js"></script>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/bootstrap.js"></script>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/select2/select2.min.js"></script>
<script type="text/javascript" language="javascript">
if ($.fn.select2) {
$("#select2-option").select2();
$("#select2-tags").select2({
tags:["Red", "Green", "Blue", "Pink"],
tokenSeparators: [",", " "]}
);
}
</script>
</body>
</html>
您的表单很可能是这样发送的:
Array
(
[selectname] => Array
(
[0] => brown,Green,Blue
)
)
因此,既然您希望将其格式化为 brown, Green, Blue
,那么您可以 explode()
和 implode()
或者只使用 str_replace()
:
# Exploding, imploding
$tags = implode(", ", explode(",", $_POST['selectname'][0]));
# String replace would be
$tags = str_replace(',', ', ', $_POST['selectname'][0]);
如果您尝试拆分该字符串以分别插入每个标签,您可以在逗号上使用 explode()
,然后循环 explode()
.
我可能会在那里使用 trim()
来删除空的 space,以防万一。另外,如果你想确保它们的格式都相同,你可能想做 ucwords()
以确保每个单词的首字母都是大写 (你的默认值 brown
都是小写的,重置的第一个字母是大写的).
如果你使用方法 1,你可以应用 ucfirst()
和 trim()
如果你在展开的字符串上使用 array_map()
:
# A full combination of functions
$tags = implode(", ", array_map(function($v){
return ucfirst(trim($v));
}, explode(",", $_POST['selectname'][0])));
会给你字符串:
Brown, Green, Blue
编辑:
由于您实际上是按行存储,因此您可以使用 select
:
function getColorTags($name, $con)
{
# Query by name, just return the color_name field though
$query = $con->prepare("SELECT `color_name` FROM `test` WHERE `name` = ?");
# Execute the query with bind value
$query->execute([$name]);
# Loop the results
while($result = $query->fetch(\PDO::FETCH_ASSOC)) {
# Store the tags
$row[] = $result['color_name'];
}
# Return the tags or an empty array
return (isset($row))? $row : [];
}
使用:
# Fetch the tags by name, make sure to inject the database connection
$tags = getColorTags('Some Name', $con);
# Print out the array
print_r($tags);
编辑#2
要在同一页上同时执行这两个操作,您只需使用 json_encode()
:
<?php
function insertTags($data, $email, $name, $con)
{
$stmt = $con->prepare("INSERT INTO `test` (`name`, `email`, `color_name`) VALUES (?,?,?)");
foreach ($data as $string) {
# Explode and filter the tags from the js
$arr = array_filter(array_map('trim', explode(',', $string)));
# Loop the "selectname"
foreach($arr as $tag) {
# Execute all the rows
$stmt->execute([$name, $email, $tag]);
}
}
}
# This fetches using the email as the primary key
function getColorTags($email, $con)
{
# Query by name, just return the color_name field though
$query = $con->prepare("SELECT `color_name` FROM `test` WHERE `email` = ?");
# Execute the query with bind value
$query->execute([$name]);
# Loop the results
while($result = $query->fetch(\PDO::FETCH_ASSOC)) {
# Store the tags
$row[] = $result['color_name'];
}
# Return the tags or an empty array
return (isset($row))? $row : [];
}
# Pull these out so you can use them in general
$name = "Your_Name"; // Assuming this is from the session
$email = "Your_Email"; // Assuming this is from the session
# Here is where you insert
if(isset($_POST['submit'])) {
# This will insert your tags separately on new rows
insertTags($_POST['selectname'], $email, $name, $con);
# This will pull them back from the database (helpful if they already have some in there)
$tags = getColorTags($email, $con);
}
# Here you check if there are tags already generated after submission,
# if not, then pull them.
if(!isset($tags))
$tags = getColorTags($email, $con);
?><!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://shashani-humanth.github.io/Notebook-AdminPanel/js/select2/select2.css">
</head>
<body>
<form class="bs-example form-horizontal" id="formid" method="POST" onSubmit="return validate();">
<div class="form-group col-sm-6">
<div>
<input type="hidden" name="selectname[]" id="select2-tags" style="width:260px" value="brown"/>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button type="submit" name="submit" class="btn btn-sm btn-default" id="submit">Save and Publish</button>
</div>
</div>
</form>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/jquery.min.js"></script>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/bootstrap.js"></script>
<script src="http://shashani-humanth.github.io/Notebook-AdminPanel/js/select2/select2.min.js"></script>
<script type="text/javascript" language="javascript">
if ($.fn.select2) {
$("#select2-option").select2();
$("#select2-tags").select2({
// Now use this native function to echo the array back to JS
tags: <?php echo json_encode($tags) ?>,
tokenSeparators: [",", " "]}
);
}
</script>
</body>
</html>