Я попытался вставить запись в базу данных MySQL из JSON. Я сделал что-то вроде этого:
// Check if the user is recorded on DB
$sql = 'SELECT * FROM accounts WHERE email = :email AND password = :password';
$params = array('email' => $email, 'password' => $password);
$account = $db->fetchOne($sql, $params);
if (!$account){
//call api
$url = 'http://example.com/index.php/auth?key=@13456&email={$email}&password={$password}';
$json = file_get_contents($url);
$decode = json_decode($json, true);
foreach ($decode as $value) {
foreach ($value as $key => $value) {
echo $value;
}
}
//insert account
$insertdata = $db->insert(
'accounts',
array(
'email' => $value['email'],
'password' => sha1($value['password'])
)
);
}else{
sendJsonError('We could not find your email.');
return;
}
Сам ответ json:
{"status":"success","email":"[email protected]","password":"%4fksdhj*"}
Если в вызове api я пишу прямое значение пароля dan password, запись записывается в БД, но когда я создаю его динамически, как вызов API выше, он не будет записываться в систему.
Можете ли вы, ребята, посоветовать, как это сделать?
Я считаю, что ваш код не правильно считывает значения параметров, потому что ваша строка находится в одинарных кавычках ('
). PHP только интерполирует переменные, когда строка находится в двойных кавычках ("
).
Таким образом, вы можете
a) напишите так, используя конкатенацию:
$url = 'http://example.com/index.php/auth?&key=@13456&email='.$email.'&password='.$password;
б) поместите его в двойные кавычки:
$url = "http://example.com/index.php/auth?key=@13456&email=$email&password=$password";
(Фигурные скобки необязательны, если вы не интерполируете более сложное выражение, а не только одну переменную).
PS Несколько других дополнительных очков:
Вы должны учитывать потенциальные проблемы из-за URL-кодирования специальных символов в пароле (что приводит к потенциальной неверной интерпретации на удаленном сервере). На самом деле это должно быть сделано как запрос POST со значениями внутри тела запроса, а не с помощью запроса. Это также предотвратит утечку безопасности из-за веб-серверов и т.д., Которые будут посещать URL-адреса.
Вы также должны убедиться, что HTTP-запрос был определенно успешным, прежде чем предполагать, что вы можете обработать ответ.
{
и}
вокруг значений параметров в URL?