Maison > cadre php > PensezPHP > le corps du texte

Comment résoudre le problème selon lequel thinkphp ne peut pas obtenir les données de publication

PHPz
Libérer: 2023-04-08 09:30:02
original
1034 Les gens l'ont consulté

Récemment, alors que j'utilisais ThinkPHP pour développer un projet, j'ai rencontré un problème : après avoir soumis le formulaire, les données de publication n'ont pas pu être obtenues. Il s'agit d'un problème courant au cours du processus de développement. Parfois, nous nous sentons très confus, surtout lorsque nous avons trouvé de nombreuses méthodes sur Internet et que nous ne parvenons toujours pas à résoudre le problème. Cet article présentera brièvement comment résoudre ce problème.

1. Problème

Après avoir soumis le formulaire, les données de publication ne peuvent pas être obtenues via request->param() ou $this->request->param(), et un tableau vide est obtenu.

2. Cause du problème

  1. L'attribut enctype n'est pas défini dans le formulaire

Lorsque le formulaire est soumis, si l'attribut enctype n'est pas défini, la méthode de transmission des données par défaut est application/x-www-form -urlencodé. À ce stade, les données de publication seront placées dans l’en-tête de la requête http au lieu du corps de la requête. Par conséquent, lors de l'obtention des données de publication, nous devons utiliser $this->request->post() ou request()->post().

  1. Aucun en-tête de requête n'est défini lors de l'appel de l'interface

Lors de l'appel de l'interface, nous devons définir l'en-tête de requête correspondant, tel que Content-Type: application/json, sinon le serveur ne peut pas analyser les données. Si le Content-Type n'est pas défini, le serveur par défaut est application/x-www-form-urlencoded, et à ce moment-là, les données de publication seront placées dans l'en-tête de la requête http au lieu du corps de la requête, ce qui entraînera l'impossibilité d'obtenir correctement les données de publication.

3. Solution

  1. Définissez l'attribut enctype

Ajoutez enctype="multipart/form-data" dans le formulaire, afin que les données de publication puissent être obtenues correctement.

  1. Définir les en-têtes de requête

Lors de l'appel de l'interface, vous pouvez utiliser curl pour définir les en-têtes de requête. L'exemple de code est le suivant :

$data = array(
    'username' => 'admin',
    'password' => '123456'
);

$url = 'http://www.example.com/login';
$ch = curl_init();

$header = array(
    'Content-Type: application/json',
    'Content-Length: '.strlen(json_encode($data))
);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$res = curl_exec($ch);
curl_close($ch);
Copier après la connexion

4. Résumé

L'échec d'obtention des données de publication est un problème courant. Cette situation est généralement causée par des méthodes de transmission de données incorrectes ou des paramètres d'en-tête de requête incorrects. Si vous rencontrez ce problème, vous pouvez le résoudre un par un selon les méthodes ci-dessus. Bien entendu, vous pouvez également utiliser d'autres méthodes, comme utiliser php://input ou $_POST pour obtenir des données de publication. Enfin, j'espère que cet article pourra résoudre des problèmes similaires que les lecteurs rencontrent au cours du processus de développement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal