Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

543
Views
Obtener la variable $_POST como vacía mientras se obtiene todo correctamente con php://input

Creé una aplicación React desde la cual estoy llamando a mi servidor construido en PHP.

Así es como llamo a mi archivo PHP:

 const requestOptions = { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: JSON.stringify({ name, username, password }), }; console.log(requestOptions); fetch('http://localhost/crud/requests/signup.php', requestOptions) .then(res => res.json()) .then(data => console.log(data));

Esto es lo que tengo en el archivo PHP:

 if (isset($_POST) && !empty($_POST)) { // do something }

Cuando imprimo la variable $_POST , obtengo una matriz vacía. Incluso $_RESPONSE está vacío.

Pero cuando traté de imprimir el flujo de entrada de esta manera:

 print_r(file_get_contents('php://input'));

Todo parece estar bien, ¿Alguien puede explicar por qué sucede esto? Traté de leerlo en la documentación y busqué en algunos foros y blogs, pero no quedé satisfecho con las respuestas.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

El soporte de formulario incorporado de PHP solo puede analizar formularios de application/x-www-form-urlencoded y formularios de varias multipart/form-data formulario. Lo que en realidad está enviando es un objeto serializado en JSON, con el tipo MIME incorrecto de application/x-www-form-urlencoded .

Para enviar un application/x-www-form-urlencoded , use URLSearchParams en lugar de JSON.stringify :

 fetch('http://localhost/crud/requests/signup.php', { method: 'POST', body: new URLSearchParams({ name, username, password }), }) .then(res => res.json()) .then(data => console.log(data));

En este caso, no es necesario establecer explícitamente Content-Type : el navegador lo hará automáticamente . Para enviar una carga útil multipart/form-data (que es posible que deba hacer si desea cargar archivos más grandes), use un objetoFormData en su lugar.

Si desea enviar JSON después de todo, debe enviarlo con el tipo MIME correcto en el encabezado, application/json . En el lado de PHP, se resignará a analizar la carga útil manualmente usando json_decode .

over 4 years ago · Santiago Trujillo Report

0

Debería recuperar los datos de esta manera si está enviando JSON y también use encabezados para confirmar que es el tipo mime correcto

 // Get raw posted data $data = json_decode(file_get_contents("php://input")); print_r($data);

Ejemplo: encabezados

 header('Access-Control-Allow-Origin: *'); header('Content-Type: application/json'); header('Access-Control-Allow-Methods: POST'); header('Access-Control-Allow-Headers: Access-Control-Allow-Headers,Content-Type,Access-Control-Allow-Methods, Authorization, X-Requested-With'); header('X-Requested-With: XMLHttpRequest'); header('Accept: application/json');

Además, el envío de datos como una solicitud AjaxXHR significa que el archivo PHP de aceptación funciona de manera similar a una API de descanso que actúa por separado del archivo PHP que envía la solicitud. Véalo como una aplicación separada para que los datos de la sesión no se transfieran ni la seguridad de su aplicación. cuidado con los bots que inyectan JSON en su API con solicitudes XHR

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!