I do not want to insert data in the database

0

I do not want to save any data in the database and in view it does not tell me any error I do not know if I have an error in the code

Model

require_once('../admin/Conexion.php');
class Usuario{
    private $cedula, $usuario, $pSecreta, $respuesta, $TipoUsuario, $password, $password2;
    public function setCedula($cedula)
    {   $this->cedula = $cedula;
    }
    public function getCedula()
    {
    return $this->cedula;
    }
    public function setUsuario($usuario)
    {
$this->usuario = $usuario;
    }
    public function getUsuario()
    {
        return $this->usuario;
    }

    public function setpSecreta($pSecreta)
    {
        $this->pSecreta = $pSecreta;

    }
    public function getpSecreta()
    {
        return $this->pSecreta;
    }
    public function setRespuesta($respuesta)
    {
        $this->respuesta = $respuesta;
    }

    public function getRespuesta()
    {
        return $this->respuesta;
    }
    public function setTipoUsuario($TipoUsuario){
      $this->TipoUsuario=$TipoUsuario;

    }

    public function getTipoUsuario(){

    return $this->TipoUsuario;
    }
     public function setPassword($password)
    {
        $this->password = $password;
    }
    public function getPassword()
    {
        return $this->password;
    }
public function GuardarUsuario(){
  $con=Conexion::getInstance();
  $sql="INSERT INTO $this->usuario(cedula, usuario, p_secreta, r_secreta,tipo-usuario, password) VALUES ('$this->cedula','$this->usuario', '$this->pSecreta', '$this->respuesta', '$this->TipoUsuario', '$this->password')";
 $result = $con->db->prepare($sql);
        $insert = $result->execute();
        return $insert;
  }

Controlador
require_once("../Modelo/Usuario.php");

$usuario= new Usuario("usuario");

  if(isset($_REQUEST['registrar'])){
      $usuario->setUsuario($_POST['usuario']);
      $usuario->setCedula($_POST['cedula']);
      $usuario->setpSecreta($_POST['p_secreta']);
      $usuario->setRespuesta($_POST['respuesta']);
      $usuario->setTipoUsuario($_POST['Tipo']);
      $usuario->setPassword($_POST['password']);

      $res=$usuario->GuardarUsuario();
 }

SQL

 CREATE TABLE 'usuario' (
  'cedula' int(11) UNSIGNED NOT NULL,
  'usuario' varchar(20) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  'p_secreta' text CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  'r_secreta' varchar(40) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  'tipo-usuario' text,
  'password' varchar(20) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
    
asked by Javier Valles 16.07.2018 в 00:46
source

1 answer

0

Javier, this is my proposal. I have commented almost everything in the code. Anyway if you have questions you can tell me in comments.

First let's start with the controller. I would make these changes:

Driver

if(isset($_REQUEST['registrar'])){
    /*
        1.-
        Primero recogemos los valores del POST usando ternarios, 
        asignando el valor o NULL en caso de que no traigan datos
        eso nos permitirá parar la inserción si alguno de los campos
        con la restricción NOT NULL viene vacío
    */
    $postUsuario     =(!empty($_POST['usuario']))   ?  $_POST['usuario']   :  NULL ;
    $postCedula      =(!empty($_POST['cedula']))    ?  $_POST['cedula']    :  NULL ;
    $postPSecreta    =(!empty($_POST['p_secreta'])) ?  $_POST['p_secreta'] :  NULL ;
    $postRespuesta   =(!empty($_POST['respuesta'])) ?  $_POST['respuesta'] :  NULL ;
    $postTipoUsuario =(!empty($_POST['Tipo']))      ?  $_POST['Tipo']      :  NULL ;
    $postPassword    =(!empty($_POST['password']))  ?  $_POST['password']  :  NULL ;

    /*
        2.-
        Aquí vamos a hacer lo que dijimos en (1)
    */
    if ($postCedula && $postUsuario && $postPSecreta && $postRespuesta && $postPassword) {
        /*
            3.-
            Trasladamos el require aquí, no tiene sentido ponerlo antes sin saber si lo vamos a usar
        */
        require_once("../Modelo/Usuario.php");
        $usuario= new Usuario("usuario");

        /*
            Asignamos las propiedades usando las variables creadas en 1.
        */
        $usuario->setUsuario($postUsuario);
        $usuario->setCedula($postCedula);
        $usuario->setpSecreta($postPSecreta);
        $usuario->setRespuesta($postRespuesta);
        $usuario->setTipoUsuario($postTipoUsuario);
        $usuario->setPassword($postPassword);

        $res=$usuario->GuardarUsuario();

    }else{
        $res="Uno de los campos requeridos es nulo, no se puede insertar";
    }
}else{
    $res="No se postearon datos";    
}
echo $res;  //puedes usar $res de otra forma o pasarlo a la vista para que lo imprima

Model

Now let's look at the insertion method in class Usuarios . I have implemented a readable programming style that allows you to see if you have a column of more or less, a marker of more or less, a value in the array of more or less. It also allows you to control the code in a single view, without having to scroll to the right of the screen when the instructions are too long.

The whole class would remain the same, you only modify the GuardarUsuario() method as follows:

    public function GuardarUsuario(){
        $con=Conexion::getInstance();
        /*
            1.-
            Controlamos la conexión
        */
        if ($con){
            /*
                2.
                Escribimos una consulta preparada real, con marcadores de posición ?
            */
            $sql="INSERT INTO 'usuario' 
                    (
                        cedula, 
                        usuario, 
                        p_secreta, 
                        r_secreta,
                        tipo-usuario, 
                        password
                    ) 
                    VALUES 
                    (
                        ?,
                        ?,
                        ?,
                        ?,
                        ?,
                        ?
                    )";
            /*
                3. 
                Preparamos la consulta y evaluamos al mismo tiempo el estado de la preparación
            */
            if ($stmt = $con->db->prepare($sql)){

                /*
                    4.
                    Creamos un array con los valores que pasaremos aparte
                    aquí cada valor corresponde a cada marcador ? escrito en (2)
                    y deben ir en el orden en que están las columnas a la izquierda
                    del INSERT INTO
                */
                $arrParams=array(
                                    $this->cedula,
                                    $this->usuario,
                                    $this->pSecreta,
                                    $this->respuesta,
                                    $this->TipoUsuario,
                                    $this->password         
                                );
                /*
                    5.
                    A través del execute pasamos al array antes creado, 
                    neutralizando así el riesgo de inyección de código
                */
                $stmt->execute($arrParams);

                /*
                    6.
                    Contamos cuantas filas se insertaron, no necesariamente debe ocurrir la inserción
                    pueden haber errores como clave duplicada u otros, 
                    aquí se puede hacer un control suplementario si se quiere, verificando $totalInsert > 0
                */
                $totalInsert=$stmt->rowCount();
                $strInfo=($totalInsert > 0) ? "Se insertaron $totalInsert filas" : "No se pudo insertar. Error: ".$con->errorInfo()[2];

            } else {
                $strInfo="Error preparando la consulta: ".$con->errorInfo()[2];
            }
        }else{
            $strInfo="No hay conexión";
        }
        /*
            7.
            Devolvemos el valor de $strInfo que nos informará de lo ocurrido a lo largo de la ejecución
        */
        return $strInfo;
  }

I hope it will be useful for you.

    
answered by 16.07.2018 / 02:03
source