Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/07/2013, 14:57
Avatar de giancarloffi
giancarloffi
 
Fecha de Ingreso: julio-2013
Mensajes: 63
Antigüedad: 10 años, 10 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!!!