javascript - 使用 PHP 将网站数据发布到 MySQL 不起作用

标签 javascript php html mysql server-side

我是 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 并在浏览器上向我显示代码,而数据库中没有出现结果!

最佳答案

好的,这会稍微长一点,但请耐心等待。

第一:您将收到“用户代理为空”消息,因为用户代理实际上并未提交到 PHP 页面。您需要将输入(隐藏或文本)放入表单中,将数据插入其中,然后提交该表单。像这样更改您的 HTML,那么至少您的日期会被提交:

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

第二:您甚至不需要这样做,因为 userAgent 已经可供 PHP 使用,即使无需手动提交。只需使用这个变量:

$_SERVER['HTTP_USER_AGENT']

第三:您不应该永远将未经处理的输入放入 SQL 字符串中。这将导致 SQL 注入(inject),并且您的服务器被黑客攻击。 而不是:

$sql = "INSERT INTO UserData (UserAgent) VALUES ('$userAgent')";
$conn->query($sql);

您必须使用准备好的语句(几乎适用于任何接受变量的查询),以便没有人可以操纵您的查询。否则,如果您的 $userAgent 变量包含单引号,您就可以突破查询,攻击者可以注入(inject)他想要的任何 SQL 代码。因此,请执行以下操作来解决您的安全问题:

$statement = $conn->prepare("INSERT INTO UserData (UserAgent) VALUES (?)");
$statement->bind_param('s', $userAgent);
$statement->execute();

“s”参数实际上是您要在语句中准备的每个参数的一个字母。在这种情况下,它表明您想要传递一个字符串。 “i”是一个整数,“d”是一个 double ,请参阅此处了解更多信息:http://php.net/manual/de/mysqli-stmt.bind-param.php

第四:您的问题与 phpMyAdmin 完全无关,因此您应该更改标题。

我希望这可以帮助您入门。

关于javascript - 使用 PHP 将网站数据发布到 MySQL 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48999040/

相关文章:

javascript - 在 Meteor 模板上使用 NPM 包

javascript - Record<string,any> 和 {} 之间的区别?

php - 设置或规避 MySql Sharding

用于打开新窗口的 Javascript 代码在 IE 中不起作用

javascript - 每 X 个值有效地分解一个数组?

PHP MySqli 多查询 & while 在一页中 - 有助于简化代码

java - Android XML解析: Parse this special Type of XML i have no Idia about this

javascript - HTML:输入类型日期和月份范围

html - flex 盒 : content rules the width?

javascript - 当用户刷新整个页面时防止 bootstrap 3 模式关闭