Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] evitar registros duplicados con pdo

Estas en el tema de evitar registros duplicados con pdo en el foro de PHP en Foros del Web. hola amigos, bueno tengo un problema cuando edito unos campos y deseo que no se ingresen datos duplicados, solo funciona cuando edito todos los campos ...
  #1 (permalink)  
Antiguo 01/07/2013, 14:57
Avatar de giancarloffi  
Fecha de Ingreso: julio-2013
Mensajes: 63
Antigüedad: 10 años, 9 meses
Puntos: 0
Pregunta evitar registros duplicados con pdo

hola amigos, bueno tengo un problema cuando edito unos campos y deseo que no se ingresen datos duplicados, solo funciona cuando edito todos los campos pero si quiero solo editar uno no me deja, este es mi codigo

Código PHP:
public function update_usuario($id,$nombre,$email,$fecha)
      {
      try {
      
$consulta "SELECT * FROM users WHERE nombre = ? OR email = ?";
      
$query $this->dbh->prepare($consulta);
      
$query->bindParam(1,$nombre);
      
$query->bindParam(2$email);
      
$query->execute();
      if(
$query->fetchColumn() == 0){
      
$query $this->dbh->prepare('update users SET nombre = ?, email = ?, registro = ? WHERE id = ?');
      
$query->bindParam(1$nombre);
      
$query->bindParam(2$email);
      
$query->bindParam(3$fecha);
      
$query->bindParam(4$id);
      
$query->execute();
      }
      
$this->dbh null;
      } catch (
PDOException $e) {
      
$e->getMessage();
      }
      } 
parece que al cambiar uno el otro campo no lo cambia porque realmente existe, otra forma fue hacer solo el update de esta manera.

Código PHP:
public function update_usuario($id$nombre$email$fecha) {
        try {
            
$query $this->dbh->prepare('update users SET nombre = ?, email = ?, registro = ? WHERE id = ?');
            
$query->bindParam(1$nombre);
            
$query->bindParam(2$email);
            
$query->bindParam(3$fecha);
            
$query->bindParam(4$id);
            
$query->execute();
            
//$query->execute(array($nombre,$email, $fecha, $id));
            
$this->dbh null;
        } catch (
PDOException $e) {
            
$e->getMessage();
        }
    } 
y crear unas funciones para el email y el nombre de esta manera

Código PHP:
public function verificarUsuario($nombre) {
        try {
            
$id $this->dbh->query("select id from users where nombre = '$nombre'");
            if (
$id->fetch()) {
                return 
true;
            }
            return 
false;
        } catch (
PDOException $e) {
            
$e->getMessage();
        }
    }

    public function 
verificarEmail($email) {
        try {
            
$id $this->dbh->query("select id from users where email = '$email'");
            if (
$id->fetch()) {
                return 
true;
            }
            return 
false;
        } catch (
PDOException $e) {
            
$e->getMessage();
        }
    } 
y en el archivo de agregar editar colocar esto.

Código PHP:
if ($usuarios->verificarUsuario($nombre)) {
    echo 
"Este Nombre ya existe";
    exit;
}

if (
$usuarios->verificarEmail($email)) {
    echo 
"Este Email ya existe";
    exit;
}

if (
$id 0) {
    
$usuarios->update_usuario($id$nombre$email$registro);
} else {
    
//$usuarios->verificar($nombre, $email, $registro);
    
$usuarios->insert_usuario($nombre$email$registro);

y ocurre lo mismo si alguien podria indicarme como solucionar esto ya que llevo 2 dias y no puedo solucionarlo o que me den alguna idea. Gracias de antemano!!!
  #2 (permalink)  
Antiguo 01/07/2013, 15:23
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: evitar registros duplicados con pdo

Te falta colocar un filtro, para buscar campo = 'contenido' AND id != id_del_usuario_actual
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 01/07/2013, 16:01
Avatar de giancarloffi  
Fecha de Ingreso: julio-2013
Mensajes: 63
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: evitar registros duplicados con pdo

Hola Triby gracias por responder, la verdad soy nuevo usando lo que es PDO, podrias ser un poquito mas especifico con el codigo y en donde ponerlo, te lo agradeceria xq la verdad no lo entendi :(
  #4 (permalink)  
Antiguo 01/07/2013, 17:16
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: evitar registros duplicados con pdo

No importa si usas PDO, mysqli o la obsoleta mysql, la sintáxis de la consulta tiene que ser la misma:

1- Si se trata de un usuario nuevo, entonces en el where solo verificas nombre y correo, quedando where campo = 'contenido tecleado por el usuario'

2- Si se trata de un usuario registrado y haces la búsqueda igual que la anterior, casi seguro obtendrás que el nombre y/o correo ya existen, por eso debes agregar al where la parte del AND id != id_de_usuario_actual
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 02/07/2013, 12:24
Avatar de giancarloffi  
Fecha de Ingreso: julio-2013
Mensajes: 63
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: evitar registros duplicados con pdo

triby gracias por tu ayuda pude realizar la edicion perfectamente, una consulta ahora como envio los mensaje de que el nombre o el email ya estan en uso y otra consulta mas como podria hacerlo con el segundo metodo que puse arriba para esta validacion si no fuera mucho pedir gracias igual manera :D

Etiquetas: duplicados, pdo, registro, registros, select, usuarios
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 02:07.