#php #reactjs #codeigniter
#php #reactjs #codeigniter — инициализатор кода
Вопрос:
Я пытаюсь проверить информацию и поэтому проверяю, не пусто ли какое-либо из полей, но даже когда поля заполнены, появляется ошибка «Необходимо заполнить все поля». Это не имеет смысла, потому что он по-прежнему регистрирует пользователя, а данные находятся в базе данных, что означает, что на самом деле эти переменные в $array не являются неопределенными. Так что мне очень трудно понять, почему возникает эта ошибка.
Это мой почтовый запрос.
const registerUser = async (userData) => {
console.log(userData)
const request = await fetch("http://localhost/practise-api/public/users/registerUser",{
method:"POST",
headers:{
'Content-Type' : 'application/x-www-form-urlencoded'
},
body: JSON.stringify({
firstname: userData.firstname,
email: userData.email,
password: userData.password,
secondname: userData.secondname
})
})
let res = await request.text()
console.log(res)
if(res.status === "fail"){
setShowModal(true)
}
else if(res.status === "success"){
setSuccess(true);
}
}
Здесь я проверяю данные, а затем регистрирую пользователя.
<?php namespace AppControllers;
header('Access-Control-Allow-Origin: *');
class Users extends BaseController
{
public function registerUser()
{
$array = json_decode(file_get_contents("php://input"), true);
$this->response->setContentType('Content-Type: application/json');
if(!isset($array["email"]) || !isset($array["password"]) || !isset($array["secondname"]) || !isset($array["firstname"])){
$error = array(
'msg' => 'Need to complete all the fields',
'status' => 'fail'
);
return json_encode($error);
}
elseif(!filter_var($array["email"], FILTER_VALIDATE_EMAIL )){
$error = array(
'msg' => 'Invalid email',
'status' => 'fail'
);
return json_encode($error);
}
elseif(!strlen($array["password"]) >= 8){
$error = array(
'msg' => 'Password is too short',
'status' => 'fail'
);
return json_encode($error);
}
$email = $array["email"];
$db = ConfigDatabase::connect();
$builder = $db->table("users");
$builder->select("*");
$builder->where("email", $email);
$queryResult = $builder->get()->getResultArray();
if($queryResult){
$error = array(
'msg' => 'User already exists',
'status' => 'fail'
);
return json_encode($error);
}
else{
$firstname = $array["firstname"];
$secondname = $array["secondname"];
$password = $array["password"];
$hashedPassword = password_hash($password,PASSWORD_DEFAULT);
$userData = [
"firstname" => $firstname,
"lastname" => $secondname,
"email" => $email,
"password" => $hashedPassword
];
$builder->insert($userData);
$success = array(
'msg' => 'You created an account successfully',
'status' => 'success'
);
return json_encode($success);
}
// print_r("hello");
// echo json_encode($array);
// echo json_encode($email);
}
}
Надеюсь, кто-нибудь сможет мне помочь, заранее большое спасибо!
Комментарии:
1.Я не понимаю, как можно было бы вернуть
Need to complete all the fields
и перейти к вставке в том же запросе. Дважды проверьте, что вы не выполняете более одного запроса (где отсутствует информация). Проверьте вкладку сеть в инструментах разработчиков браузеров, когда вы делаете запрос, чтобы проверить, какие вызовы выполняются. Затем вы также можете проверить, какие данные он отправляет и каков на самом деле ответ.2. На этой картинке как будто показано, что это вызывает ошибку, но учетная запись также регистрируется, так что я в замешательстве и хорошо, спасибо, я проверю вкладку сеть
3. Я проверил вкладку сеть, и отправляемые данные выглядят нормально. @МагнусЕрикссон
4. Вы пробовали сбрасывать
$array
данные сразу после декодирования входных данных, чтобы увидеть, что они на самом деле содержат?5. Несмотря на мой предыдущий комментарий, я неправильно понял вопрос. Я поддерживаю то, что сказал Магнус: должно быть несколько запросов.