Я успешно сконфигурировал 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. У этого сообщения есть несколько хороших примеров.
var_dump($_REQUEST);
$_REQUEST['']
наfile_get_contents('php://input')
.