Интересная проблема здесь.Select2 - написать mulitple в базе данных, двойную запись
Я использую Select2, чтобы пользователь мог заполнить поле выбора несколькими значениями, которые затем записываются в таблицу базы данных. Однако, вставляя значения в таблицу, я замечаю, что последнее значение поля выбора всегда записывается дважды. Я подозреваю, что проблема с циклом foreach
, но я не уверен, как это решить.
Поле выбора является частью модальности, которое после нажатия кнопки SAVE отправляется через AJAX в файл ajax.php, где обрабатывается вставка. Тот же подход развертывается несколько раз на веб-сайте без проблем, проблема возникает только в том случае, если это поле multiple
.
HTML
<!-- Department -->
<label>Department Name:</label>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-bars"></i></span>
<input type="text" class="form-control" id="addDeptName" name="addDeptName" />
</div>
<!-- /.Department -->
<p> </p>
<!-- Positions -->
<label>Department Positions:</label>
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-briefcase"></i></span>
<select class="form-control select2" style="width:100%;" id="addDeptPositions" name="addDeptPositions" multiple>
<option value="Option1">Option1</option>
<option value="Option2">Option2</option>
<option value="Option3">Option3</option>
<option value="Option4">Option4</option>
</select>
</div>
<!-- /.positions -->
JS
// ADD NEW RECORD TO DATABASE
$("#NewDepartmentButton").click(function() {
$("#addDeptName").focus();
// check that input fields are not empty
if($("#addDeptName").val()!="" && $("#addDeptPositions").val()!="") {
$.ajax({
url: "../../plugins/MySQL/ajax_action.php",
type: "POST",
//async: true,
data: { action:"new_department",Department_Name:$("#addDeptName").val(),Department_Positions:$("#addDeptPositions").val()}, // form data to post goes here as a json object
dataType: "html",
success: function(data) {
$('#department_output').html(data);
drawVisualization();
},
});
} else {
//notify the user they need to enter data
alert("Please enter a valid Department Name.");
return;
}
// close modal and refresh page
$('#NewDepartmentModal').modal('hide');
setTimeout(function(){location.reload()}, 2000);
// Reload Datatables
//$('#department_table').DataTable().ajax.reload();
// refresh entire website
//location.reload();
return;
});
PHP
if(isset($_POST['action']) && ($_POST['action']=='new_department')) {
// include connection details
include 'connect_db.php';
//Open a new connection to the MySQL server
$db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
//Output any connection error
if ($db->connect_error) {
die('Error : ('. $db->connect_errno .') '. $db->connect_error);
}
// get variables and sanitize
$addDeptName = mysqli_real_escape_string($db,$_POST['Department_Name']);
$addDeptPositions = $_POST['Department_Positions'];
// create new record
foreach ($addDeptPositions as $c) {
$sql = "INSERT INTO `qci_departments` (`Department`,`Positions`) VALUES ('".$addDeptName."', '".mysqli_real_escape_string($db, $c)."')";
$db->query($sql);
}
if (!$db->query($sql)) {
echo "
<div class=\"alert alert-danger alert-dismissible\">
<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>
<h4><i class=\"icon fa fa-ban\"></i> Error!</h4>
There was an error while excuting this query.<br />
(" . $db->errno . ") " . $db->error . "
</div>";
}
echo "
<div class=\"alert alert-success alert-dismissible\">
<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>
<h4><i class=\"icon fa fa-check\"></i> Alert!</h4>
Success, record updated successfully. Refreshing database now...
</div>";
//close connection
$db->close();
}
База данных Результат: например. если позиции «Менеджер счета» и «Счет дебиторов Officer» выбираются из множественного поля:
EDIT: проблема кажется связанным с представлением массива, так как это то, что следует выбрать значение выглядит следующим образом:
Array ([0] => Accounting Manager [1] => Accounts Receivable Officer) Array ([0] => Accounting Manager [1] => Accounts Receivable Officer)
EDIT 2: addded в return;
к коду JS
печати массив '$ addDeptPositions' и вставить его в вопрос. Также добавьте код select2 jquery, если он добавлен. – RJParikh
, если вы используете select с несколькими параметрами, вы не думаете, что 'name =" addDeptPositions "должно быть' name = "addDeptPositions []" ' –
@HappyCoding, когда оно напрямую отправляется через элемент'