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
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().
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
Ajoutez enctype="multipart/form-data" dans le formulaire, afin que les données de publication puissent être obtenues correctement.
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);
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!