Ваша форма, вероятно, отправляется следующим образом:
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()
на запятой, тогда l oop результаты explode()
.
Я бы, вероятно, использовал там trim()
, чтобы удалить пустое место, просто incase. Кроме того, если вы хотите убедиться, что они все отформатированы одинаково, вы можете сделать 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>