I have input to insert data for a book like this
<div class="form-group">
<label for="Id">Id</label>
<input type="text" class="form-control" id="Id" placeholder="Id" required>
</div>
<div class="form-group">
<label for="Title">Titre du livre</label>
<input type="text" class="form-control" id="Title" placeholder="Titre du livre" required>
</div>
<div class="form-group">
<label for="Contenu">Contenu</label>
<textarea class="form-control" id="Contenu" rows="5" required></textarea>
</div>
<div class="form-group">
<label for="Prix">Prix</label>
<input type="text" class="form-control" id="Prix" placeholder="Prix" required>
</div>
<select multiple="" class="form-control" id="selectGenre" required="">
<option value="">Choisissez un genre</option>
<option value="1">Roman</option><option value="2">Biographie</option><option value="3">Comédie</option><option value="4">Encyclique</option><option value="5">Médicale</option><option value="6">Science</option><option value="7">Culture</option><option value="8">Politique</option></select>
A book has an id/title/content/price and it can have one or several genres
I recover each value to insert it in JSON to launch a POST request.
JSON example of a book with only one genre
{"Id":1,"Title":"FluconazoleE","Contenu":"nonummy ultricies ...","Prix":19,"Genre":[{"Id":6,"Nom":"Science"}]}
JSON example of a book with several genres
{"Id":1500,"Title":"FluconazoleE","Contenu":"nsenectus et ...","Prix":19,"Genre":[{"Id":6,"Nom":"Science"},{"Id":2,"Nom":"Biographie"}]}
My function to send a POST request
function addItem() {
const addIdTextbox = document.getElementById('Id');
const addTitleTextbox = document.getElementById('Title');
const addContenuTextbox = document.getElementById('Contenu');
const addPrixTextbox = document.getElementById('Prix');
const addGenreTextbox = document.getElementById('selectGenre');
const item = {
id: Number(addIdTextbox.value.trim()),
title: addTitleTextbox.value.trim(),
contenu: addContenuTextbox.value.trim(),
prix: Number(addPrixTextbox.value.trim()),
Genre: [{ "Id": Number(addGenreTextbox.value.trim()), "Nom": addGenreTextbox.options[addGenreTextbox.selectedIndex].text.trim() }]
};
fetch(uriBook, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(item)
})
.then(response => response.json())
.then(() => {
getItems();
addNameTextbox.value = '';
})
.catch(error => console.error('Unable to add item.', error));
alert('Votre livre a bien ete ajoute !');
window.location.href = 'liste-livres.html';
}
The problem is to send multiple choices in the genres, I can retrieve them with this code
const addGenreTextbox = document.getElementById('selectGenre');
var idGenre = [];
var nomGenre = [];
for (var option of addGenreTextbox.options) {
if (option.selected) {
idGenre.push(addGenreTextbox.value.trim());
nomGenre.push(option[addGenreTextbox.selectedIndex].text.trim());
}
}
But my question is how to process the tables to insert them in the const item
to have a JSON of a book with one or several genre