Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Method of a controller does not receive the data by POST #625

Open
LuisEstrada7 opened this issue Jan 7, 2023 · 7 comments
Open

Method of a controller does not receive the data by POST #625

LuisEstrada7 opened this issue Jan 7, 2023 · 7 comments

Comments

@LuisEstrada7
Copy link

LuisEstrada7 commented Jan 7, 2023

The route works correctly but it seems that the data is not sent to my method since it does not let me use the values.

Project: https://github.com/LuisEstrada7/prueba-simple-php-router

index.php

require_once 'vendor/autoload.php';
use Pecee\SimpleRouter\SimpleRouter;
require_once 'app/Controllers/persona/personaController.php';
require_once 'routes.php';
require_once 'helpers.php';
SimpleRouter::setDefaultNamespace('app\Controllers');
SimpleRouter::start();

routes.php

SimpleRouter::group(['prefix' => '/persona'], function () {
    SimpleRouter::post('/insertUpdate', 'persona\personaController@insertUpdate');
});

Use fetch JS to do the queries.

app.js

export const cargador__ = 'before-page';
export const fetch_ = (_url,_type,_data) => {
    return fetch(_url, {
        method: _type,
        body: JSON.stringify(_data),
        headers:{ 'Content-Type': 'application/json' }
    }).then(res => res.json())
    .then(response => response);
};

Persona.js

import { cargador__, fetch_get, fetch_ } from "/public/assets/js/app.js";
document.addEventListener("DOMContentLoaded", async function(event){
const tbPersona = document.getElementById('tabla-personas'),
        btnNew = document.getElementById('btn-new'),
        modalInserUpdate = document.getElementById('modal-insertUpdate'),
        mdInsertUpdate = new bootstrap.Modal(modalInserUpdate, {backdrop: 'static', keyboard: false}),
        btnEditPersona = 'btn-edit-persona',
        btnSave = document.getElementById('btnSave'),
        id = document.getElementById('id'),
        txtDni = document.getElementById('dni'),
        txtPaterno = document.getElementById('apePaterno'),
        txtMaterno = document.getElementById('apeMaterno'),
        txtNombres = document.getElementById('nombres'),
        txtEmail = document.getElementById('email'),
        txtLenguaje = document.getElementById('lenguaje'),
        cboFase = document.getElementById('cboFase'),
        txtEdad = document.getElementById('edad'),
        txtComprendido = document.getElementById('comprendido');
btnSave.addEventListener('click', async () => {
        document.getElementById(cargador__).setAttribute('style', 'display:flex');
        const datos = {
            id: isNaN(parseInt(id.value.trim())) ? null : parseInt(id.value.trim()),
            dni: txtDni.value,
            paterno: txtPaterno.value,
            materno: txtMaterno.value,
            nombres: txtNombres.value,
            email: txtEmail.value,
            lenguaje: txtLenguaje.value,
            fase: cboFase.value,
            edad: txtEdad.value,
            comprendido: txtComprendido.value,
        };
        console.log(datos);
        const resultado = await fetch_('/persona/insertUpdate', 'POST', datos);
        console.log(resultado);
        document.getElementById(cargador__).setAttribute('style', 'display:none');
    });
});

controller:

namespace app\Controllers\persona;
require_once $_SERVER['DOCUMENT_ROOT'].'/app/Models/persona/Persona.php';
use Persona;
class personaController{
      public function insertUpdate(){
          $id = isset($_POST['id']) ? $_POST['id'] : null;
          $id = $id > 0 ? $id : null;
          $persona = new Persona();
          $persona->setId($id);
          $persona->setDni($_POST["dni"]);
          $persona->setNombres($_POST["nombres"]);
          $persona->setApePaterno($_POST["paterno"]);
          $persona->setApeMaterno($_POST["materno"]);
          $persona->setCorreo($_POST["email"]);
          $message = $persona->insertUpdate();
          $personas = $persona->getAll();
          $resultado = [$message, $personas];
          return json_encode($resultado);
      }
}

Can someone please tell me where the error is? Are you implementing the library wrong?

sent values:

{
  comprendido: "on",
  dni: "08601381",
  edad: "20",
  email: "[email protected]",
  fase: "3",
  id: null,
  lenguaje: "php"materno: "mate",
  nombres: "nom",
  paterno: "ape"
}

network :

Notice: Undefined index: dni in C:\xampp\htdocs\uni\practicantes\ejemplos\luis\app\Controllers\persona\personaController.php on line 27

Notice: Undefined index: nombres in C:\xampp\htdocs\uni\practicantes\ejemplos\luis\app\Controllers\persona\personaController.php on line 28

Notice: Undefined index: paterno in C:\xampp\htdocs\uni\practicantes\ejemplos\luis\app\Controllers\persona\personaController.php on line 29

Notice: Undefined index: materno in C:\xampp\htdocs\uni\practicantes\ejemplos\luis\app\Controllers\persona\personaController.php on line 30

Notice: Undefined index: celular in C:\xampp\htdocs\uni\practicantes\ejemplos\luis\app\Controllers\persona\personaController.php on line 31
@DeveloperMarius
Copy link
Contributor

DeveloperMarius commented Jan 7, 2023

Hello,

I do not see an error directly. Can you show me the request body in the network tab of the browser so that I can reconstruct everything?

Also maybe try to use the InputHandler of the library.

~ Marius

@LuisEstrada7
Copy link
Author

@DeveloperMarius

Add the network to the question, can you tell me where is the InputHandler?

@DeveloperMarius
Copy link
Contributor

DeveloperMarius commented Jan 7, 2023

Hey,

I will take a closer look at your issue tomorrow.

You can find the input handling in the documentation under input & parameters, I think.

This would be the best in your case:

# Only match specific keys
$values = input()->all([
    'company_name',
    'user_id'
]);

~ Marius

@LuisEstrada7
Copy link
Author

@DeveloperMarius
Thanks! that worked for me.

    public function insertUpdate(){
        $values = input()->all();
        var_dump($values['dni']);
        echo "<br>";
        var_dump($values);exit;
    }

@DeveloperMarius
Copy link
Contributor

Great!

This project is no longer maintained. When you want PHP 8.x support, input validation etc. check out my fork https://github.com/DeveloperMarius/simple-php-router
It has a few breaking changes but all pull requests & issues are solved there.

~ Marius

@AlexJMcloud
Copy link

Great!

This project is no longer maintained. When you want PHP 8.x support, input validation etc. check out my fork https://github.com/DeveloperMarius/simple-php-router It has a few breaking changes but all pull requests & issues are solved there.

~ Marius

But it seems abandoned.

@DeveloperMarius
Copy link
Contributor

DeveloperMarius commented Oct 24, 2023

Hey,

I replyed to your question.
I give my best to be up to date with the issues but I cannot always reply quickly.

~ Marius

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants