Foros del Web » Programando para Internet » PHP »

Impedir dos reservas para el mismo día

Estas en el tema de Impedir dos reservas para el mismo día en el foro de PHP en Foros del Web. Buenas, estoy empezando en esto de php y me a surgido una pequeña duda. Tengo un codigo para la reserva de un coche, y me ...
  #1 (permalink)  
Antiguo 07/09/2010, 03:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 0
Pregunta Impedir dos reservas para el mismo día

Buenas, estoy empezando en esto de php y me a surgido una pequeña duda.
Tengo un codigo para la reserva de un coche, y me permite registrar los datos en la base de datos, después me los muestra bien en el calendario etc...

Ahora he intentado evitar que puedan hacerse dos reservas para el mismo día, pero me es imposible. Además de tener en cuenta el campo the_date, he de tener en cuenta el id_item que corresponde al coche, ya que hay más de uno.

Este es el código que funciona pero sin evitar que haya dos registros iguales.
Alguien me podría ayudar ??? MUCHAS GRACIAS.




Código PHP:
<?
    
if(isset($_POST['the_date']) && !empty($_POST['the_date']) &&
    isset(
$_POST['id_item']) && !empty($_POST['id_item']) &&
    isset(
$_POST['salida']) && !empty($_POST['salida']) &&
    isset(
$_POST['destino']) && !empty($_POST['destino']) &&
    isset(
$_POST['usuario']) && !empty($_POST['usuario']) &&
    isset(
$_POST['contacto']) && !empty($_POST['contacto'])) {
        

        
$link mysql_connect("****","***","***");
        
mysql_select_db("pruebasa_coches",$link);

        
mysql_query("INSERT INTO bookings (the_date,id_item,salida,destino,usuario,contacto)
        VALUES ('{$_POST['the_date']}','{$_POST['id_item']}','{$_POST['salida']}','{$_POST['destino']}','{$_POST['usuario']}','{$_POST['contacto']}')"
,$link);

        
$my_error mysql_error($link);

        if(!empty(
$my_error)) {

            echo 
"Ha habido un error al insertar los valores. $my_error";

        } else {

            echo 
"HA RERVADO EL VEHÍCULO";

        }

    } else {

        echo 
"Error, no ha introducido todos los datos";

    }

?>


El código que estaba intentando utilizar para evitar dos registros del mismo coche el mismo día era:

Código PHP:
$query "SELECT id,the_date FROM bookings WHERE the_date=$the_date";
        if(
$resultado mysql_query($query)){
        
        if(
mysql_num_rows($resultado) > 0){
        
        echo 
"hay uno";
        
                }else{((((
aquí ya lo demás)))) 

Pero tenía problemas con los corchetes...GRACIAS
  #2 (permalink)  
Antiguo 07/09/2010, 04:00
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 4 meses
Puntos: 150
Respuesta: Impedir dos reservas para el mismo día

Prueba asi:

$query = "SELECT id,the_date FROM bookings WHERE the_date='$the_date' ";
  #3 (permalink)  
Antiguo 07/09/2010, 04:08
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Impedir dos reservas para el mismo día

Cita:
Iniciado por Vun Ver Mensaje
Prueba asi:

$query = "SELECT id,the_date FROM bookings WHERE the_date='$the_date' ";
Muchas gracias, no se si será por eso, pero es que se me va a una página en blanco, como si hubiera cerrado demasiados "}"...

No me dice ni que esta repetido ni que falta nada...:S
  #4 (permalink)  
Antiguo 07/09/2010, 04:13
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Impedir dos reservas para el mismo día

EL CÓDIGO ES:

Código PHP:
<?
    
// Primero comprobamos que ningún campo esté vacío y que todos los campos existan.
    
if(isset($_POST['the_date']) && !empty($_POST['the_date']) &&
    isset(
$_POST['id_item']) && !empty($_POST['id_item']) &&
    isset(
$_POST['salida']) && !empty($_POST['salida']) &&
    isset(
$_POST['destino']) && !empty($_POST['destino']) &&
    isset(
$_POST['usuario']) && !empty($_POST['usuario']) &&
    isset(
$_POST['contacto']) && !empty($_POST['contacto'])) {
        
        
// Si entramos es que todo se ha realizado correctamente

        
$link mysql_connect("localhost","","");
        
mysql_select_db("pruebasa_coches",$link);
        
        
$query "SELECT * FROM bookings WHERE id_item=$id_item AND the_date='$the_date'";
        if(
$resultado mysql_query($query)){
        
        if(
mysql_num_rows($resultado) == 0){
        
        

        
// Con esta sentencia SQL insertaremos los datos en la base de datos
        
mysql_query("INSERT INTO bookings (the_date,id_item,salida,destino,usuario,contacto)
        VALUES ('{$_POST['the_date']}','{$_POST['id_item']}','{$_POST['salida']}','{$_POST['destino']}','{$_POST['usuario']}','{$_POST['contacto']}')"
,$link);

        
// Ahora comprobaremos que todo ha ido correctamente
        
$my_error mysql_error($link);

        if(!empty(
$my_error)) {

            echo 
"Ha habido un error al insertar los valores. $my_error";

        } else {

            echo 
"ha reservado el coche";
        }
        }
        }else{
            
            
            echo 
"hay uno";
        }

    } else {

        echo 
"Error, no ha introducido todos los datos";

    }

?>
Y ahora siempre me dice que hay ya un registro... aunque no lo haya.
Creo que es problema de los }
  #5 (permalink)  
Antiguo 07/09/2010, 07:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Tema movido desde Configuración PHP a PHP
  #6 (permalink)  
Antiguo 07/09/2010, 08:08
Avatar de Hayi  
Fecha de Ingreso: febrero-2002
Ubicación: Santa Fe - Santa Fe
Mensajes: 121
Antigüedad: 22 años, 10 meses
Puntos: 3
Respuesta: Impedir dos reservas para el mismo día

Hola. Mirando tu código, encontré algo sobre los corchetes ({):

Cita:
...
} <-- ESTÁ DEMÁS
}else{


echo "hay uno";
}
...
y por lo siguiente, te falta uno al final que cierre el IF principal. Saludos!
  #7 (permalink)  
Antiguo 07/09/2010, 11:30
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Impedir dos reservas para el mismo día

Cita:
Iniciado por Hayi Ver Mensaje
Hola. Mirando tu código, encontré algo sobre los corchetes ({):



y por lo siguiente, te falta uno al final que cierre el IF principal. Saludos!
Pues... me sigue sin funcionar, :S:S:S

Gracias :) seguiré cambiandolos
  #8 (permalink)  
Antiguo 07/09/2010, 11:43
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: Impedir dos reservas para el mismo día

oues me di la tarea de medio ordenar el codigo tabulandolo y cosas asi y no hay error en } aki esta tabulado sugerencia depura la consulta y usa <?php ya que en muchos teas anteriores y algunos articulos dicen que <? trae problemas suerte aki el codigo medio ordenado intentaa trabajar tabulado que es mas facil para determinar errores de los ciclos anidados suerte
Código PHP:
Ver original
  1. <?
  2.     // Primero comprobamos que ningún campo esté vacío y que todos los campos existan.
  3.     if(isset($_POST['the_date']) && !empty($_POST['the_date']) &&
  4.     isset($_POST['id_item']) && !empty($_POST['id_item']) &&
  5.     isset($_POST['salida']) && !empty($_POST['salida']) &&
  6.     isset($_POST['destino']) && !empty($_POST['destino']) &&
  7.     isset($_POST['usuario']) && !empty($_POST['usuario']) &&
  8.     isset($_POST['contacto']) && !empty($_POST['contacto'])) {
  9.        
  10.         // Si entramos es que todo se ha realizado correctamente
  11.  
  12.         $link = mysql_connect("localhost","","");
  13.         mysql_select_db("pruebasa_coches",$link);
  14.        
  15.         $query = "SELECT * FROM bookings WHERE id_item=$id_item AND the_date='$the_date'";
  16.         if($resultado = mysql_query($query)){        
  17.             if(mysql_num_rows($resultado) == 0){
  18.                 // Con esta sentencia SQL insertaremos los datos en la base de datos
  19.                 mysql_query("INSERT INTO bookings (the_date,id_item,salida,destino,usuario,contacto) VALUES ('{$_POST['the_date']}','{$_POST['id_item']}','{$_POST['salida']}','{$_POST['destino']}','{$_POST['usuario']}','{$_POST['contacto']}')",$link) or die (mysql_error());
  20.             // Ahora comprobaremos que todo ha ido correctamente
  21.                 $my_error = mysql_error($link);
  22.                 if(!empty($my_error)) {
  23.                     echo "Ha habido un error al insertar los valores. $my_error";
  24.                 } else {
  25.                     echo "ha reservado el coche";
  26.                 }
  27.             }
  28.         }
  29.         else{            
  30.             echo "hay uno";
  31.         }
  32.     }
  33.     else{
  34.         echo "Error, no ha introducido todos los datos";
  35.     }
  36. ?>
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #9 (permalink)  
Antiguo 09/09/2010, 03:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 92
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Impedir dos reservas para el mismo día

Sigo con mi problema de los parentesis. Ahora, me reconoce que hay un día ya reservado, hasta ahí perfecto. Pero cuando reservo un día que esta libre me dice que
reservado y que además hay uno, es como si me entrara en la primera del if, y en el else.

Este es mi código. Muchas gracias de antemano

Código PHP:
<?php
    
// Primero comprobamos que ningún campo esté vacío y que todos los campos existan.
    
if(isset($_POST['the_date']) && !empty($_POST['the_date']) &&
    isset(
$_POST['id_item']) && !empty($_POST['id_item']) &&
    isset(
$_POST['salida']) && !empty($_POST['salida']) &&
    isset(
$_POST['destino']) && !empty($_POST['destino']) &&
    isset(
$_POST['usuario']) && !empty($_POST['usuario']) &&
    isset(
$_POST['contacto']) && !empty($_POST['contacto'])) {
        
        
// Si entramos es que todo se ha realizado correctamente
 
        
$link mysql_connect("localhost","++","++");
        
mysql_select_db("pruebasa_coches",$link);
        
 
$query "SELECT * FROM bookings WHERE the_date='" $_POST['the_date'] . "' and id_item='"$_POST['id_item'] . "'";
         if(
$resultado mysql_query($query)){        
            if(
mysql_num_rows($resultado) == 0){
                
// Con esta sentencia SQL insertaremos los datos en la base de datos
                
mysql_query("INSERT INTO bookings (the_date,id_item,salida,destino,usuario,contacto) VALUES ('{$_POST['the_date']}','{$_POST['id_item']}','{$_POST['salida']}','{$_POST['destino']}','{$_POST['usuario']}','{$_POST['contacto']}')",$link) or die (mysql_error());
            
// Ahora comprobaremos que todo ha ido correctamente
                
$my_error mysql_error($link); 
                if(!empty(
$my_error)) {
                    echo 
"Ha habido un error al insertar los valores. $my_error";
                } else {
                    echo 
"ha reservado el coche";// ME ENTRA AQUI Y LUEGO SE VA ...
                
                
}
        }
        
        }
        else{            
        }echo 
"hay uno";// AQUI. 
        
            
        

    else{
        echo 
"Error, no ha introducido todos los datos";
    }
?>
  #10 (permalink)  
Antiguo 09/09/2010, 03:20
 
Fecha de Ingreso: septiembre-2010
Mensajes: 92
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Impedir dos reservas para el mismo día

Ya me va perfecto. Le cambié la condición y revise {


Muchas gracias :D:D:D



Código PHP:
 $query "SELECT * FROM bookings WHERE the_date='" $_POST['the_date'] . "' and id_item='"$_POST['id_item'] . "'";
         if(
$resultado mysql_query($query)){        
            if(
mysql_num_rows($resultado) != 0){
                
                        echo 
"hay uno";
        
            
                        }else{
                             
                
// Con esta sentencia SQL insertaremos los datos en la base de datos
                
mysql_query("INSERT INTO bookings (the_date,id_item,salida,destino,usuario,contacto) VALUES ('{$_POST['the_date']}','{$_POST['id_item']}','{$_POST['salida']}','{$_POST['destino']}','{$_POST['usuario']}','{$_POST['contacto']}')",$link) or die (mysql_error());
            
// Ahora comprobaremos que todo ha ido correctamente
                
$my_error mysql_error($link); 
                if(!empty(
$my_error)) {
                    echo 
"Ha habido un error al insertar los valores. $my_error";
                } else {
                    echo 
"ha reservado el coche";
                
                }
                        }
                        
                        }
        
        
        
         }else{
        echo 
"Error, no ha introducido todos los datos";
    }
?> 

Etiquetas: duplicar, evitar, reservas, sql
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 17:41.