Почему мои переменные PHP не сохраняются в базе данных MySQL?

У меня есть веб-сайт, который позволяет мне получить IP-адрес, пользовательский агент и имя хоста клиентского устройства. Я установил его для сохранения в базе данных MySQL, но когда я смотрю в phpmyadmin, он не появляется.

Вот мой код:

<?php
$servername = "localhost";
$username = "[USERNAME GOES HERE - OBSCURED TO PROTECT]";
$password = "[PASSWORD GOES HERE - OBSCURED TO PROTECT]";
$dbname = "[DBNAME GOES HERE - OBSCURED TO PROTECT]";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);$ip = $_SERVER['REMOTE_ADDR'];
$user = $_SERVER['HTTP_USER_AGENT'];
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);;

$sql = mysqli_query($conn, "INSERT INTO data (ipaddress, useragent, hostname)
VALUES ($ip, $user, $host)");
?>
<!DOCTYPE html>
<html>
<head>
<title>IP Address</title>
<style>

body {
margin: 0;
}

</style>
</head>

<body>
<h1>IP address recorded!</h1>

</body>

<?php
mysqli_close();
?>

Есть идеи?

-1

Решение

Вы уязвимы для SQL инъекций, и множественные ошибки синтаксиса SQL — ни одно из ваших значений данных не заключено в кавычки, поэтому вы вставляете текст BARE в запрос.

$sql = [..snip..] "... VALUES ('$ip', '$user', '$host')") or die(mysqli_error($conn));
^---^--^-----^--^-----^   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Обратите внимание на кавычки и или или умереть (). Если у вас были кавычки, запрос МОЖЕТ работать. И если бы вы имели or dieвам сказали бы, ПОЧЕМУ ваш запрос потерпел неудачу.

2

Другие решения

Поскольку я предполагаю, что ваши поля имеют тип char или varchar, вам нужно заключить в одну кавычку каждую переменную

$ip = mysqli_real_escape_string($conn, $_SERVER['REMOTE_ADDR']);
$user = mysqli_real_escape_string($conn, $_SERVER['HTTP_USER_AGENT']);
$host = gethostbyaddr($ip);

$sql = mysqli_query($conn, "INSERT INTO data (ipaddress, useragent, hostname)
VALUES ('$ip', '$user', '$host')");
-1

По вопросам рекламы [email protected]