Вставьте теги select2 jQuery массив в PHP - PullRequest
0 голосов
/ 17 февраля 2020

Я видел много потоков в stackoverflow об этой проблеме, но я не смог этого добиться, поэтому я снова сделал этот пост. Я использую select2 jQuery plugin, где я хочу вставить теги в SQL, используя PHP. Как [Data, Data, Data]

Я пытаюсь сделать то, что я узнаю через Google, ну, я профессионал в этом, я новичок в PHP. Пожалуйста, помогите 'Как мне вставить это в БД, где показывают , между двумя словами, как я упоминал выше в 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>

1 Ответ

1 голос
/ 18 февраля 2020

Ваша форма, вероятно, отправляется следующим образом:

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>
...