Foros del Web » Programando para Internet » PHP »

reservas

Estas en el tema de reservas en el foro de PHP en Foros del Web. hola serian tan amable de ayudarme con la siguiente duda hice un formulario de agregar reserva y me agrega pero cuando ingreso la misma reserva ...
  #1 (permalink)  
Antiguo 07/10/2010, 08:01
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
reservas

hola serian tan amable de ayudarme con la siguiente duda hice un formulario de agregar reserva y me agrega pero cuando ingreso la misma reserva me la vuelve agregar necesito validar para que no me permita ingresar la misma y salga el mensaje de no estar disponible

<?php
include("config.php");

$dia=$_POST['dia'];
$mes=$_POST['mes'];
$ano=$_POST['ano'];
$hora=$_POST['hora'];
$minutos=$_POST['minutos'];
$dia1=$_POST['dia1'];
$mes1=$_POST['mes1'];
$ano1=$_POST['ano1'];
$hora1=$_POST['hora1'];
$minutos1=$_POST['minutos1'];
$observaciones=$_POST['observaciones'];
$instructor=$_POST['instructor'];

$fecha_reserva=$ano."-".$mes."-".$dia;
$hora_reserva=$hora.":".$minutos;
$fecha_entrega=$ano1."-".$mes1."-".$dia1;
$hora_entrega=$hora1.":".$minutos1;
$espacio=$_POST['espacio'];

$mysql_enlace=mysql_connect($servidor,$usuario,$cl ave);
mysql_select_db($bd,$mysql_enlace);

$consulta="select * from reserva where
fecha_inicio != '$fecha_reserva' and
fecha_final != '$fecha_entrega' and
tiempo_inicio != '$hora_reserva' and
tiempo_final != '$hora_entrega' and
idespacios != '$espacio'";

$res=mysql_query($consulta,$mysql_enlace);
if (mysql_num_rows($res)== 0)

{

$consulta1="insert into reserva values('0',now(),'$fecha_reserva','$fecha_entrega' ,'$hora_reserva','$hora_entrega','1','1','$observa ciones','$instructor','$espacio')";
$resultado=mysql_query($consulta1,$mysql_enlace);


echo '<html>
<head>
<title>mensaje</title>
</head>
<body>
<script language="javascript">
alert("La reserva fue realizada");
document.location="reserva.php";
</script>
</body>
</html>';
}


else
{

echo '<html>
<head>
<title>mensaje</title>
</head>
<body>
<script language="javascript">
alert("la reserva ya existe");
document.location="reserva.php";
</script>
</body>
</html>';
}



?>
  #2 (permalink)  
Antiguo 07/10/2010, 08:07
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 9 meses
Puntos: 4
Respuesta: reservas

Para impedir que se vuelvan a ingresar los mismos datos de una reserva, antes del INSERT deberás hacer un SELECT a tu tabla de reservas y consultar si todos los datos ya han sido ingresados, si ya hay una reserva que coincida con todos los datos enviados desde el formulario que te devuelva un mensaje de advertencia, si no están repetidos haces el INSERT.

Saludos.
  #3 (permalink)  
Antiguo 07/10/2010, 08:23
 
Fecha de Ingreso: marzo-2010
Ubicación: medellin
Mensajes: 15
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: reservas

hola ZyRicK yo tambien tengo la misma duda pero realmente no entiendo tu respuesta, soy novata en esto de la programacion y agradeceria la ayuda que tu o alguien mas nos puedan brindar de antemano muchas gracias.
  #4 (permalink)  
Antiguo 07/10/2010, 08:29
Avatar de egepe  
Fecha de Ingreso: diciembre-2009
Mensajes: 310
Antigüedad: 14 años, 11 meses
Puntos: 7
Respuesta: reservas

Sino cuando terminen de ejecutar el insert devuelva el control al script original, a veces pasa que cuando terminan una operación avanzan con el navegador a otra pagina y luego cuando se regresan lo hacen con las flechas del navegador al script dle insert qu tiene todos los datos y procede a realizar otro insert. Adicionalmente como de seguro estas haciendo insert a una tabla en donde el primary key es auto increment normalmente no vas a ver si el dato ya esta cargado, de ahí viene la respuesta que les coloco ZydRick.

Bueno saludos
  #5 (permalink)  
Antiguo 07/10/2010, 08:29
 
Fecha de Ingreso: junio-2009
Mensajes: 78
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: reservas

hola, lo que tienenes que hacer es conectar a la DB y hacer una consulta para chekear que esos datos no se hayan ingresado antes, y una vez que compruebes que esos datos no existen ingresarlos a la bd
  #6 (permalink)  
Antiguo 07/10/2010, 08:34
Avatar de angelAparicio  
Fecha de Ingreso: julio-2009
Ubicación: Sevilla
Mensajes: 307
Antigüedad: 15 años, 4 meses
Puntos: 22
Respuesta: reservas

El código parece estar bien. ¿Podrías mostrar el contenido de $consulta con un echo para ver si es que está montando mal la consulta y por eso te dice que no encuentra nada?
__________________
Mis webs:
- Programador Web Autónomo
- Conciertos en Sevilla
  #7 (permalink)  
Antiguo 07/10/2010, 08:43
 
Fecha de Ingreso: junio-2009
Mensajes: 78
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: reservas

maryorita242009

tu codigo parece estar bien, tal como dijo angelAparicio, y aunque funcione bien, solo te mostrara error cuando la reserva sea EXACTAMENTE IGUAL a alguna ya ingresada, si la diferencia es en una hora no lo hara, yo en este momento estoy en el trabajo, por lo que no puedo chequearlo pero con gusto lo hare mas tarde..

Última edición por GatorV; 07/10/2010 a las 09:07
  #8 (permalink)  
Antiguo 07/10/2010, 08:51
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: reservas

No te hagas la vida complicada, únicamente separa en archivos diferentes tu formulario de tu archivo PHP que lo procesa, al finalizar el proceso (php) realiza una reedirección (header('location: urldelformulario.php')) al formulario y no tendrás problemas de que se te repiten los registros
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #9 (permalink)  
Antiguo 07/10/2010, 08:55
Avatar de egepe  
Fecha de Ingreso: diciembre-2009
Mensajes: 310
Antigüedad: 14 años, 11 meses
Puntos: 7
Respuesta: reservas

Cita:
Iniciado por Nemutagk Ver Mensaje
No te hagas la vida complicada, únicamente separa en archivos diferentes tu formulario de tu archivo PHP que lo procesa, al finalizar el proceso (php) realiza una reedirección (header('location: urldelformulario.php')) al formulario y no tendrás problemas de que se te repiten los registros
Eso es exactamente lo que yo les dije lo que pasa es que se los explique no le dije que hicieran un header como tu...
  #10 (permalink)  
Antiguo 07/10/2010, 08:58
 
Fecha de Ingreso: junio-2009
Mensajes: 78
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: reservas

el problema no esta en que se repitan los registros, sino es que suponte que alguien hace una reserva entre el dia 01/01 y el dia 05/01, y otra persona hace una reserva entre el dia 02/01 y el dia 06/01, vas a tener una superposicion de reservas, que la consulta a la db no es capaz de sacar a la luz, vas a tener que buscar alguna manera de hacer que las reservas no se superpongan
  #11 (permalink)  
Antiguo 07/10/2010, 09:01
 
Fecha de Ingreso: marzo-2010
Ubicación: medellin
Mensajes: 15
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: reservas

Cita:
Iniciado por egepe Ver Mensaje
Eso es exactamente lo que yo les dije lo que pasa es que se los explique no le dije que hicieran un header como tu...
este es el codigo del formulario:
<?php
include("config.php");
$mysql_enlace=mysql_connect($servidor,$usuario,$cl ave);
mysql_select_db($bd,$mysql_enlace);
$select="select * from usuarios where idrol=2 and estado=1";
$resultado=mysql_query($select,$mysql_enlace);
?>
<html>
<head>
<title>AGREGAR RESERVA</title>
<!--se llama la pagina donde estan las validadiones-->
<script src="../../Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
<script language="javascript" src="validar.js"></script>
<link href="css/calendario.css" type="text/css" rel="stylesheet">
<script src="js/calendar.js" type="text/javascript"></script>
<script src="js/calendar-es.js" type="text/javascript"></script>
<script src="js/calendar-setup.js" type="text/javascript"></script>
</head>
<body oncontextmenu="return false"></body> <!-- para que no puedan ingresar texto y se coloca en el body: onkeydown="return false"-->
<br>
<br>
<br>
<br>
<center><b><font color="#008844" size="5">Agregar reserva</font></b></center>
<hr></hr>
<table align="center" width="95%" background="../img/Dibujo1.JPG">
<tr>
<td>
<form action="agregar_reservaaccion.php" method="post" name="agregar_reserva">
<table align="center" border="2" bordercolor="#005B5B">
<tr>
<td><b>Fecha inicio&nbsp;*</b></td>
<td><input type="text" name="fechainicio" id="ingreso"/> <!--value="dd-mm-yyyy" -->
<img src="ima/calendario.png" width="16" height="16" border="0" title="Fecha inicial de la reserva" id="lanzador">
<!-- script que define y configura el calendario-->
<script type="text/javascript">
Calendar.setup({
inputField : "ingreso", // id del campo de texto
ifFormat : "%Y-%m-%d", // formato de la fecha que se escriba en el campo de texto
button : "lanzador" // el id del botón que lanzará el calendario
});
</script></td>
<td><b>Fecha final&nbsp;*</b></td>
<td><input type="text" name="fechafinal" id="fin"/> <!--value="dd-mm-yyyy" -->
<img src="ima/calendario.png" width="16" height="16" border="0" title="Fecha inicial de la reserva" id="lanzador1">
<!-- script que define y configura el calendario-->
<script type="text/javascript">
Calendar.setup({
inputField : "fin", // id del campo de texto
ifFormat : "%Y-%m-%d", // formato de la fecha que se escriba en el campo de texto
button : "lanzador1" // el id del botón que lanzará el calendario
});
</script></td>
</tr>
<tr>
<td><b>Hora inicio&nbsp;</b></td>
<td><input type="text" name="horainicio" id= "fecha" onkeyup="Validar(this,':',patron,true)" maxlength="5" /></td>
<td><b>Hora final&nbsp;*</b></td>
<td><input type="text" name="horafinal" id= "fecha" onkeyup="Validar(this,':',patron,true)" maxlength="5" /></td>
</tr>
<tr>
<td colspan="4"><b><center>Observaciones</center></b></td>
</tr>
<tr>
<td colspan="4"><center><textarea rows="5" cols="50" name="observaciones"></textarea></center></td>
</tr>
<tr>
<td colspan="2"><b>Instructor encargado*</b></td>
<td colspan="2"><center><select name="instructor">
<option value="">- - - - - - - - - -</option>
<?php
while ($registro=mysql_fetch_array($resultado))
{
echo '<option value="'.$registro['idusuarios'].'">'.$registro['primer_nombre'].'&nbsp;'.$registro['primer_apellido'].'</option>';
}
?>
</select></center></td>
</tr>
<tr>
<td colspan="2"><b>Espacio&nbsp;*</b></td>
<td colspan="2"><center><select name="espacio">
<option value="">- - - - - - - - - - - - - - -</option></option>
<?php
include("config.php");
$mysql_enlace=mysql_connect($servidor,$usuario,$cl ave);
mysql_select_db($bd,$mysql_enlace);
$consulta="select * from espacios";
$resultado1=mysql_query($consulta,$mysql_enlace);
while ($registro1=mysql_fetch_array($resultado1))
{
echo '<option value="'.$registro1['idespacios'].'">'.$registro1['nombre'].'</option>';
}
?>
</select></center></td>
</tr>
<input type="hidden" name="estado" value="1">
<tr>
<td colspan="4"><center><input name="enviar" type="button" value="Agregar" onClick="reserva();"/><input type="reset" value="Limpiar"></center></td>
</tr>
</table>
<br>
<br>
</td>
</tr>
</table>
</form>
</body>
</html>



y este es el codigo de php para la insercion:


<?php
include("config.php");
//se definen las variables que traigo del formulario
$fechainicio=$_POST['fechainicio'];
$fechafinal=$_POST['fechafinal'];
$horainicio=$_POST['horainicio'];
$horafinal=$_POST['horafinal'];
$observaciones=$_POST['observaciones'];
$instructor=$_POST['instructor'];
$espacio=$_POST['espacio'];
$estado=$_POST['estado'];
//se hace la conexion a la base de datos
$mysql_enlace=mysql_connect($servidor,$usuario,$cl ave);
mysql_select_db($bd,$mysql_enlace);
//se realiza la consulta para verificar si la reserva ya existe
$consultatodo="select * from reserva where
fecha_inicio != '$fechainicio' and
fecha_final != '$fechafinal' and
tiempo_inicio != '$horainicio' and
tiempo_final != '$horafinal' and
idespacios != '$espacio'";
$resultadotodo=mysql_query($consultatodo,$mysql_en lace);
$registro=mysql_num_rows($resultadotodo);
//if(mysql_num_rows($resultadotodo)=="0")

if (mysql_num_rows($resultadotodo)== 0)
{
$consulta="insert into reserva values('',now(),'$fechainicio','$fechafinal','$hor ainicio','$horafinal','1','$estado','$observacione s','$instructor','$espacio')";
$resultado=mysql_query($consulta,$mysql_enlace);
echo $consulta;
if($resultado)
{
echo '<html>
<head>
<title>mensaje</title>
</head>
<body>
<script language="javascript">
alert("La reserva fue realizada");
//document.location="agregar_reserva.php";
</script>
</body>
</html>';
}
else
{
echo '<html>
<head>
<title>.::.</title>
</head>
<body>
<script language="javascript">
alert("OJO: la reserva no se realizo");
//document.location="agregar_reserva.php";
</script>
</body>
</html>';
}
}
else
{

echo '<html>
<head>
<title>mensaje</title>
</head>
<body>
<script language="javascript">
alert("la reserva ya existe");
//document.location="agregar_reserva.php";
</script>
</body>
</html>';
}

?>

gracias por su colaboracion...
  #12 (permalink)  
Antiguo 07/10/2010, 09:11
 
Fecha de Ingreso: marzo-2010
Ubicación: medellin
Mensajes: 15
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: reservas

leandro tienes toda la razon pero como dije antes somos novatas en esto y no sabemos como hacerlo nos podrias ayudar gracias
  #13 (permalink)  
Antiguo 07/10/2010, 09:12
Avatar de egepe  
Fecha de Ingreso: diciembre-2009
Mensajes: 310
Antigüedad: 14 años, 11 meses
Puntos: 7
Respuesta: reservas

Cita:
Iniciado por paty2803 Ver Mensaje

gracias por su colaboracion...
Oye me siento aludido con esa expresion yo sólo te estoy diciendo el por qué te ocuerre eso y sugeriendo cómo resolverlo pero si lo que quieres es que te diga el codigo perfecto, al final de todo el codigo pon algo así:

print "<meta http-equiv=Refresh content='1 ; url=aqui colocas toda la direccion dond esta el script base y listo";

Esto te envia al original y el content = 1 que puede tambiér ser 2 es los segundos que debe esperar antes de ir a la url

Chao
  #14 (permalink)  
Antiguo 07/10/2010, 09:25
Avatar de angelAparicio  
Fecha de Ingreso: julio-2009
Ubicación: Sevilla
Mensajes: 307
Antigüedad: 15 años, 4 meses
Puntos: 22
Respuesta: reservas

¿Puedes poner debajo de esta linea: $resultado=mysql_query($consulta1,$mysql_enlace); el siguiente código?

echo '<p>Consulta:'.$consulta.'</p>';
echo '<p>Inserción:'.$consulta1.'</p>';

Para ver que consultas está haciendo. Quita temporalmente la linea document.location="reserva.php"; para poder verlo.
__________________
Mis webs:
- Programador Web Autónomo
- Conciertos en Sevilla
  #15 (permalink)  
Antiguo 07/10/2010, 10:49
 
Fecha de Ingreso: junio-2009
Mensajes: 78
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: reservas

bien, estuve pensando bastante, se me ocurre lo siguiente

primero identificar cada dia segun el numero de dia, no por mes, es decir el primero de febrero sera el dia 32, por lo que tendras que generar un trozo de codigo que te convierta del formato dd/mm al formato de numero de dia del año

entonces luego crear una consulta
luego buscas reservas dentro del rango, es decir...
el dia que el usuario ingrese como inicio de la reserva, lo tranformamos al formtato "numero de dia"
luego hacemos un query a la db buscando las entradas mayores o iguales que la ingresada en la columna de fecha de inicio y menores que la fecha de finalizacion, si eso existe entonces no puede realizarse la reserva
luego hacemos algo igual con la fecha de finalizacion, buscamos si existe alguna fecha de ingreso mayor que la de finalizacion, si existe no puede hacerse la consulta
luego hacemos lo mismo con la hora,
lamentablemente no tuve tiempo de prepara un code, pero no creo que tengan mayores problemas para realizar la consulta

ante cualquier cosa me avisan, espero haber sido de ayuda

Etiquetas: reservas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:14.