Я успешно настроил ACRA для отправки моих перехваченных исключений на сервер, проблема в том, что я не могу вставить отчет в базу данных:
@AcraCore(buildConfigClass = BuildConfig.class)
@AcraHttpSender(uri = "http://www.myserver.com/crashreports/addreport.php",
httpMethod = HttpSender.Method.POST)
public class MyApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
ACRA.init(this);
}
}
Я знаю, что это посылает что-то, потому что я вижу пустую запись в моем phpMyAdmin
, но я не могу получить отчет в базе данных:
<?php
$link = mysqli_connect("localhost", "root", "pass", "db");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Escape user inputs for security
$report = mysqli_real_escape_string($link, $_REQUEST['']);
// attempt insert query execution
$sql = "INSERT INTO VoiceRemoteCrash (report) VALUES ('$report')";
if(mysqli_query($link, $sql)){
echo "Records added successfully.";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// close connection
mysqli_close($link);
?>
Я искал документы, но не нашел много информации, и мой PHP
знание несколько базовое.
$_REQUEST['']
вернется NULL
и бросит «неопределенный индекс» уведомление.
Вы можете получить свой отчет из исходных данных POST, используя file_get_contents('php://input')
,
Я предлагаю вам взглянуть на: Как я могу предотвратить внедрение SQL в PHP? и использовать параметризованные запросы.
Эта строка ссылается на бессмысленную переменную:
$report = mysqli_real_escape_string($link, $_REQUEST['']);
Вы хотите что-то вроде:
$report = mysqli_real_escape_string($link, $_REQUEST['form_variable_name']);
Но вы даже не должны этого делать, потому что real_escape_string()
нельзя полагаться на функции для предотвращения внедрения SQL. Вместо этого вы должны использовать подготовленные операторы со связанными параметрами, либо MySQLi или же PDO Водитель. Эта почта есть несколько хороших примеров.