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

WBOY
Libérer: 2023-05-29 21:25:10
avant
2166 Les gens l'ont consulté

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-urlencoded. Les données seront désormais placées dans les en-têtes de 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

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!

Étiquettes associées:
source:yisu.com
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