【问题标题】:Inserting into an mySQL database from a local html/javascript website从本地 html/javascript 网站插入 mySQL 数据库
【发布时间】:2017-07-24 07:06:12
【问题描述】:

我要做什么

我的程序的目的是将本地 HTML/JS 网站的数据插入在线(非本地)mySQL 数据库。

到目前为止我所做的尝试

我尝试使用的原始方法是,让我的本地网站使用 javascript 通过在线 PHP 文件发布数据,然后让这个 PHP 文件将此信息插入到 mySQL 表中.但我不断收到 cross-origin request 相关的错误。

以编程方式到达墙壁后,我打开了Stackoverflow Thread 以确定是否甚至可以从本地网站发布到在线PHP 文件,在此期间我被专业地告知如果不修改这是不可能的尝试访问此本地网站的每台计算机上的 Chrome 相关政策。

本帖的目的

确定是否通过PHP 文件发布而不是通过JS 网站从本地 网站将数据插入mySQL 表,如果有另一个我没有考虑过的方法。

不修改浏览器政策的原因:

我无法控制在用户浏览器上实施哪些策略或他们选择使用哪种浏览器。同样,我无法在他们的系统上安装其他软件,例如阿帕奇等

总体问题

到目前为止,我尝试从 本地 HTML/JS 网站发布作为插入mySQL 数据库的方法的方法迄今未成功。我已在此处发布以确定是否存在我尚未考虑的另一种方法,而不是通过 PHP 文件发布数据,这可以应用于我的源代码,而不是用户的网络浏览器以允许执行从本地HTML/JS 网站发起的mySQL 查询?

JS 代码:

function uploadPetData(petName, petAge, petType) {

    var urlString ="Pet_Name="+petName+"&Pet_Age="+petAge+"&Pet_Type="+petType;
    $.ajax({
        type: 'POST',
        url: 'http://example.com/test.php',
        crossDomain: true,
        data : urlString,   
        contentType:contentType,   
        success: function(responseData, textStatus, jqXHR) {
            var value = responseData.someKey;
        }
    });
}

PHP 代码:

<?php
$con=mysqli_connect("...","...","...","...");

$petName = $_POST['Pet_Name'];
$petAge = $_POST['Pet_Age'];
$petType = $_POST['Pet_Type'];

$petName = mysqli_escape_string($con, $petName);
$petAge = mysqli_escape_string($con, $petAge);
$petType = mysqli_escape_string($con, $petType);

$query = mysqli_query($con, "INSERT INTO Pets (Name, Season, Episode)
                             VALUES ('$petName', '$petAge', '$petType')");
mysqli_close($con);
?>

【问题讨论】:

  • 要求只发布数据吗?还是用户期望的响应?
  • @guest271314 我希望从 local HTML/JS 网站到 online mySQL 执行两个请求数据库表。第一个将简单地插入一行到上面提到的 online mySQL db 表中。第二个将确定 online mySQL db 表中是否存在特定行,如果确定存在,则将返回 TRUEFALSE 值。
  • 如果用户需要在线发布和获取数据,为什么不创建一个htmldocument在线用户提交&lt;form&gt;,并得到服务器的响应?
  • 如果我理解你的话,你问我是否希望用户能够将数据插入到在线mySQL db 表中,为什么不简单地将整个网站放在网上。我不想将整个网站放到网上的原因是,我希望网站本身对一些选定的用户完全私有。但是可以通过使用 online mySQL db 表提供并上传到 online 的数据,在这些本地 HTML/JS 网页之间共享信息。如果我误解了您的意思,请纠正我,因为我真的希望为上述问题找到适用的解决方案。
  • 不让网站上线。为用户提供一种在线与服务器交换数据的方式。

标签: javascript php jquery mysql cross-domain


【解决方案1】:

总体问题

到目前为止,我尝试从 本地 发布的方法 HTML/JS 网站作为插入mySQL 数据库的一种手段 到目前为止没有成功。我已经在这里发布以确定是否有 是我还没有考虑过的另一种方法 通过PHP 文件发布数据,可以应用于我的源 代码,而不是用户的网络浏览器,以允许执行 从本地HTML/JS 网站发起的mySQL 查询?

使用默认设置的浏览器无法满足此要求;或者没有用户操作允许应用程序访问他们的操作系统本地文件系统,并提出跨域请求。

您想要实现的目标需要某种形式的用户操作

替代品

问题是,一旦外部应用程序在用户本地文件系统中具有读写执行权限,该脚本可能会带来潜在的安全风险。

如果用户同意允许您的应用程序在其本地文件系统上读取、写入和执行任意脚本的潜在安全风险,则他们应该同意云存储解决方案,例如您编写的服务;使用并在线&lt;form&gt;上传文件;或完全从过程中省略浏览器,并在给定操作系统的命令行中执行对POST 文件的请求。

正如上面详细所述,HTML/JS 网站正在 存储在本地。它只是在线存储的MySQL db。这 这个项目的意图是,用户将在 本地私人HTML/JS 网站,那么这些决定他会 反映在网上mySQLdb。这样的数据传输将 以自动方式发生。因此,我最初试图传达这个 从JSPHPMySQL 的信息。因此,对于两者 自动化和隐私原因,在线放置表格供用户使用 手动输入数据将不适用。

最适合“自动化”的命令行选项,例如使用cron

有趣的是,您没有提到验证您的应用程序可以访问其文件系统的用户,以及将其本地文件存储在远程 MySQL 数据库中的用户

【讨论】:

    【解决方案2】:

    如果您打算直接处理 db,我建议在每台机器上使用服务器端 js 作为独立客户端。浏览器 js 不是为这种交互而设计的。

    如果您决定继续使用浏览器 js,您将需要一个 rest api 来实现您的目标。您还需要将文件挂载到本地网络服务器(nginx 或 apache)中,以处理客户端 js 的跨站点问题。之后,您可以使用普通的 ajax 或 Promise 或更高级的东西(如 RxJs Observables)与您的端点进行交互。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多