#php #mysql #api
#php #mysql #API
Вопрос:
Я пытался выяснить, как перехватить весь URL-адрес веб-сайта, который использует API. У меня есть один скрипт, который передает данные с помощью API, а также у меня есть API, который обрабатывает размещенные данные. Вставка работает, но она вставляет пустые данные в мою базу данных.
Вот мой API
<?php
$link = mysqli_connect('localhost', 'root', '', 'datauser');
mysqli_set_charset($link,'utf8');
$method = strtolower(array_shift($url_send));
if ($method = 'post') {
$id = $_GET['id'];
$name = $_GET['name'];
$cell = $_GET['cell'];
}
switch ($method) {
case 'get':
//$sql = "select * from users WHERE user_lname= '$name'"; break;
case 'put':
//$sql = "update users set $set where user_lname=$name"; break;
case 'post':
$sql = "insert into users (user_fname, user_lname, user_contact) values ('$name', '$name', '$cell')"; break;
case 'delete':
//$sql = "delete users where id=$key"; break;
}
$result = mysqli_query($link,$sql);
if ($method == 'post') {
echo mysqli_insert_id($link);
}
die();
Теперь вот мой код, который использует указанный выше API
<?php
$request = explode('/', trim($_SERVER['PATH_INFO'],'/'));
$data = array(
"table" => $request[0],
"FNAME" => $request[1],
"LNAME" => $request[2],
"CNTCT" => $request[3]
);
$url_send ="http://localhost/api.php? id=".$request[0]."amp;name=".$request[1]."amp;cell=".$request[3];
$str_data = json_encode($data);
$post_elements = array('data'=>$data);
function sendPostData($url){
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query($url_send));
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec( $ch );
curl_close($ch);
//print_r($response);
return $response;
}
echo sendPostData($url_send);
?>
Ошибка, которую я получаю, заключается в следующем
**
Notice: Undefined index: PATH_INFO in C:xampphtdocsapi.php on line 5
Notice: Undefined index: id in C:xampphtdocsapi.php on line 9
Notice: Undefined index: name in C:xampphtdocsapi.php on line 10
Notice: Undefined index: cell in C:xampphtdocsapi.php on line 11
21**
21 — это идентификатор, который я недавно вставил. Вставка работает, но, похоже, я не могу получить данные из URL.
Кто-нибудь, пожалуйста, помогите. С благодарностью за любые советы, комментарии, даже негативные.
Спасибо.
Комментарии:
1. ПРЕДУПРЕЖДЕНИЕ : при использовании
mysqli
вы должны использовать параметризованные запросы иbind_param
добавлять пользовательские данные в свой запрос. НЕ используйте для этого интерполяцию или конкатенацию строк, поскольку вы создали серьезную ошибку SQL-инъекции . НИКОГДА не помещайте$_POST
$_GET
данные или непосредственно в запрос, это может быть очень вредно, если кто-то попытается использовать вашу ошибку.2. Вы не установили
$url_send
в скрипте API, так что же$method = strtolower($url_send);
предполагается делать?3. Если вы хотите отправить весь URL от вызывающего абонента в API, вам нужно передать его в качестве параметра URL или в полях post.
4. Но почему API должен знать что-либо об URL вызывающего абонента? API должен использоваться любым вызывающим абонентом, он не должен зависеть от URL вызывающего абонента.