#php #api #postman
Вопрос:
Я могу опубликовать создание одного пользователя через Postman, но у меня возникли проблемы с настройкой этого кода, чтобы я мог опубликовать создание нескольких пользователей. Я пытался создать цикл foreach, но не смог заставить его работать, поэтому я отказался от него. Если бы кто-нибудь мог, пожалуйста, помочь мне, я был бы очень благодарен.
Это код для createOne.php
lt;?php header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control-Allow-Methods: POST"); header("Access-Control-Max-Age: 3600"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"); include_once '../config/database.php'; include_once '../class/users.php'; $database = new Database(); $db = $database-gt;getConnection(); $item = new users($db); $data = json_decode(file_get_contents("php://input")); $item-gt;user_id = $data-gt;user_id; $item-gt;user_name = $data-gt;user_name; $item-gt;age = $data-gt;age; $item-gt;birthday = date('YYYY-MM-DD'); $item-gt;gender = $data-gt;gender; if($item-gt;createUser()){ echo 'User created successfully.'; } else{ echo 'User could not be created.'; } ?gt;
И это то, что users.php
lt;?php class users{ // Connection private $conn; // Table private $db_table = "users"; // Columns public $user_id; public $user_name; public $age; public $birthday; public $gender; // Db connection public function __construct($db){ $this-gt;conn = $db; } // CREATE public function createUser(){ $sqlQuery = "INSERT INTO ". $this-gt;db_table ." SET user_id = :user_id, user_name = :user_name, age = :age, birthday = :birthday, gender = :gender"; $stmt = $this-gt;conn-gt;prepare($sqlQuery); // sanitize $this-gt;user_id=htmlspecialchars(strip_tags($this-gt;user_id)); $this-gt;user_name=htmlspecialchars(strip_tags($this-gt;user_name)); $this-gt;age=htmlspecialchars(strip_tags($this-gt;age)); $this-gt;birthday=htmlspecialchars(strip_tags($this-gt;birthday)); $this-gt;gender=htmlspecialchars(strip_tags($this-gt;gender)); // bind data $stmt-gt;bindParam(":user_id", $this-gt;user_id); $stmt-gt;bindParam(":user_name", $this-gt;user_name); $stmt-gt;bindParam(":age", $this-gt;age); $stmt-gt;bindParam(":birthday", $this-gt;birthday); $stmt-gt;bindParam(":gender", $this-gt;gender); if($stmt-gt;execute()){ return true; } return false; } } ?gt;
Это то, что я пытался сделать в файле createOne:
foreach ((array) $data as $key=gt;$value) { $item-gt;user_id = $data-gt;user_id; $item-gt;user_name = $data-gt;user_name; $item-gt;age = $data-gt;age; $item-gt;birthday = date('YYYY-MM-DD'); $item-gt;gender = $data-gt;gender; if($item-gt;createUser()){ echo 'User created successfully.'; } else{ echo 'User could not be created.'; } }
И всякий раз, когда я пытаюсь опубликовать новых пользователей через Postman, я получаю это:
"Notice: Trying to get property 'user_id' of non-object in ..." "Notice: Trying to get property 'user_name' of non-object in ..." "Notice: Trying to get property 'age' of non-object in ..." "Notice: Trying to get property 'birthday' of non-object in ..." "Notice: Trying to get property 'gender' of non-object in ..." "User could not be created"
(Например: Когда я пытаюсь опубликовать 3 новых пользователя, я получаю ответ выше 3 раз из-за цикла)
Комментарии:
1. Это должен быть просто случай зацикливания. Что именно пошло не так, что вы пытались сделать?
2. @ADyson Привет, я обновил пост тем, что я пробовал, и ошибкой, которую я получаю в конце.
3. Какой JSON вы отправили в сценарий? Пожалуйста, покажите и это тоже
4. Добавьте строку
error_log('data: ' . var_export($data, true));
перед вашим циклом. Запустите вызов API, затем проверьте журналы сервера, чтобы увидеть фактическую структуру данных.