Foros del Web » Programando para Internet » PHP »

Datos duplicados PHP-MYSQL

Estas en el tema de Datos duplicados PHP-MYSQL en el foro de PHP en Foros del Web. Buenas a todos. Espero me puedan ayudar con el siguiente problema. de antemano gracias Tengo una serie de catalogos referentes a clientes, proveedores, conceptos y ...
  #1 (permalink)  
Antiguo 02/12/2010, 13:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 30
Antigüedad: 14 años, 2 meses
Puntos: 0
Datos duplicados PHP-MYSQL

Buenas a todos.

Espero me puedan ayudar con el siguiente problema. de antemano gracias

Tengo una serie de catalogos referentes a clientes, proveedores, conceptos y bancos, en un formulario donde doy de alta, modifico y elimino registros sin cambiar de pantalla. Esto lo hace perfectamente sin embargo es necesario hacer la validacion para que no me duplique registros con el mismo nombre. NO he encontrado como hacerle para no perder la estructura.

Les pongo el codigo donde mando a llamar la clase que modifica, borra, rellena la tabla y da de alta, y el codigo de la clase donde guardo y modifico. De antemano gracias.....
Código PHP:
<?php
if (isset($_POST['submit'])&&!is_numeric($_POST['id'])) // si presiono el boton ingresar
{

    
$cliente=new Cliente();
    
//print_r($_POST);
    
$cliente->setNombre($_POST['nombre']); // setea los datos
    
$cliente->setApellido($_POST['nombresocio']);    
    
$cliente->setFecha($_POST['persona']);
    print 
" <H2>Cliente Guardado:</H2> ";
    
" <H2>Registro Guardado:</H2> "$cliente->insertCliente(); // inserta y muestra el resultado
}
if (isset(
$_POST['submit'])&&is_numeric($_POST['id'])) // si presiono el boton y es modificar
{
    
$cliente=new Cliente($_POST['id']);  // instancio la clase pasandole el nro de cliente para cargar los datos
    
$cliente->setNombre($_POST['nombre']); // setea los datos nuevos
    
$cliente->setApellido($_POST['nombresocio']);    
    
$cliente->setFecha($_POST['persona']);    
    print 
"<h2>Cliente Modificado:</h2>";
    
"<h2>Registro Modificado:</h2>"$cliente->updateCliente(); // inserta y muestra el resultado
}
if (isset(
$_GET['br'])&&is_numeric($_GET['br'])) // si presiono el boton y es eliminar
{
    
$cliente=new Cliente();
    print 
"<h2>Cliente Borrado: </h2>";
    
"<h2>Cliente Borrado: </h2>"$cliente->deleteCliente($_GET['br']); // elimina el cliente y muestra el resultado
}     
$cliente=new Cliente();
$clientes$cliente->getClientes(); // obtiene todos los clientes para despues mostrarlos

print '<br/><br/><table border=1 width="650" align="center">'
          
.'<tr><td><h2>Nombre Cliente:</h2></td>'
          
.'<td><h2>Socio:</h2></td>'
          
.'<td><h2>Fisica o Moral</h2></td>'
          
.'<td><h2>Modificar</h2></td>'
          
.'<td><h2>Borrar</h2></td></tr>';

while (
$row=mysql_fetch_Array($clientes)) // recorre los clientes uno por uno hasta el fin de la tabla
{
    print 
'<tr>'
          
.'<td><h3>'.$row['nombre'] .'</h3></td>'
          
.'<td><h3>'.$row['apellido'] .'</h3></td>'
          
.'<td><h3>'.$row['fecha_nac'] .'</h3></td>'
          
.'<td><h3><a href="clientes.php?md='.$row['id'].'">Modificar</h3></a></td>'   // en este ejemplo para simplificar se envian los parametros por get utilizando un href
          
.'<td><h3><a href="clientes.php?br='.$row['id'].'">Borrar</h3></a></td>'        // lo correcto seria enviarlos por post con un submit por ejem.
          
.'</tr>';
}
print 
'</table>';
?>
</p>
<p>
aqui mando el formulario por medio de una clase a mysql.

Código PHP:
class Cliente
{
    var 
$nombre;     //se declaran los atributos de la clase, que son los atributos del cliente
    
var $nombresocio;
    var 
$persona;
    var 
$id;
    function 
Cliente($nro=0// declara el constructor, si trae el numero de cliente lo busca , si no, trae todos los clientes
    
{
        if (
$nro!=0)
        {
            
$obj_cliente=new sQuery();
            
$result=$obj_cliente->executeQuery("select * from clientes where id = $nro"); // ejecuta la consulta para traer al cliente 
            
$row=mysql_fetch_array($result);
            
$this->id=$row['id'];
            
$this->nombre=$row['nombre'];
            
$this->nombresocio=$row['apellido'];
            
$this->persona=$row['fecha_nac'];
        }
    }
    function 
getClientes() // este metodo podria no estar en esta clase, se incluye para simplificar el codigo, lo que hace es traer todos los clientes 
        
{
            
$obj_cliente=new sQuery();
            
$result=$obj_cliente->executeQuery("select * from clientes"); // ejecuta la consulta para traer al cliente 
            
return $result// retorna todos los clientes
        
}
        
        
// metodos que devuelven valores
    
function getID()
     { return 
$this->id;}
    function 
getNombre()
     { return 
$this->nombre;}
    function 
getApellido()
     { return 
$this->nombresocio;}
    function 
getFecha()
     { return 
$this->persona;}
     
        
// metodos que setean los valores
    
function setNombre($val)
     { 
$this->nombre=$val;}
    function 
setApellido($val)
     {  
$this->nombresocio=$val;}
    function 
setFecha($val)
     {  
$this->persona=$val;}    
            
//function guardacliente($nombrecliente, $idsocio, $persona)
             //{
                //$cadenaguardacliente=sprintf("insert into clientes values(0, '%s', %d, %d)", $nombrecliente, $idsocio, $persona);
                //$ejecutaguardarcliente=mysql_query($cadenaguardacliente, $this->GM2010)or die(mysql_error());
            //}
    
function updateCliente()    // actualiza el cliente cargado en los atributos
    
{
            
$obj_cliente=new sQuery();
            
$query="update clientes set nombre='$this->nombre', apellido='$this->nombresocio',fecha_nac='$this->persona' where id = $this->id";
            
$obj_cliente->executeQuery($query); // ejecuta la consulta para traer al cliente 
            
return $query .'<br/>Registros afectados: '.$obj_cliente->getAffect(); // retorna todos los registros afectados
    
    
}
    function 
insertCliente()    // inserta el cliente cargado en los atributos
    
{
            
$obj_cliente=new sQuery();
            
$query="insert into clientes( nombre, apellido, fecha_nac)values('$this->nombre', '$this->nombresocio','$this->persona')";
            
            
$obj_cliente->executeQuery($query); // ejecuta la consulta para traer al cliente 
            
return $query .'<br/>Registros afectados: '.$obj_cliente->getAffect(); // retorna todos los registros afectados
    
    
}    
    function 
deleteCliente($val)    // elimina el cliente
    
{
            
$obj_cliente=new sQuery();
            
$query="delete from clientes where id=$val";
            
$obj_cliente->executeQuery($query); // ejecuta la consulta para  borrar el cliente
            
return $query .'<br/>Registros afectados: '.$obj_cliente->getAffect(); // retorna todos los registros afectados
    
    
}    
    
}


?> 
Si alguien necesita el codigo completo me avisan y se los paso es una buena herramienta para administrar un catalogo. Gracias
  #2 (permalink)  
Antiguo 02/12/2010, 14:22
 
Fecha de Ingreso: septiembre-2006
Mensajes: 34
Antigüedad: 18 años, 3 meses
Puntos: 1
Respuesta: Datos duplicados PHP-MYSQL

Tal ves te sirva crear un indice y atributo de valores unicos sobre el campo donde no quieres duplicados, de esta manera te generará un error al intentar insertar el registro.
o hacer una consulta buscando registros con el nombre que estas aponto de ingresar y si encuentas mandar un mensaje informando que ya existe.
  #3 (permalink)  
Antiguo 02/12/2010, 14:41
 
Fecha de Ingreso: septiembre-2010
Mensajes: 30
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Datos duplicados PHP-MYSQL

Si se que debo hacer eso lo que no encuentro es la sintaxis de como hacerlo y donde debo colocar el codigo antes de validar.
  #4 (permalink)  
Antiguo 03/12/2010, 14:40
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 7 meses
Puntos: 528
Respuesta: Datos duplicados PHP-MYSQL

Si le das el atributo de unico a un campo de una tabla, al hacer la operacion de "insert into", te va a regresar un error, asi que con una simple comprobacion lo sabrias:
if(!mysql_query("insert into tabla values....."))
return "error".mysql_error();
claro que en tu clase ya has de manejar un metodo que te indica cuando una query devuelve error...

Etiquetas: duplicados, php-mysql
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 14:15.