Размещение данных с веб-сайта на MySQL с использованием PHP не работает
Я новичок в PHP и пытаюсь получить пользовательский агент от посетителя веб-сайта, а затем отправить эту информацию в MySQL.
Home.html (на этой странице есть кнопка, по которой пользователь должен щелкнуть ее, чтобы перейти на другую страницу, где он увидит информацию о своем устройстве
<div id="TestMe_img">
<a href="Result.php">
<input type="submit" value="Test Your Device">
</a>
</div>
Result.php (страница результатов содержит 2 вещи: 1- php-код. 2- html-код) PHP
<?php
$server = "localhost";
$user = "root";
$pass = "";
$dbname = "user_data";
$userAgent = $_POST['userAgent'];
// Create connection
$conn = new mysqli($server,$user, $pass, $dbname);
// Check connection
if($conn -> connect_error) {
die("Conneciton Failed: " . $conn -> connect_error);
}
if (empty($userAgent)) {
echo "User Agent is blank";
die();
}
$sql = "INSERT INTO UserData (UserAgent) VALUES ('$userAgent')";
if ($conn -> query($sql) === TRUE) {
echo "Thank you! Hana is stupid";
}
else
echo "Unfortunately Hana is smart";
$conn -> close();
?>
HTML часть
<body onload="userAgent();">
<table>
<tr>
<td>user agent</td>
<td id="userAgent"></td>
</tr>
</table>
</body>
JavaScript
function userAgent(){
var userAgent = navigator.userAgent;
document.getElementById('userAgent').innerHTML = userAgent;
}
Однако есть ошибка, которую я не могу найти, потому что каждый раз, когда я нажимаю на кнопку, она приводит меня к result.php и показывает мне код в браузере без результата, который появляется в базе данных!
1 ответ
Хорошо, это будет немного дольше, но терпите меня.
1-й: вы получите сообщение "User Agent is blank", потому что пользовательский агент фактически не представлен на странице PHP. Вам необходимо поместить ввод (скрытый или текстовый) в форму, вставить данные внутрь и затем отправить эту форму. Измените ваш HTML следующим образом, по крайней мере, ваша дата будет отправлена:
<form method="post" action="Result.php">
<input type="hidden" id="userAgent">
<input type="submit" value="Test Your Device">
</form>
2-й: вам даже не нужно этого делать, потому что userAgent уже доступен для PHP, даже без отправки его вручную. Просто используйте эту переменную:
$_SERVER['HTTP_USER_AGENT']
3-е: вы НИКОГДА не должны помещать необработанный ввод в строку SQL. Это приведет к SQL-инъекциям, и ваш сервер будет взломан. Вместо:
$sql = "INSERT INTO UserData (UserAgent) VALUES ('$userAgent')";
$conn->query($sql);
Вы должны использовать подготовленный оператор (почти для любого запроса, который принимает переменные), чтобы никто не мог манипулировать вашим запросом. В противном случае, если ваша переменная $ userAgent содержит одинарную кавычку, вы можете выйти из своего запроса, и злоумышленник может внедрить любой SQL-код, который он хочет. Так что сделайте это, чтобы исправить вашу проблему безопасности:
$statement = $conn->prepare("INSERT INTO UserData (UserAgent) VALUES (?)");
$statement->bind_param('s', $userAgent);
$statement->execute();
Параметр 's' - это фактически одна буква на каждый параметр, который вы хотите подготовить в операторе. В этом случае это означает, что вы хотите передать строку. "i" будет целым числом, "d" - двойным, смотрите здесь: http://php.net/manual/de/mysqli-stmt.bind-param.php
Четвёртое: ваш вопрос не имеет абсолютно никакого отношения к phpMyAdmin, поэтому вам, вероятно, следует изменить заголовок.
Я надеюсь, что это поможет вам начать.