Así que tengo esto:
var dates = { monday: req.body.monday, tuesday: req.body.tuesday, wednesday: req.body.wednesday, thursday: req.body.thursday, friday: req.body.friday, saturday: req.body.saturday, sunday: req.body.sunday } console.log(Object.values(dates))la forma en que esto funciona es que puede seleccionar una casilla de verificación en el front-end, y todos los resultados se enviarán al backend independientemente de si lo marcó o no. Ahora, necesito clasificar esos resultados para insertar solo los que fueron seleccionados (no tienen valores definidos, como la respuesta de matriz a continuación).
en el conjunto de resultados del bucle for, se devuelve así:
[ '2', undefined, undefined, undefined, undefined, undefined, '1' ] como puede ver, 5/7 no están definidos. Así que tengo una consulta de inserción estándar en SQL, pero necesito insertar solo los valores que están definidos. así que en mi cabeza estoy pensando insert into clients where Object.values(dates) != undefined , pero sé que eso no está bien, especialmente porque esa es ahora la forma en que funciona la consulta sql lol.
Tengo esto:
var addclient = "insert into clients (NAME, EMAIL, PHONE_NUMBER, TRAINER_NAME, HOUR, MINUTE, DATES) values ('" + name + "', '" + email + "', '" + phonenumber + "', '" + req.session.username + "', '" + hour + "', '" + minute + "', '" + dates + "')";¿Cómo puedo hacer esto?
Además de la pregunta real, usar una entrada no saneada para crear una cadena sql en la forma en que se muestra en el fragmento es un gran riesgo. Permite a un atacante realizar una inyección de sql. Vea más aquí: https://owasp.org/www-community/attacks/SQL_Injection
Si espera insertar los valores como una cadena delimitada por comas, puede lograrlo haciendo lo siguiente:
const formattedString = Object.values(dates).filter(el => el).join(', '); var addclient = "insert into clients (NAME, EMAIL, PHONE_NUMBER, TRAINER_NAME, HOUR, MINUTE, DATES) values ('" + name + "', '" + email + "', '" + phonenumber + "', '" + req.session.username + "', '" + hour + "', '" + minute + "', '" + formattedString + "')";Tenga en cuenta que cambié las "fechas" en su método de inserción a la nueva "cadena formateada". Dado su ejemplo, formattedString sería "2, 1".