Объединение нескольких пользовательских записей и отправка в одну запись базы данных MySQL.

0

Я ссылаюсь на вопрос здесь: Могу ли я объединить несколько строк MySQL в одно поле?

В этом вопросе несколько строк столбца перечислены и разделены ",", используя функцию GROUP_CONCAT. Я хочу добиться чего-то наоборот, объединив несколько пользовательских входов в одну запись базы данных. Что-то вроде этого:

<form action="server.php" method="POST">
    <div>
        <input type="text" name="value1">
        <input type="text" name="value2">
        <input type="text" name="value3">
        <button type="submit" name="submit">submit</button>
    </div>  
</form>

и php:

<?php
if (isset($_POST['submit'])) {  
    $value1 = mysqli_real_escape_string($conn, $_POST['value1']);
    $value2 = mysqli_real_escape_string($conn, $_POST['value2']);
    $value3 = mysqli_real_escape_string($conn, $_POST['value3']);

    $sql = "INSERT INTO database (col1)
    VALUES GROUP_CONCAT('$value1', '$value2', '$value3');";
    mysqli_query($conn, $sql);
    header("Location: ../web_page/client_database_page.php?add_client=success");
}
?>

Я знаю, что некоторые из вас скажут, что это не будет хорошей практикой, и я должен иметь отдельный столбец для каждого входа пользователя, однако есть причина не делать этого таким образом. Входы пользователя добавляются на основе количества переменных из другой базы данных. В этой базе данных пользователь может вставлять дополнительные пользовательские входы с веб-сайта, но он не будет автоматически добавлять столбец во входную базу данных. Таким образом, одна строка столбцов должна содержать все пользовательские входы и позже разделяться для интерпретации при вызове из базы данных.

У кого-нибудь есть идеи?

  • 0
    «Однако есть причина, по которой вы так не поступаете» - ваша причина ложная; Читайте дальше о нормализации базы данных - это ответ, а не то, что вы пытаетесь сделать здесь.
  • 0
    Я знаком с нормализацией базы данных, спасибо за ваш проницательный комментарий.
Показать ещё 5 комментариев
Теги:

2 ответа

0
Лучший ответ

Как насчет группировки ваших входных значений в виде массива, а затем использования функции implode() в PHP перед вставкой в БД, например:

<form action="server.php" method="POST">
    <div>
        <input type="text" name="values[]">
        <input type="text" name="values[]">
        <input type="text" name="values[]">
        <button type="submit" name="submit">submit</button>
    </div>  
</form>

Затем в PHP:

if (isset($_POST['submit'])) {  
    $values = $_POST['values'];
    $escaped_values = array_map([$conn, 'mysqli_real_escape_string'], $values);
    $concat_values = implode(",", $escaped_values);

    $sql = "INSERT INTO database (col1) VALUES ('$concat_values');";
    mysqli_query($conn, $sql);
    header("Location: ../web_page/client_database_page.php?add_client=success");
}

Здесь я использовал запятую , как разделитель для каждого значения. Просто измените его по своему усмотрению.

РЕДАКТИРОВАТЬ:
Другим решением было бы использовать JSON для этого, чтобы вы могли легко получить доступ к данным при их извлечении. В зависимости от вашей версии MySQL вы можете использовать тип данных JSON для столбца/поля col1.

ALTER TABLE 'table_name' CHANGE COLUMN 'col1' 'col1' JSON;

Затем измените код на:

$json = json_encode($_POST['values']);
$sql = "INSERT INTO database (col1) VALUES ('$json');";

А потом, когда вы извлекаете данные, вы можете сделать что-то вроде:

$values = json_decode($row['col1'], true);

Затем вы можете перебирать несколько тегов <input> со значениями, взятыми из db.

  • 0
    Я думаю, что это приближается к моему решению, можно продолжить обсуждение, чтобы я мог подробно изложить свой сценарий, пожалуйста?
  • 0
    @ Маришка, продолжай ...
Показать ещё 7 комментариев
0

Вы можете просто вводить значения с помощью PHP. Для этого не нужно использовать GROUP_CONCAT. Попробуйте код, как показано ниже:

$sql = "INSERT INTO database (col1) VALUES ('$value1 $value2 $value3');";

Примечание: Значения могут быть разделены запятой , или любой другой разделитель вместо пространства.

  • 0
    Как насчет того, если несколько имен совпадают? Таким образом, пользовательский ввод 1 name="value" , а пользовательский ввод 2 name="value" и т. Д. Количество входов зависит от того, сколько записей содержится в справочной базе данных и систематически добавляются на страницу в виде копий. Все с таким образом имеют одну переменную, например, $value для нескольких пользовательских вводов.
  • 0
    Это зависит от вашего кода, от того, как вы кодировали вещи. Здесь решение предоставлено для вашей текущей проблемы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню