Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Mostrar error 1062 de sql (registro duplicado)

Estas en el tema de Mostrar error 1062 de sql (registro duplicado) en el foro de PHP en Foros del Web. Buenas, les planteo mi problema, tengo un formulario de insercion de registros, pero quiero evitar que se inserte un, registro duplicado, para eso lo que ...
  #1 (permalink)  
Antiguo 08/07/2015, 16:44
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 8 años, 10 meses
Puntos: 1
Mostrar error 1062 de sql (registro duplicado)

Buenas, les planteo mi problema, tengo un formulario de insercion de registros, pero quiero evitar que se inserte un, registro duplicado, para eso lo que ise fue que en la base de datos le puse clave unica, ojo no es clave primaria, es clave unica, al inviar el formulario todo funciona bien y no muestra ningun error mi pagina en php, pero se que lo hay pues inserto un registro que ya esta en la base de datos como clave unica, pero no me muestra el error, cuando el error deberia ser 1062, e probado con mysql_errno(), y no lo muestra mysql_error(), y no me muestra nada, quisiera saber si es posible detectar ese error de alguna forma y mostrarmelo en pantalla
  #2 (permalink)  
Antiguo 08/07/2015, 16:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar error 1062 de sql (registro duplicado)

A mi me gustaría poder ver el código que hace el INSERT, de otra forma se me complica adivinar que estaría mal.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/07/2015, 16:51
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: Mostrar error 1062 de sql (registro duplicado)

Código PHP:
<?php require_once('../Connections/raylink.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  if (
PHP_VERSION 6) {
    
$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 codigos (codigo, tipo_de_producto, descripcion, costo, proveedor) VALUES (%s, %s, %s, %s, %s)",
                       
GetSQLValueString($_POST['codigo'], "text"),
                       
GetSQLValueString($_POST['tipo_de_producto'], "text"),
                       
GetSQLValueString($_POST['descripcion'], "text"),
                       
GetSQLValueString($_POST['costo'], "text"),
                       
GetSQLValueString($_POST['proveedor'], "text"));

  
mysql_select_db($database_raylink$raylink);
  
$Result1 mysql_query($insertSQL$raylink);
 
mysql_errno($raylink);       
   
   
//      if( mysql_errno() == 1048 ) {
//          echo "<br />
//Ningun Campo debe quedar en blanco<br />
//";
//    } else {
//          echo mysql_error();
//    }
//    
//     if( mysql_errno() == 1062 ) {
//          echo "<br />
//Este producto ya exite en la base de datos<br />
//";
//    } else {
//          echo mysql_error();
//    }    
  
}

mysql_select_db($database_raylink$raylink);
$query_Recordset1 "SELECT * FROM codigos";
$Recordset1 mysql_query($query_Recordset1$raylink) or die(mysql_error());
$row_Recordset1 mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 mysql_num_rows($Recordset1);

mysql_select_db($database_raylink$raylink);
$query_Recordset2 "SELECT * FROM proveedores";
$Recordset2 mysql_query($query_Recordset2$raylink) or die(mysql_error());
$row_Recordset2 mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 mysql_num_rows($Recordset2);
?>
ese es el codigo y muchas gracias por tu interes
  #4 (permalink)  
Antiguo 08/07/2015, 16:59
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Mostrar error 1062 de sql (registro duplicado)

Código PHP:
Ver original
  1. if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

Y esa variable de donde saldria? Me parece que nunca esta entrando a ese if
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 08/07/2015, 16:59
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Mostrar error 1062 de sql (registro duplicado)

creo que es más facil hacer la validacion con jquery desde el formulario durante el llenado y asi si el registro esta duplicado este lo indica o en tal caso crear una condicion que busque el registro primero antes de la inserción
  #6 (permalink)  
Antiguo 08/07/2015, 17:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar error 1062 de sql (registro duplicado)

Cita:
Iniciado por xfxstudios Ver Mensaje
creo que es más facil hacer la validacion con jquery desde el formulario durante el llenado y asi si el registro esta duplicado este lo indica o en tal caso crear una condicion que busque el registro primero antes de la inserción
Claro, y si desactivan javascript entonces todo estará bien.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 08/07/2015, 17:06
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Mostrar error 1062 de sql (registro duplicado)

Cita:
Iniciado por pateketrueke Ver Mensaje
Claro, y si desactivan javascript entonces todo estará bien.
Se nota que no leiste
Cita:
o en tal caso crear una condicion que busque el registro primero antes de la inserción
  #8 (permalink)  
Antiguo 08/07/2015, 17:07
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: Mostrar error 1062 de sql (registro duplicado)

NSD, la variable es del formulario, y para los demas, el formulario y la insercion funcionan perfectamente, pero el problema aqui es que si inserto un registro duplicado actua talo y como si todo estubiera bien, y en la base de datos no se inserta porque el registro es registro unico, el problema es como hago que me muestre ese error que se muy bien que es el 1062?, sobre lo que dices de crear una funcion que compruebe antes de insertar, podrian mostrarme como si no es mucha molestia?
  #9 (permalink)  
Antiguo 08/07/2015, 18:44
Avatar de palmitha  
Fecha de Ingreso: mayo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar error 1062 de sql (registro duplicado)

Prueba igualando el metodo de error a una variable

mysql_select_db($database_raylink, $raylink);
$Result1 = mysql_query($insertSQL, $raylink);
$varError = mysql_errno($raylink);


// if( $varError == 1048 ) {
// echo "<br />
//Ningun Campo debe quedar en blanco<br />
//";
// } else {
// echo mysql_error();
// }
//
// if( $varError == 1062 ) {
// echo "<br />
//Este producto ya exite en la base de datos<br />
//";
// } else {
// echo mysql_error();
// }

O Agregando el parametro al metodo en el if

mysql_errno($raylink);


// if( mysql_errno($raylink) == 1048 ) {
// echo "<br />
//Ningun Campo debe quedar en blanco<br />
//";
// } else {
// echo mysql_error();
// }
//
// if( mysql_errno($raylink) == 1062 ) {
// echo "<br />
//Este producto ya exite en la base de datos<br />
//";
// } else {
// echo mysql_error();
// }
  #10 (permalink)  
Antiguo 08/07/2015, 19:19
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: Mostrar error 1062 de sql (registro duplicado)

Muchas gracias por contestar, efectivamente ya e guardado el error en variables, pero no muestra el error, es como si realmente no hubiera un error, ese es el dilema, que si alguien intentara ingresar un registro ya existe, no resivira ningun aviso que haga saber eso, e provado de muchas formas pero el error sigue sin aparecer
  #11 (permalink)  
Antiguo 08/07/2015, 19:37
 
Fecha de Ingreso: junio-2015
Mensajes: 30
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: Mostrar error 1062 de sql (registro duplicado)

Ya solucione el error, muchas gracias a todos, el error estaba en la base de datos, sali de servidor y volvi a antrar, luego volvi a darle unico al registro, por alguna razon no servia y no se cual es, Gracias
  #12 (permalink)  
Antiguo 08/07/2015, 19:40
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, 5 meses
Puntos: 2658
Respuesta: Mostrar error 1062 de sql (registro duplicado)

El error 1062 significa simple y sencillamente que estás intentando un INSERT donde los valores asignados a la PK ya existen en la base.
Metodológicamente, lo más simple es que ANTES de ejecutar el insert hagas un SELECT COUNT(*) donde busques solo el valor de la PK en esa tabla . Si la consulta devuelve un valor diferente de cero (0) no insertas, caso contrario ejecutas el INSERT.
De todos modos sin ver la estructura de la tabla en la base (el CREATE TABLE) sólo podemos suponer lo que está pasando.

Por lo demás, trata de armas códigos más ordenados, con una clara separación de las funcionalidades, en especial de los formularios. Ayuda a la trazabilidad de los errores.

Finalmente, te recomendaría que dejes de usar ese ab...to de la naturaleza que es esa función "GetSQLValueString", que todo el mundo copia, porque sólo sirve para no aprender a controlar los valores de las variables, y casi siempre la usan tan mal que terminan viniendo a pedir auxilio a este foro.
En las pocas ocasiones en que he usado una función de ese tipo la he creado yo mismo, ya que no confío en esos codigos que todo el mundo replica como si fuesen buenos.

DE todos modos esto último es tu decisión, no la mía.
__________________
¿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: duplicados, registros
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 14:39.