No permitir duplicados en mysql con php

#1
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
 

AlxRex

Bovino maduro
#2
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
 

cdar

Bovino maduro
#5
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.
 
Arriba