¿Como puedo corregir este error en PHP Índice indefinido: idHabitacion?

Estoy llevando este proyecto de Hotel junto con compañeros de mi universidad, el cual me toco realizar las habitaciones con 15 botones el problema que tengo es lo siguiente.

Al momento de dar clic en este caso doy clic al botón H 1 me salta una alerta de error:

<br />
<b>Notice</b>:  Undefined index: idHabitacion in <b>C:\xampp\htdocs\ProyectoHotel\Update.php</b> on line <b>7</b><br />
No se recibieron correctamente ID de habitación y estatus

Código en Javascript

function estatusHabitacion(e) {
  let btn = e.target;
  btn.classList.toggle("rentado");
  let rentado = btn.classList.contains("rentado");
  let habitacion = btn.textContent.replace("H", "");
  console.log(habitacion, rentado);
  habitacion = {
    idHabitacion: habitacion,
    estatus: rentado ? "Ocupado" : "Disponible",
  };
  fetch("Update.php", {
    method: "POST",
    body: JSON.stringify(habitacion),
    headers: {
      "Content-Type": "application/json;charset=utf-8",
    },
  })
    .then((resp) => {
      if (resp.ok) {
        return resp.text();
      }
      console.log("Error de petición de Ajax con el servidor");
    })
    .then((text) => {
      alert(text);
    })
    .catch((e) => {
      console.log("Hubo un problema con la petición Fetch:" + e.message);
    });
}
document.addEventListener("DOMContentLoaded", () => {
  let habitacion = document.querySelectorAll(".habitacion");
  habitacion.forEach((habitacion) => {
    habitacion.addEventListener("click", estatusHabitacion);
  });
});

Update.php

<?php
   include("conexion.php");
   $idHabitacion = (int)$_POST['idHabitacion'] ?? 0;
   $estatus = $_POST['estatus'] ?? '';
   if($idHabitacion > 0 && ($estatus == 'Ocupado' || $estatus == 'Disponible')) {
     $consulta = "UPDATE habitaciones SET estatus = '$estatus' WHERE idHabitacion = '$idHabitacion'";
     if($conexion->query($consulta)) { 
        if ($estatus == 'Ocupado') {
          echo "La habitacion se ha ocupado";
        } else{
            echo "La habitación esta disponible";
        }   
    } else {
        echo 'Hubo un error al actualizar habitación';
    }
} else {
    echo 'No se recibieron correctamente ID de habitación y estatus';
}
?>

Mande un prueba con var_dump($_POST);

Y el cual me muestra array(0){ }

Eso me dice que no esta llegando nada y el Fetch no esta funcionando pero no logro entender porque razón.

1 respuesta

Respuesta

¿Qué te indica

console.log(habitacion, rentado);

Buen día Mauro.

Me indica lo siguiente:

Aquí hago clic al botón H 1  y en consola sale true.

Vuelvo a dar clic en mismo botón sale false:

Es raro... ese primer "true" ¿no debería mostrar el número de habitación? Tal vez podrías mejorar el mensaje de log como para que sea más explícito... algo como:

console.log('Habitacion = ' + habitacion + ' rentado = ' + rentado );

Ahí ya me muestra el numero de habitación, pero no he podido corregir el error Índice indefinido: idHabitacion

Verifica en la consola del navegador en la pestaña de red a ver qué se está enviando efectivamente

Hola Mauro, no esta enviando nada no hay peticiones.

Lo que realice fue hacer una petición con Ajax, pero me surgieron estos detalles, al momento de darle clic a un botón la primera vez no me arroja la alerta pero si se pinta de color rojo ahí en se momento me debería de decir "La habitación 1 esta ocupado" esto según su estado,cuando vuelvo a dar clic sobre ese mismo botón ya me lo pinta de color verde y ahí si me arroja la alerta, y doy clic a otro botón ahí me duplica la alerta y así sucesivamente con los demás botones hasta me llega a salir 7 veces una alerta en un solo clic, esto lo hice en consola ya que ahí se aprecia las veces de las alertas.

Primer detalle hago un clic al botón H1 no me arroja alerta pero se pinta de color rojo como ocupado pero no se me actualiza la base de datos ni se guarda el color tampoco.

Segundo detalle Hago clic sobre el mismo botón ahí me pinta en verde y me arroja la alerta como ocupado cuando debería ser disponible.

Tercer detalle cuando hago clic al botón H 2 una vez me sale duplicada la alerta, doy clic segunda vez sale igual duplicado y doy clic tercera vez ahí ya sale cuatro veces la alerta.

Código Javascript

function estatusHabitacion(e) {
   let btn = e.target;
   btn.classList.toggle("rentado");
   let rentado = btn.classList.contains("rentado");
   let habitacion = btn.textContent.replace("H", "");
   console.log(habitacion, rentado);
$(function () {
   $(".habitacion").click(function () {
   var idHabitacion = $(this).val();
   $.ajax({
    url: "Update.php",
    method: "POST",
    data: {
      idHabitacion: idHabitacion,
      estatus: rentado ? "Ocupado" : "Disponible",
    },
  }).done(function (resp) {
    console.log(resp);
   });
  });
 });
}
  document.addEventListener("DOMContentLoaded", () => {
  let habitacion = document.querySelectorAll(".habitacion");
  habitacion.forEach((habitacion) => {
  habitacion.addEventListener("click", estatusHabitacion);
 });
});

Update.php

<?php
   include("conexion.php");
   $idHabitacion = (int)$_POST['idHabitacion'] ?? 0;
   $estatus = $_POST['estatus'] ?? '';
   if($idHabitacion > 0 && ($estatus == 'Ocupado' || $estatus == 'Disponible')) {   
     $consulta = "UPDATE habitaciones SET estatus = '$estatus' WHERE idHabitacion = '$idHabitacion'";
    if($conexion->query($consulta)) {   
      echo "La habitación: $idHabitacion", ",Se encuentra: $estatus";        
    } else {
    echo 'Hubo un error al actualizar habitación';
  }
    } else {
    echo 'No se recibieron correctamente ID de habitación y estatus';
  }
?>

Tenés un tema en la función

EstatusHabitacion

Fíjate que cada vez que se invoca estás definiendo un nuevo handler para el click sobre las habitaciones:

$(".Habitacion")

Esta parte deberías hacerla una sola vez ante la carga de la página.

Empezá por desenredar eso y vemos cómo sigue

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas