Foros del Web » Programando para Internet » PHP »

Verificar si existe antes de insertar.

Estas en el tema de Verificar si existe antes de insertar. en el foro de PHP en Foros del Web. Tengo el siguiente formulario que debe verificar si existe en la base de datos esa fecha de existis no debe insertar el registro y de ...
  #1 (permalink)  
Antiguo 18/01/2013, 09:05
 
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Verificar si existe antes de insertar.

Tengo el siguiente formulario que debe verificar si existe en la base de datos esa fecha de existis no debe insertar el registro y de no existe si debe insertarlo.

Este es el formulario:

<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
<table align="center">
<tr valign="baseline">
<td nowrap="nowrap" align="right">Fecha:</td>
<td>
<input type="text" name="strFecha" id="datepicker" readonly="readonly" size="12" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">&nbsp;</td>
<td><input type="hidden" name="strUsuario" value="<?php echo $_SESSION['MM_Username'] ?>" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">¿Que y cuando reservar?</td>
<td><select name="strDestino">
<option value="1" <?php if (!(strcmp(1, ""))) {echo "SELECTED";} ?>>Parrilla Mediodia</option>
<option value="2" <?php if (!(strcmp(2, ""))) {echo "SELECTED";} ?>>Parrilla Noche</option>
<option value="3" <?php if (!(strcmp(3, ""))) {echo "SELECTED";} ?>>SUM de 08:00 a 13:30</option>
<option value="4" <?php if (!(strcmp(4, ""))) {echo "SELECTED";} ?>>SUM de 14:00 a 19:30</option>
<option value="5" <?php if (!(strcmp(5, ""))) {echo "SELECTED";} ?>>SUM de 20:00 a 06:00</option>
</select>
</td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">&nbsp;</td>
<td><input type="submit" value="RESERVAR" /></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1" />
</form>


Este es el PHP del insert:

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}


$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO tblreservasespacios (strFecha, strUsuario, strDestino) VALUES (%s, %s, %s)",
GetSQLValueString($_POST['strFecha'], "text"),
GetSQLValueString($_POST['strUsuario'], "text"),
GetSQLValueString($_POST['strDestino'], "int"));

mysql_select_db($database_conexion, $conexion);
$Result1 = mysql_query($insertSQL, $conexion) or die(mysql_error());

$insertGoTo = "reserva-espacios-comunes.ok.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
?>

De ante mano, muchas gracias.
  #2 (permalink)  
Antiguo 18/01/2013, 09:16
Avatar de andres_15_  
Fecha de Ingreso: septiembre-2008
Ubicación: Cali
Mensajes: 232
Antigüedad: 15 años, 7 meses
Puntos: 7
Respuesta: Verificar si existe antes de insertar.

Prueba con este :

Cita:
<?

$consulta="select * from tabla where campo=".$campo;
$resultado=mysql_query($consulta) or die (mysql_error());
if (mysql_num_rows($resultado)>0)
{
print(Exite al menos un registro);
} else {
print(No Existen registros);
}

?>
Lo encontre aqui : http://www.forosdelweb.com/f18/php-mysql-comprobar-si-existe-registro-403896/
  #3 (permalink)  
Antiguo 18/01/2013, 09:28
 
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Verificar si existe antes de insertar.

Disculpa soy nuevo en esto, el codigo que me envias donde iria antes del insert?
  #4 (permalink)  
Antiguo 18/01/2013, 09:33
Avatar de andres_15_  
Fecha de Ingreso: septiembre-2008
Ubicación: Cali
Mensajes: 232
Antigüedad: 15 años, 7 meses
Puntos: 7
Respuesta: Verificar si existe antes de insertar.

Cita:
Iniciado por davidscandroli Ver Mensaje
Disculpa soy nuevo en esto, el codigo que me envias donde iria antes del insert?
Jajaja Somos 2 nuevos en esto pero creo que iria despues, porque despues de que lo insertes deberia mostrarte el error, claro que también debes tener la bd bien modelada.
  #5 (permalink)  
Antiguo 18/01/2013, 09:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Verificar si existe antes de insertar.

Eso va ANTES de un insert.
Lo primero que debes verificar es que no exista algo, antes de intentar insertarlo.

Luego lo que se hace es verificar si ese INSERT tuvo éxito.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 18/01/2013, 09:39
Avatar de andres_15_  
Fecha de Ingreso: septiembre-2008
Ubicación: Cali
Mensajes: 232
Antigüedad: 15 años, 7 meses
Puntos: 7
Respuesta: Verificar si existe antes de insertar.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso va ANTES de un insert.
Lo primero que debes verificar es que no exista algo, antes de intentar insertarlo.

Luego lo que se hace es verificar si ese INSERT tuvo éxito.
Gracias por la aclaracion, pero creo que el quiere es que a la hora de insertar retorne un mensaje que diga que ya existe y si no existe que ingrese normal o diga registro insertado
  #7 (permalink)  
Antiguo 18/01/2013, 09:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Verificar si existe antes de insertar.

Sigue siendo ese el esquema:
- Tomas el ID que estás recibiendo, o bien los datos a buscar.
- Consultas a la base si ya existen esos valores (Se sugiere usar COUNT(*) para obtener un valor numérico).
- SI ya existe uno, retorna el mensaje de existente.
- Si retorna cero, se envía el INSERT, luego se recupera el éxito de la operación (siempre), y se muestra el mensaje de alta exitosa.

Es una forma estandar de manejar las altas desde una aplicación. Nunca envías la operación de alta directamente, sino la validación primero.

SI miras por dentro cualquier aplicación de gestión de ABM bien construida, verás que es el modo general de realizarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 18/01/2013, 10:08
 
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Verificar si existe antes de insertar.

Gracias yo lo pongo antes del insert pero como defino el campo strfecha si el mismo esta en el formulario? No entiendo eso.

Yo lo puse asi:

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}


$consulta="SELECT * FROM tblreservasespacios WHERE strFecha = ".$strFecha;
$resultado=mysql_query($consulta) or die (mysql_error());
if (mysql_num_rows($resultado)!=0)
{
echo("Exite al menos un registro");
} else {
echo("No Existen registros");
}



$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO tblreservasespacios (strFecha, strUsuario, strDestino) VALUES (%s, %s, %s)",
GetSQLValueString($_POST['strFecha'], "text"),
GetSQLValueString($_POST['strUsuario'], "text"),
GetSQLValueString($_POST['strDestino'], "int"));

mysql_select_db($database_conexion, $conexion);
$Result1 = mysql_query($insertSQL, $conexion) or die(mysql_error());

$insertGoTo = "reserva-espacios-comunes.ok.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
?>

Pero me tira este error:

Notice: Undefined variable: strFecha in D:\xampp\htdocs\torrecongreso\reserva-espacios-comunes.php on line 105
  #9 (permalink)  
Antiguo 18/01/2013, 10:57
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Verificar si existe antes de insertar.

Y si simplemente hace un insert select o select into...
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #10 (permalink)  
Antiguo 18/01/2013, 11:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Verificar si existe antes de insertar.

Bueno, es lógico que te tire ese error, ¿no crees?

hasta le momento donde pones:

Código PHP:
Ver original
  1. $consulta="SELECT * FROM tblreservasespacios WHERE strFecha = ".$strFecha;
la variable $strFecha no existe, no se ha usado en ningún momento. Al menos no en ese bloque de script... ¿Dónde está definida?

Por cierto, si lo que contiene es una fecha, en la base debe tener el formato AAAA-MM-DD y en la consulta debe respetar la misma forma y estar encerrada entre apóstrofes ('), como por ejemplo:
Código MySQL:
Ver original
  1. SELECT * FROM tblreservasespacios WHERE strFecha = '2013-01-15';

¿Eso lo tienes claro, no?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 18/01/2013, 11:32
 
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Verificar si existe antes de insertar.

El tema es asi, yo tengo un formulario donde una de los campos es para que se coloque la fecha.

<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
<table align="center">
<tr valign="baseline">
<td nowrap="nowrap" align="right">Fecha:</td>
<td>
<input type="text" name="strFecha" id="datepicker" readonly="readonly" size="12" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">&nbsp;</td>
<td><input type="hidden" name="strUsuario" value="<?php echo $_SESSION['MM_Username'] ?>" size="32" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">¿Que y cuando reservar?</td>
<td><select name="strDestino">
<option value="1" <?php if (!(strcmp(1, ""))) {echo "SELECTED";} ?>>Parrilla Mediodia</option>
<option value="2" <?php if (!(strcmp(2, ""))) {echo "SELECTED";} ?>>Parrilla Noche</option>
<option value="3" <?php if (!(strcmp(3, ""))) {echo "SELECTED";} ?>>SUM de 08:00 a 13:30</option>
<option value="4" <?php if (!(strcmp(4, ""))) {echo "SELECTED";} ?>>SUM de 14:00 a 19:30</option>
<option value="5" <?php if (!(strcmp(5, ""))) {echo "SELECTED";} ?>>SUM de 20:00 a 06:00</option>
</select>
</td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">&nbsp;</td>
<td><input type="submit" value="RESERVAR" /></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1" />
</form>


Ahora el tema es que antes de insertar el registro en la base de datos, tengo que verificar que no exista esa fecha, que no se repita, asi no hay problemas.

Lo que no entiendo es como verificar antes de insertar el registro si esa fecha que coloca el usuario existe o no existe.
Mi idea es que si existe le indique que ya alguien reservo y si no esta que lo registre y listo.

Pero no entiendo como hacerlo, hace poco empece con php y no me queda claro eso.

Gracias!
  #12 (permalink)  
Antiguo 18/01/2013, 12:32
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Verificar si existe antes de insertar.

Para centrar el problema, no es un problema ni del html, ni de php.Es un problema de base de datos.
Si la fecha no puede repetirse, lo normal es que la fecha fuera clave primaria, o clave unica, en el esquema de la tabla.

Ahora, sobre cómo saber si haces update o insert:
Si la base de datos que usas es MySQL, tienes la opción de la sintaxis :
INSERT INTO...ON DUPLICATE KEY UPDATE...
Asi, haces todo en 1 sola sentencia.Inserta si no existe, updatea si existe.Para usarlo, el campo de fecha debe ser clave unica.

Si no es mysql, igual hay una sintaxis parecida en lo que estés usando.

Si no, y lo que siempre funciona, es hacer select, ver si existe, y hacer insert o update según el caso.
  #13 (permalink)  
Antiguo 18/01/2013, 14:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Verificar si existe antes de insertar.

Veamos si con este ejemplo se entiende el proceso completo:
Comprobar si usuario existe en bbdd
El principio sirve para cualquier caso donde haya que comprobar si algo existe, si está generar un mensaje, y si no, insertarlo.

Lo único que cambiaría si fuese un producto de almacén, una asignatura de escuela o el libro de una biblioteca, es el dato que se busca en el SELECT, pero no la lógica del proceso. Esa es igual para cualquier caso.
Incluso si lo que debes hacer es realizar un UPDATE si lo encuentra, la lógica del script sigue siendo la misma, sólo que antes de devolver el mensaje, realizaría la actualización.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: formulario, html, mysql, registro, select, sql, verificar
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 03:13.