Programación php
Email: Password:


¡Regístrate gratis! | ¿Has perdido tu password?

Home
Blog

En él que podrás informarte de todas las noticias relacionadas con el posicionamiento de páginas web.

Clica aquí para Entrar



Foro de programación en PHP

Responder el mensaje

Validar registros para evitar duplicacion

Autor: Reinaldo Castro
Publicado: 05-3-2008 04:31 PM
Primeramente me disculpo si ya se trato este tema pero los ejemplos que encontraba son de versiones viejas de php. Estoy usando wampserver y desarolle una base de datos definiendo los campos de cedula y email para ser validados. Mi codigo es el siguiente

<?php
if ($_POST[oculto]!=1)
{
?>

<form id="form1" name="form1" method="post" action="">

<label>Nombre: <input type="text" name="nombre"/></label>
<br><br>
<label>Apellido: <input type="text" name="apellido"/></label>
<br><br>
<label>Cedula: <input type="text" name="cedula"/></label>
<br><br>
<label>
<input name="sexo" type="radio" value="mujer"/> Mujer
<input name="sexo" type="radio" value="hombre"/> Hombre
</label>
<br><br>
<label>Teléfono: <select name="telefono" size="1" id="telefono">
<option value="0412">0412</option>
<option value="0416">0416</option>
<option value="0424">0424</option>
<option value="0212">0212</option>
</select>
</label>
<label><input type="text" name="telefono"/></label>
<br><br>


<p><input name="oculto" type="hidden" id="oculto" value="1" /></p>
<label><input type="submit" name="submit" value="Inscribirme"/></label>
</form>

<?php } ?>

<?php
if($_POST[nombre])

{
include "conexion.php";

$sql="insert into diplomados values
('','$_POST[nombre]','$_POST[apellido]','$_POST[cedula]','$_POST[sexo]','$_POST[nacionalidad]','$_POST[inscripcion]','$_POST[email]','$_POST[telefono]')";

$consulta=mysql_query($sql,$conexion);


if ($cedula == 1) {echo "Campo cedula ya esta registrado
else {echo "inserte en la BD";}

if(!mysql_error()) {include "registro.html";}
else {"Intente mas tarde";}

mysql_close($conexion);
}
?>


Ahora mi problema es el siguiente , necesito comprobar que la cedula y el correo electronico que se esta ingresando no sean valores ya ingresados y para eso ingrese el siguiente script

if ($cedula == 1) {echo "Campo cedula ya esta registrado
else {echo "inserte en la BD";}


como prueba pero no me funciona, cuando le doy ingresar la pagina y tengo el valor de la cedula igual a uno de la base de datos se queda en blanco y no me muestra ningun error. Alguien podria ayudarme con esto??

Muchas gracias
Autor: PHP user
Publicado: 06-3-2008 08:16 AM
Hola, primero deberías poner los campos que no se deben repetir como unique en la base de datos, con esto ya no te entrarán en la tabla. Segundo, si deseas mostar algún mensaje debes hacer un select con un count, si es mayor que 0 muestras error, pero evidentemente debes hacer antes un select.
Autor: Reinaldo
Publicado: 06-3-2008 10:27 AM
Gracias por tu respuesta, el problema es que soy novato en php y no veo la forma de ubicar el select o el count. Ya habia especificado previamente como unique los campos que no se deben repetir y me muestra el mensaje del servidor "Duplicate entry '15487201' for key 2" pero lo que quiero es mostrar un mensaje mas entendible para los usuarios, pero mostrarlo en la misma pagina de ingreso. Si me puedes ayudar realmente te lo agradezco
Autor: PHP User
Publicado: 06-3-2008 11:52 AM
no hay problema ;)

Mira, donde tienes:

<?php
if($_POST[nombre])

{
include "conexion.php";

debajo debes poner:

$sql = "SELECT COUNT(*) as valor FROM diplomados WHERE email=".$email;

$consulta=mysql_query($sql,$conexion);

// Obtienes el registro valor de la base de datos y lo comparas con 0. Te paso un manual donde poder ver por donde van los tiros y que te aconsejo leer:

http://www.programacion.net/php/tutorial/php/

Espero haberte ayudado :D

Autor: Reinaldo
Publicado: 06-3-2008 01:06 PM
Ciertamente me estas ayudando bastante y te lo agradezco. Fijate ahora hice esto siguiendo tu consejo


<?php
if($_POST[nombre])

{
include "conexion.php";

$sql = "SELECT COUNT(*) as valor FROM tabla WHERE cedula=".$cedula;
$consulta=mysql_query($sql,$conexion);

if ($cedula == 1) { //comparando a 1 si ya esta el dato
echo "Campo cedula ya esta registrado";
} else {

$sql="insert into diplomados values
('','$_POST[nombre]','$_POST[apellido]','$_POST[cedula]','$_POST[sexo]','$_POST[nacionalidad]','$_POST[inscripcion]','$_POST[email]','$_POST[telefono]')";

$consulta=mysql_query($sql,$conexion) or die( mysql_error() );
}

if(!mysql_error()) {print "Bien";}
else {"Intente mas tarde";}

mysql_close($conexion);
}
?>

[:_o][:_o][:_o]
solo que aun no me realiza la operacion de //echo "Campo cedula ya esta registrado";// si ingreso nuevamente el valor por lo que me da es el error del servidor que habia mencionado antes. Por cierto buena opcion la de http://www.programacion.net/php/tutorial/php/ para los que estamos aprendiendo. Gracias por tu ayuda
Autor: PHP user
Publicado: 06-3-2008 03:51 PM
Fíjate que la condición no la haces con el recordset que te devuelve la consulta, mírate el capítulo del manual donde te indica como recuperar valores de la base de datos y verás como debes hacer la comparación ;)

Te recomiendo de nuevo que antes de continuar te leas detenidamente el manual que te he pasado :D
Autor: Bernardo Rodriguez
Publicado: 31-3-2008 07:27 PM
Mira yo tuve un problema similar y lo resolví así

despues de dar el UPDATE o el INSERT envio la sentencia
mysql_query($sql, $conexion1);

Verifico si se realizó la transacción
if (mysql_affected_rows($conexion1)==1) {
echo "<center><br><br><b>".mysql_affected_rows($conexion1)."...Su Información fue recibida correctamente...<br><br><br></b>";

Si ocurrio un error de duplicación de registros (error 1062)le informo al usuario..
} elseif (mysql_errno()=='1062'){
echo "<center><br><br><b><span style='color:#FF0000;'>!...El Número de Serie ya existe, la información no se Actualizó</span><br><br><br></b>";

Si no hubo la actualización de registro (mysql_affected_rows($conexion1)==0), le informo al usuario.
} else {
echo "<center><br><br><b>".mysql_affected_rows($conexion1)."...No se Actualizó ningún Rregistro...!<br><br><br></b>";
}

Espero que te ayude, a mi me costo muchos dolores de cabeza encontrar esta solucion. Saludos..!