PHP - Evitar ingresar registros duplicados

 
Vista:
Imágen de perfil de Nestor
Val: 7
Ha aumentado su posición en 23 puestos en PHP (en relación al último mes)
Gráfica de PHP

Evitar ingresar registros duplicados

Publicado por Nestor (2 intervenciones) el 28/12/2019 10:16:15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php include ("db.php");
      $conn = conn();
      if(!$conn){
          header('Location:error.php');
      }
       function cleanData($data){
           $data = trim($data);
           $data = stripslashes($data);
           $data = htmlspecialchars($data);
           return $data;
       }
 
     //Los Datos
     if(isset($_POST['formClient'])){
          $namefull = cleanData($_POST['namefull']);
          $direccion = cleanData($_POST['direccion']);
          $phone = cleanData($_POST['phone']);
          $email = cleanData($_POST['email']);
          $city = cleanData($_POST['city']);
 
         if(empty($namefull) or empty($direccion) or empty($email) or empty($phone) or empty($city)) {
              header('Location:../include/error.php');
         }
         else{
 
         $statement = $conn->prepare('INSERT INTO client(id,namefull,direccion,email,phone,city) VALUES ( NULL,:namefull,:direccion,:email,:phone,:city)');
         $statement->execute(array(':namefull' => $namefull, 'direccion' => $direccion, 'email' => $email, ':phone' => $phone, 'city' => $city));
 
 
         Creo que acá tendría que poner el código
         Que compare la columna $namefull,
 
 
      if ($statement){
 
             $_SESSION['message'] = 'Paciente agregado con éxito <br><p class"cerrar-x">Cerrar</p>';
 
             header('Location:../');
 
         }else{
 
              header('Location:../include/error.php');
 
          }
       }
 
    }
 
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
sin imagen de perfil

Evitar ingresar registros duplicados

Publicado por anonymous (53 intervenciones) el 28/12/2019 14:16:21
Eso es tan elemental, que es solo crearle un primary key a la tabla (Preferiblemente un auto incremental), adicionalmente el documento del paciente debe estar definido en la BD como Unique para que evite duplicidad por dicha columna, entonces al momento de grabar pues simplemente haces una búsqueda del documento que están tratando de ingresar, de hallarle muestras un mensaje de error, argumentando que ya existe, en caso contrario grabas.

Un paciente tiene que tener un documento único. Lo importante es que crees las restricciones a nivel de la base de datos así:

CREATE TABLE client(
Client_Id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
Document_Cliente varchar(15) NOT NULL UNIQUE,
- - - - -
- - - - -
- - - - -
)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Evitar ingresar registros duplicados

Publicado por anonymous (53 intervenciones) el 28/12/2019 14:38:50
Por último, al parecer tú pretendes validar que no repitan el namefull pero debes tener en cuenta que hay nombres iguales, entonces la recomendación es que adiciones una columna a tu tabla donde almacenes el documento de identificación que si tiene que ser único para cada persona, y harías la validación es por este campo.

Si algo me escribes y lo acabamos de organizar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Nestor
Val: 7
Ha aumentado su posición en 23 puestos en PHP (en relación al último mes)
Gráfica de PHP

Evitar ingresar registros duplicados

Publicado por Nestor (2 intervenciones) el 28/12/2019 15:29:49
Si. Le voy a agregar una columna de números de documento y esa es la que voy a validar.
El tema es que auto-incrementado tengo el id, para poder editar o borrar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Evitar ingresar registros duplicados

Publicado por anonymous (53 intervenciones) el 28/12/2019 20:01:08
Puedes obtener el último id generado con: @@identity

Pero como el documento del cliente-paciente es unique puedes actualizar con ese y no hay problema, se garantiza que solo toca el registro que es, porque no pueden haber dos documentos iguales. Suponiendo que la columna donde almacenarás el documento la llames document, tú código finalmente podría quedar así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php include ("db.php");
      $conn = conn();
      if(!$conn){
          header('Location:error.php');
      }
       function cleanData($data){
           $data = trim($data);
           $data = stripslashes($data);
           $data = htmlspecialchars($data);
           return $data;
       }
 
     //Los Datos
     if(isset($_POST['formClient'])){
          $document = cleanData($_POST['document']);
          $namefull = cleanData($_POST['namefull']);
          $direccion = cleanData($_POST['direccion']);
          $phone = cleanData($_POST['phone']);
          $email = cleanData($_POST['email']);
          $city = cleanData($_POST['city']);
 
         if(empty($document) or empty($namefull) or empty($direccion) or empty($email) or empty($phone) or empty($city))
         {
              header('Location:../include/error.php');
         }
         else
         {  // Validaremos primero que el document no exista
            $sql="SELECT document FROM client WHERE document = '$document'";
            $result = $conn->query($sql);
            $row_cnt = $result->num_rows;
            $result->close(); // Cerrar el resultset
            if ($row_cnt > 0) // Si $row_cnt es mayor de 0 es porque existe el registro
            {
                header('Location:../include/error.php');
            }
            else
            {
                $statement = $conn->prepare('INSERT INTO client(id,namefull,direccion,email,phone,city) VALUES ( NULL,:namefull,:direccion,:email,:phone,:city)');
                $statement->execute(array(':namefull' => $namefull, 'direccion' => $direccion, 'email' => $email, ':phone' => $phone, 'city' => $city));
                if ($statement)
                {
                    $_SESSION['message'] = 'Paciente agregado con éxito <br><p class"cerrar-x">Cerrar</p>';
                    header('Location:../');
                }
                else
                {
                    header('Location:../include/error.php');
                }
            }
            $conn->close(); // cerrar la conexión
         }
    }
?>
 
// Acuerdate de adicionar un inputTex más en tu formulario para capturar el document
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar