J'ai une page qui ressemble à ceci :
Ce que j'essaie de faire, c'est de comparer la sélection "Date des vacances :" avec les valeurs des lignes dans les colonnes "Date" du tableau situé en dessous. J'ai essayé d'utiliser un code comme celui-ci :
function dateChk(){
var dt1 = document.getElementById('PHDate').value;
var dt2 = document.getElementById('phdateadd').value;
if (dt1 == dt2) {
alert("This date already assigned, please try again.");
document.getElementById('phdateadd').value = 0;
}
}
Mais cela ne fonctionne que sur la première ligne. J'ai alors pensé à faire un tableau comme :
<input id="phdateadd" name="phdateadd" type="date" onchange="myFunction()" required>
<p id="demo"></p>
<script>
var dates= ["2021-01-01", "2021-02-12", "2021-02-13", "2021-04-02", "2021-05-01",
"2021-05-13", "2021-05-14", "2021-05-26", "2021-05-30", "2021-05-31",
"2021-07-06", "2021-07-20", "2021-08-10", "2021-08-31", "2021-09-16",
"2021-10-02", "2021-10-19", "2021-11-04", "2021-12-25"];
function checkDate(date) {
return date == document.getElementById("phdateadd").value;
}
function myFunction() {
document.getElementById("demo").innerHTML = dates.find(checkDate);
var chk = document.getElementById("demo").innerHTML;
if ( chk != "undefined" ) {
alert("This date already assigned, please try again.");
document.getElementById("phdateadd").value = 0;}
}
</script>
Cela fonctionne, mais je dois spécifier toutes les dates de cette colonne sous forme de tableau. J'ai l'idée de passer des données à partir d'une requête MySQL avec les valeurs de date formatées de manière similaire au tableau, mais cela ne semble pas être reconnu. Voici la requête :
SELECT CONCAT('["',GROUP_CONCAT(phdate SEPARATOR '", "'),'"]') As arrdate FROM table1;
which returns
["2021-01-01", "2021-02-12", "2021-02-13", "2021-04-02", "2021-05-01", "2021-05-13", "2021-05-14",
"2021-05-26", "2021-05-30", "2021-05-31", "2021-07-06", "2021-07-20", "2021-08-10", "2021-08-31",
"2021-09-16", "2021-10-02", "2021-10-19", "2021-11-04", "2021-12-25"]
Donc, j'ai pris ce résultat et je l'ai montré dans la page :
<% phDates.forEach((phDates, index) => { %>
<tr><td><p id="phdates" name="phdates" value="<%= phDates.arrdate %>"><%= phDates.arrdate %>
<% }) %></p><p id="demo" name="demo">b</p><br><p id="demo1" name="demo1">a</p></td></tr>
<script>
var dates = document.getElementById("phdates").innerHTML;
document.getElementById("demo").innerHTML = dates;
</script>
Comme vous pouvez le constater arrdate
qui vient de la requête MySQL et demo
présente un format similaire. Le site demo
est différente lorsque je spécifie le tableau dans var dates
(comme dans mon extrait ci-dessus) :
Si je fais en sorte que le MySQL renvoie les données comme ci-dessus, il ne les reconnaît toujours pas. Je pense que si cette méthode est viable, je n'ai même pas besoin de comparer la date sélectionnée à la colonne de la table. J'ai fait un test en utilisant $( "div" ).toArray()
mais je n'arrive pas non plus à le faire fonctionner.
Je pense que cela pourrait être la solution directe pour moi, mais je me demande comment formater la valeur du résultat MySQL pour qu'elle corresponde au format correct du tableau javascript ? Ou laisser la sortie MySQL telle quelle et convertir cette valeur en une valeur compatible avec le tableau javascript. Je ne peux m'empêcher de penser que la solution pourrait être simple mais cela fait deux jours que je cherche et je n'en ai pas trouvé.