Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

No permitir duplicados en mysql con php

droga

Becerro
Desde
23 Sep 2008
Mensajes
18
Saludos se que tengo 2 post en funcion pero estoy un poco urgido con s ayuda y ojala la consiga

como lo dise el titulo necesito que al insertar datos a una BD mysql desde un formulario no permita duplicados lo que busco es que el campo cedula no permita duplicados les voy a mostrar todo el codigo que tengo :


Base de datos:
PHP:
CREATE TABLE contactos ( 
  codigo int(11) NOT NULL auto_increment, 
  nombre varchar(40) default NULL,
  apellido varchar(40) default NULL, 
  edad varchar(4) default NULL, 
  cedula varchar(11) default NULL, 
  telefono varchar(11) default NULL,
  celular varchar(11) default NULL,
  nacionalidad varchar(11) default NULL,
  idioma varchar(11) default NULL, 
  mail varchar(50) default NULL,
  ofertas varchar(4) default NULL,
PRIMARY KEY (`codigo`) 
)

Formulario:

PHP:
<!-- Codigo formulario inicio --> 
<style type="text/css">
#boton_enviar {
 width: 127px;
 height: 37px;
 margin-left: 80px;
 background: transparent;
 border: 0px Solid transparent;
 background-image: url(images/boton.bmp);
 text-indent: -9999px;
}
</style>
<script type="text/javascript">
<!--
function MM_validateForm() { //v4.0
  if (document.getElementById){
    var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
    for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=document.getElementById(args[i]);
      if (val) { nm=val.name; if ((val=val.value)!="") {
        if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
          if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
        } else if (test!='R') { num = parseFloat(val);
          if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
          if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
            min=test.substring(8,p); max=test.substring(p+1);
            if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
      } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
    } if (errors) alert('The following error(s) occurred:\n'+errors);
    document.MM_returnValue = (errors == '');
} }
//-->
</script>
<form action="proceso.php" method="post">
<p>Nombre: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Apellido:<br />
  <label>
    <input name="nombre" type="text" id="nombre" size="25" />
  </label>
  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<input name="apellido" type="text" id="apellido" size="25" />
  <br />
  Celular: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; E-mail:<br />
  <input name="celular" type="text" id="celular" size="25" />
  <label>
   &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <input name="mail" type="text" id="mail" size="25" />
  </label>
  <br />
  Edad: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Telefono:<br />
  <label>
    <input name="edad" type="text" id="edad" size="25" />
  </label>
  <label>
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<input name="telefono" type="text" id="telefono" size="25" />
  </label>
  <br />
  Cedula: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  Ciudad de Recidencia:<br />
  <label>
    <input name="cedula" type="text" id="cedula" size="25" />
  </label>
  <label>
    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<input name="nacionalidad" type="text" id="nacionalidad" size="25" />
  </label>
  <br />
  Idioma de Preferencia: <br>          
  <label>
    <input name="idioma" type="text" id="idioma" size="25" />
   </label>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Deseo Recibir Ofertas:
<select name="ofertas">
<option value="si">SI</option>
<option value="no">NO</option>
</select>
  </label>
  <br />
  <br />
  <label>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input name="enviar" type="submit" id="boton_enviar" onClick="MM_validateForm('cedula','','R');return document.MM_returnValue" value="   ">
 
  </label>
</p>
</body>
 
<!-- Codigo formulario final -->


Proceso.php

PHP:
<!-- Codigo php inicio -->            
<?php
$conexion=mysql_connect("mysql50-59.wc1","340363_copa","Wi7jCXXHb9") 
  or die("Problemas en la conexion");
mysql_select_db("340363_tombola",$conexion) or
  die("Problemas en la seleccion de la base de datos");
mysql_query("insert into contactos(nombre,apellido,edad,cedula,telefono,celular,nacionalidad,idioma,mail,ofertas) values 
('$_REQUEST[nombre]','$_REQUEST[apellido]','$_REQUEST[edad]','$_REQUEST[cedula]','$_REQUEST[telefono]','$_REQUEST[celular]','$_REQUEST[nacionalidad]','$_REQUEST[idioma]','$_REQUEST[mail]','$_REQUEST[ofertas]')",  
$conexion) or die("Problemas en el select".mysql_error());
mysql_close($conexion);
echo "<center><strong>Los Datos fueron insertados Correctamente...</strong><br> <img src=\"images/ok.png\">
</center>"
;
?>       
<!-- Codigo php final -->

Thanks ojala me ayudan porfa estoy al borde de llorar
 
Necesitas ponerle el atributo unique al Campo desde la base de datos
Y si quieres validarlo antes.... haz un select

SELECT COUNT(cedula) as cuantos FROM contactos WHERE cedula='cedula que introduce el usuario'... Te trae: la cantidad de registros con esa cedula (como sera campo unique, solo debera traer 1, o 0)

Si es 1 muestras el mensaje, que ya existe, si es 0 procedes
XD
 
Duplicados

hola podrias ponerle el ejemplo porfa

ayudame con esa te lo ruego

que tebgo muchos problemas con eso
 
Código:
CREATE TABLE `contactos` (
`codigo`  int(11) NOT NULL AUTO_INCREMENT UNIQUE,
PRIMARY KEY (`codigo`)
)
;
 
muy bien dragonjon81 te dio la mitad de la respuesta, pero no lo dejes ahi, pues que el campo sea unique no garantiza la integridad, si resive una tupla nueva con el campo que es unique repetido, solo no lo insertará, pero tu debes cachar el error en la aplicacion para reportarselo al usuario y que lo cambie o que desista.

Para eso antes de tu codigo de insertar en el php, necesitas una evaluación que lo verifique.

if (!codigoRepetido($codigo)){
//...Todo tu codigo que lo inserta normalmente
}

el metodo codigoRepetido(codigo) verifica si ya existe el codigo que estan introduciendo, y como queremos lo contario, es decir, que no exista, ponemos la negacio "!" antes de la funcion.
El contenido del metodo seria el siguiente:

public function codigoRepetido($codigo){
$codigoRepBD = mysql_query("SELECT * FROM contactos WHERE cedula = '$codigo'");

return (mysql_num_rows($codigoRepBD) > 0)?true:false;

}

como vez es de lo más sencillo.. Suerte.
 
Orale....me sevira mucho en mi proyecto de la uni, gracias por el aporte
 
Volver
Arriba