PHP - Problemas con insert usando FluentPDO

 
Vista:
sin imagen de perfil

Problemas con insert usando FluentPDO

Publicado por Juan Alvarenga (1 intervención) el 13/01/2017 02:38:01
Hola que tal, tengo una duda que me esta quebrando la cabeza desde ya un par de días, he utilizado la librería FluentPDO ara hacer mis peticiones al servidor, y tengo mi backend con php 5.6 (recien actualice a php 7 y el mismo problema), verán, al momento de hacer un insert con la librería, se ejecuta la petición 2 veces por lo que me lanza un error 23000 de duplicación de llave porque ya se registro anteriormente.

tengo una clase database.php que contiene la la declaracion del PDO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
require_once("vendor/autoload.php");
 
class DataBase
{
    public static function Conectar()
    {
        try {
            $pdo = new PDO('mysql:host=localhost;dbname=db_name;charset=utf8', 'root', '****');
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
 
            return new FluentPDO($pdo);
        } catch (Exception $e) {
            die($e->getMessage());
        }
    }
 
}

y una clase Login.php que contiene las funciones que interactúan con la base de datos (inserts y selects)

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
 
include_once "config/database.php";
include_once "auth.php";
date_default_timezone_set('America/Tegucigalpa');
ini_set("displayerrors", 1);
 
class Login
{
    private $db;
    private $Fecha;
 
    public function __CONSTRUCT()
    {
        $this->db = DataBase::Conectar();
        $fecha_server = getdate();
        $this->Fecha = $fecha_server['year'] . '/' . $fecha_server['mon'] . '/' . $fecha_server['mday'] . ' ' . $fecha_server['hours'] . ':' . $fecha_server['minutes'] . ':' . $fecha_server['seconds'];
    }
 
    public function Registro($correo, $nombre, $telefono, $pass)
    {
        $result = '';
 
        $dataUsuario = array('Correo' => $correo, 'Nombre' => $nombre, 'Telefono' => $telefono, 'Pass' => password_hash($pass, PASSWORD_DEFAULT),
            'Estado' => 1, 'FechaCreacion' => $this->Fecha);
 
        $data = array('Correo' => $dataUsuario['Correo'], 'Nombre' => $dataUsuario['Nombre'], 'Estado' => $dataUsuario['Estado']);
 
        try {
            $this->db->insertInto('usuarios', $dataUsuario)->execute();
 
            if ($this->db) {
                $result = array('estado' => 'exito', 'response' => 'Se ha registrado exitosamente', 'token' => Auth::SignIn($data));
            }
        } catch (PDOException $e) {
            $result = array('estado' => 'error', 'response' => $e->getMessage());
        }
 
        echo json_encode($result);
 
    }
 
    public function Ingreso($correo, $pass)
    {
        try {
            $response = $this->db->from('usuarios')->where('usuarios.Correo', $correo)->fetch();
 
            if ($response) {
 
                $data = array('Correo' => $response->Correo, 'Nombre' => $response->Nombre, 'Estado' => $response->Estado);
 
                if ($response->Estado == 1) {
 
                    if (password_verify($pass, $response->Pass)) {
 
                        echo json_encode(array('estado' => 'exito', 'token' => Auth::SignIn($data)));
 
                    } else {
                        echo json_encode(array('estado' => 'error', 'response' => 'Contraseña incorrecta, Verifique la informacion ingresada'));
                    }
                } else
                    echo json_encode(array('estado' => 'exito', 'response' => 'Su usuario esta Inactivo, comuniquese con el proveedor para reactivarlo'));
            } else
                echo json_encode(array('estado' => 'error', 'response' => 'Usuario no registrado'));
        } catch (Exception $e) {
            echo json_encode(array('estado' => 'error', 'response' => $e->getMessage()));
        }
    }
 
    public function GetData($token)
    {
        $data = Auth::GetData($token);
 
        if ($data['codigo'] === 1)
            print_r(json_encode(array("status" => "exito", "response" => $data)));
        else
            print_r(json_encode(array("status" => "error", "response" => $data)));
    }
}

y la clase Auth.php en la que hago uso de la librería jwt para generar un token con la información que traiga o inserte en la base de datos

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
use Firebase\JWT\JWT;
 
date_default_timezone_set('America/Tegucigalpa');
 
class Auth
{
    private static $secret_key = 'Fx)+(17Yr8d@KH*/';
    private static $encrypt = ['HS256'];
    private static $aud = null;
 
    public static function SignIn($data)
    {
        $time = time();
 
        $token = array(
            'iat' => $time,
            'exp' => $time + 3600,
            'aud' => self::Aud(),
            'data' => $data
        );
 
        return JWT::encode($token, self::$secret_key);
    }
 
    public static function Check($token)
    {
        if (empty($token)) {
            throw new Exception("El token suministrado es invalido");
        }
 
        $decode = JWT::decode(
            $token,
            self::$secret_key,
            self::$encrypt
        );
 
        if ($decode->aud !== self::Aud()) {
            throw new Exception("Sesión iniciada por un usuario no válido.");
        }
    }
 
    public static function GetData($token)
    {
        try {
            $data = JWT::decode(
                $token,
                self::$secret_key,
                self::$encrypt
            )->data;
 
            return array("codigo" => 1, 'data' => $data);
        } catch (Exception $e) {
            return array('codigo' => 0, 'msg' => $e->getMessage());
        }
    }
 
    private static function Aud()
    {
        $aud = '';
 
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $aud = $_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $aud = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $aud = $_SERVER['REMOTE_ADDR'];
        }
 
        $aud .= @$_SERVER['HTTP_USER_AGENT'];
        $aud .= gethostname();
 
        return sha1($aud);
    }
}

esto me funciona parcialmente pues, cuando ejecuto la url para hacer el insert sucede esto:

foto1

pero si veo la consola, aparece la doble petición, a pesar de haberla ejecutado solo una vez


foto2

agradeceria mucho su ayuda, si me explican que hago mal o que me hace falta y como corregir este problema, pues he empleado esta misma forma e trabajo en otros proyectos y funciona sin errores, aun estando de la misma forma.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder