Foros del Web » Programando para Internet » PHP »

validar si ya existe un registro al insertar

Estas en el tema de validar si ya existe un registro al insertar en el foro de PHP en Foros del Web. hola antes que nada soy nuevo en esto y no se si aqu es donde debo plantear mi duda ... tengo un problema al insertar ...
  #1 (permalink)  
Antiguo 11/05/2009, 13:15
 
Fecha de Ingreso: mayo-2009
Ubicación: Estado de México
Mensajes: 7
Antigüedad: 14 años, 11 meses
Puntos: 0
validar si ya existe un registro al insertar

hola antes que nada soy nuevo en esto y no se si aqu es donde debo plantear mi duda ...

tengo un problema al insertar datos de formulario, mi problema es q necesito validar la "ip" q inserto , es decir q antes de realizar el insert primero busque en la base si existe esa ip y mostrar un mensaje "la ip ya existe"

este es el codigo q genere..


if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "formhost")) {
$insertSQL = sprintf("INSERT INTO catalogo_host (id, ip, nombre, usuario, fecha) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($_POST['id'], "int"),
GetSQLValueString($_POST['ip'], "text"),
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['usuario'], "text"),
GetSQLValueString($_POST['fecha'], "date"));

mysql_select_db($database_ws, $ws);
$Result1 = mysql_query($insertSQL, $ws) or die(mysql_error());

$insertGoTo = "catalogos.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
//header(sprintf("Location: %s", $insertGoTo));

header("Location: alerta.php");
}


nota: la pagina alerta.php lo unico q haces es mandar un mensaje que indica q el registro fue guardado correctamente.


ESPERO Y ME PUEDAN AYUDAR
  #2 (permalink)  
Antiguo 11/05/2009, 13:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: validar si ya existe un registro al insertar

es simple...

primero debes hacer un SELECT previo con la IP a comparar...

si devuelve algún resultado, ya existe... si no, procedes con el INSERT
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 11/05/2009, 13:55
 
Fecha de Ingreso: mayo-2009
Ubicación: Estado de México
Mensajes: 7
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: validar si ya existe un registro al insertar

de antemano muchas gracias solo que sinceramente lo intente pero no me quedo la verdad soy nuevo en esto y no se si me podrias ayudar a resolver este problema.

mira el campo de id es autoincremental y es la llave primaria por lo tanto nunca se repite la ip bueno mas bien no me marca error de duplicidad ya q el id nunca se repite
  #4 (permalink)  
Antiguo 11/05/2009, 14:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: validar si ya existe un registro al insertar

es simple, como te decía... ignoremos la estructura de tu tabla...

Código PHP:
<?php
// asumimos que $ip ya existe con un valor real

$sql "SELECT * FROM tabla WHERE ip='$ip'";
$res mysql_query($sql) or die(mysql_error());

if (
mysql_num_rows($res) > 0)
{
  
// ya existe una fila con el $ip especificado
}
else
{
  
// NO existe, entonces... INSERT
}
bingo!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 11/05/2009, 14:51
 
Fecha de Ingreso: mayo-2009
Ubicación: Estado de México
Mensajes: 7
Antigüedad: 14 años, 11 meses
Puntos: 0
disculpa tanta ignorancia pero es q me marca error ..

Undefined variable: ip

deje mi codigo de esta manera:

<?php


$sql = "SELECT * FROM catalogo_host WHERE ip='$ip'";
$res = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($res) > 0)
{
// ya existe una fila con el $ip especificado

echo "ya existe";
}
else
{
// NO existe, entonces... INSERT

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "formhost")) {
$insertSQL = sprintf("INSERT INTO catalogo_host (id, ip, nombre, usuario, fecha) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($_POST['id'], "int"),
GetSQLValueString($_POST['ip'], "text"),
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['usuario'], "text"),
GetSQLValueString($_POST['fecha'], "date"));

mysql_select_db($database_ws, $ws);
$Result1 = mysql_query($insertSQL, $ws) or die(mysql_error());

$insertGoTo = "catalogos.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
//header(sprintf("Location: %s", $insertGoTo));

header("Location: alerta.php");
}
}

?>

Última edición por GatorV; 11/05/2009 a las 17:43
  #6 (permalink)  
Antiguo 11/05/2009, 14:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: validar si ya existe un registro al insertar

como te especifique:

Cita:
asumimos que $ip ya existe con un valor real
que en tu caso, viene a ser $_POST['ip'] ¿cierto??

NOTA que también la columna ip debe ser la que tu usas, porque yo solo lo hice con la intención de ilustrar un ejemplo... no para que copies-y-pegues (usa la cabeza tu inteligencia)

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 11/05/2009, 15:46
 
Fecha de Ingreso: mayo-2009
Ubicación: Estado de México
Mensajes: 7
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: validar si ya existe un registro al insertar

disculpa pero soy principiante en esto y sinceramente tengo problemas con esto y no entiendo como recuperar la ip del campo de texto.

te agradecera enormemente tu ayuda.

Código PHP:

$sql 
"SELECT * FROM catalogo_host WHERE ip='$ip'";
$res mysql_query($sql) or die(mysql_error());

if (
mysql_num_rows($res) > 0)
{
  echo 
" <script>
alert('Error, la ip ya existe');
</script> "
;
}
else
{
 
  if ((isset(
$_POST["MM_insert"])) && ($_POST["MM_insert"] == "formhost")) {
  
$insertSQL sprintf("INSERT INTO catalogo_host (id, ip, nombre, usuario, fecha) VALUES (%s, %s, %s, %s, %s)",
                       
GetSQLValueString($_POST['id'], "int"),
                       
GetSQLValueString($_POST['ip'], "text"),
                       
GetSQLValueString($_POST['nombre'], "text"),
                       
GetSQLValueString($_POST['usuario'], "text"),
                       
GetSQLValueString($_POST['fecha'], "date"));

  
mysql_select_db($database_ws$ws);
  
$Result1 mysql_query($insertSQL$ws) or die(mysql_error());

  
$insertGoTo "catalogos.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$insertGoTo .= (strpos($insertGoTo'?')) ? "&" "?";
    
$insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  
//header(sprintf("Location: %s", $insertGoTo));
  
  
header("Location: alerta.php");
}
// fin if insert
  
//fin else 
  #8 (permalink)  
Antiguo 11/05/2009, 15:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: validar si ya existe un registro al insertar

caray... es la tercera ves que te digo:

debes usar $_POST['ip'] eso es todo!!

Código HTML:
<input name="ip"/> 
Código PHP:
$ip $_POST['ip']; 
NOTA que así viene en tus códigos...

Código PHP:
GetSQLValueString($_POST['ip'], "text"
por favor, lee el manual antes de que sigas con mas dudas por acá
http://www.php.net/variables.external
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 11/05/2009, 16:06
 
Fecha de Ingreso: mayo-2009
Ubicación: Estado de México
Mensajes: 7
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: validar si ya existe un registro al insertar

antes q nada mil disculpas por el mal rato q te hice pasar...

y mil gracias por tu ayuda ya quedo solucionado el problema
salu2
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 10:52.