Я работаю над существующей формой HTML, используемой для сбора данных о проекте, а затем вставляет эту запись проекта в базу данных MySQL с помощью PHP.Как преобразовать значение столбца MySQL из массива в строку
Внутри формы есть поле ввода с именем «staff []». Это поле представляет собой многоэлементный элемент, который позволяет пользователям выбирать более одного члена команды для обработки проекта.
<form action="" method="post">
<select multiple name="staff[]">
<option value="1">Mary</option>
<option value="2">Tyrone</option>
<option value="3">Rod</option>
<option value="4">Marcus</option>
<option value="5">David</option>
</select>
</form>
Например, пользователь выбирает Tyrone, Rod и David для данного конкретного проекта. Если мы вставим запись в этот момент, база данных сохранит только первое значение записи, которое будет идентификатором Tyrone в 2. Общая практика заключается в том, чтобы хранить каждый экземпляр в отдельной таблице, однако это не наша система и из-за ограничения 4 члена для каждого проекта, руководство предпочло бы, чтобы мы вставляли массив с разделителями-запятыми в столбе сотрудников каждого проекта для удобства.
Для того, чтобы справиться с этой проблемой мы создали цикл по каждому элементу, который перебирает выбранные значения из выпадающего меню, обеспечивая при этом Запятой не существует:
// Add array into one variable
$staff_count = count($_POST['project_staff']);
$i = 0;
foreach($_POST['project_staff'] as $staff) {
if (++$i === $staff_count) {
$member_variable .= $staff;
} else {
$member_variable .= $staff . ", ";
}
}
После нажатия представить , запускается вышеупомянутый скрипт (который генерирует значение массива (2, 3, 5)), и запись вставляется в таблицу «проекты» без проблем.
HEREIN LIES ПРОБЛЕМА.
Наконец, у нас есть страница просмотра, где мы будем называть всех сотрудников, назначенных проекту, на основе параметра запроса, который будет идентификатором проекта. Например, если предыдущий проект ID был 6, следующий URL будет использоваться:
site.com/project/view/?project=6
На этой странице, я могу сохранить список сотрудников, используя следующее переменное назначение:
$project = "SELECT * FROM projects WHERE project = 6";
$employee_chosen = $project['project_employee']
Если в столбце «персонала» принимаются только одного сотрудника (например, только одно значение 4), то переменная будет иметь значение одного числа:
$project['project_employee'] (4)
Я бы тогда быть в состоянии запустить дополнительный запрос для сотрудника с таким как:
$employee_chosen = $project['project_employee']; (4)
query2 = "SELECT * FROM employees WHERE employee_ID = $employee_chosen";
Это очень легко приведет к возвращению одного сотрудника, который был введен в колонку «штат». Тем не менее, мы имеем дело с массивом в этом значении столбца (2, 3, 5), и поэтому я опрошена следующее заявление:
$employee_list = $project['project_staff']; (2,3,5)
$query_employees = "SELECT * FROM employees WHERE employee_id IN ($employee_list)";
Когда я запускаю этот запрос, я получаю только первый результат от сотрудника ID 2 (как изначально указано в HTML-форме).
Однако, если я использую PhpMyAdmin непосредственно ввести три числа в виде строки:
$query_employees = "SELECT * FROM employees WHERE employee_id IN (2,3,5)";
Я получаю все три записи сотрудника.
Просто для того, чтобы колонна ARRAY был на самом деле ведет себя как STRING, я инициировал var_dump на величину:
echo var_dump($project['project_staff']);
После чего я получил следующую информацию:
string(7) "4, 5, 6"
ли у кого есть идеи?
Я доволен идеей, что я могу запросить значение, так как до этого я получил несколько ошибок, отличных от объекта и массива.
Заранее благодарим за любую помощь, которую вы можете предоставить.
Вы рассмотрели другую схему, с многие ко многим таблицы, которая имела ряд для каждого члена персонала, для каждого проекта? Затем это простое соединение, чтобы найти детали персонала, а не иметь запрос, разбор и запрос. –
@RowlandShaw Я полностью согласен. Тем не менее, клиент - это компания среднего размера, в которой у меня нет передышки, чтобы предлагать лучшие решения. Больше всего меня разочаровывает после var_dump, кажется, что массив признан как строка, но запрос возвращает только первый элемент в массиве. –
Просто конкатенация без круглых скобок: '$ query_employees =" SELECT * FROM сотрудников WHERE employee_id IN ". $ employee_list; ' – Parfait