размещение данных с веб-сайта на MySQL с использованием PHP не работает

0

Я новичок в 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 и показывает мне код в браузере без результата в базе данных!

  • 0
    Ничего из этого не связано с phpMyAdmin.
  • 0
    Для стандартного представления формы требуется элемент формы. В любом случае, изучайте AJAX.
Теги:
server-side

1 ответ

0

Хорошо, это будет немного дольше, но нести меня.

1st: вы получите сообщение "Пользовательский агент пустым", потому что пользовательский агент фактически не отправляется на страницу PHP. Вам нужно поместить ввод (скрытый или текст) в форму, вставить данные внутри и затем отправить эту форму. Измените свой HTML как это, тогда по крайней мере ваша дата будет отправлена:

<form method="post" action="Result.php">
  <input type="hidden" id="userAgent">
  <input type="submit" value="Test Your Device">
</form>

2nd: Вам даже не нужно это делать, потому что 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

4th: Ваш вопрос не имеет абсолютно никакого отношения к phpMyAdmin, поэтому вам, вероятно, следует изменить заголовок.

Надеюсь, это поможет вам начать работу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню