【问题标题】:Inserting data from JS script into mysql database将数据从 JS 脚本插入 mysql 数据库
【发布时间】:2020-11-24 00:05:33
【问题描述】:

我创建了一个脚本来倒计时我提交到表单中的任何值,然后输出“提交的值 + 我点击提交按钮的那一刻的日期”。

但现在我想在每次使用表单时使用 SQL 查询将结果存储到我的数据库中,然后使用 SELECT SQL 查询将所有这些结果回显到另一个名为“log.php”的页面中。

var timelog = [];

function myF() {
    countdown(s);
    log = document.getElementById("log").innerHTML = s + 'at ' + new Date();
    timelog.push(log);
}

function logged() {
    document.getElementById("timeloggg").innerHTML = timelog;
}

我试图将结果分配给一个变量,但显然,我不能在脚本之外使用这个变量。

通过谷歌搜索,有人告诉我使用 Ajax,但遗憾的是我无法弄清楚如何使用 ajax 插入数据,因为所有代码示例都只是关于从数据库中调用数据。

那么关于如何将结果插入我的数据库有什么建议吗?我还是个初学者,不介意的请详细说明。

【问题讨论】:

    标签: javascript php mysql


    【解决方案1】:

    当然,可以从客户端 js 将数据插入到数据库中,但不要这样做!我想不出一种不会暴露你的数据库凭据,让你对恶意行为者开放的方法。

    您需要做的是在您的服务器上设置一个 php 脚本,然后通过 xhr 请求发送您想要插入的数据(通过 POST 或 GET),然后让该 php 脚本执行插入。然而,即使是这样,也有相当多的保障。谷歌“如何在 php 中清理 mysql 输入”并阅读了几篇关于它的文章。

    根据您需要做什么,您可以自己清理输入,但推荐的方法是使用准备好的语句,您需要阅读特定实现的文档,无论是 mySQL 中的 mysqli 还是 pdo或其他一些库(例如,如果您使用的是 SQL、postGRE、Oracle 等)。

    HTH

    ================================================ ==

    以下是如何在 js 中执行此操作,但不要这样做,除非您永远不会在本地计算机之外公开此代码。

    var connection = new ActiveXObject("ADODB.Connection");
    var connectionstring = "Provider=host;Data Source=table;User Id=user;Password=pass;";
    connection.Open(connectionstring);
    
    var rs = new ActiveXObject("ADODB.Recordset");
    var sql = {{your sql statement}};
    rs.Open(sql, connection);
    
    connection.close;
    

    ===============================================

    对于 php,请执行以下操作,将主机、用户、密码、数据库替换为您的实际凭据以及主机名和数据库:

    $db = new mysqli({host}, {user}, {pass}, {database});
    if($db->connect_errno > 0){ die ("Unable to connect to database [{$db->connect_error}]"); }
    

    设置连接。如果这是一个可公开访问的 php 服务器,那么有一些关于如何设置连接的规则,这样您就不会意外暴露您的凭据,但我现在将跳过它。您基本上会将其保存到一个无法从外部访问的文件中(例如,在文档根目录之上),然后包含它,但数据库安全是一个复杂的主题。

    要获取您在 ajax 调用的查询字符串中传递的值:

    $val1 = $_GET['val1'];
    $val2 = $_GET['val2'];
    

    然后使用参数化查询进行插入:

    $query = $db->prepare("
        INSERT INTO your_table (field1, field2)
        VALUES (?, ?)
    ");
    $query->bind_param('ss', $val1, $val2);
    $query->execute();
    

    现在,您将不得不在这里查看文档。 'ss' 意味着它将把你插入的这两个值都视为字符串。我不知道表的设置,因此您必须为实际插入的任何内容查找正确的代码,例如如果它们是整数,那么“ii”或“si”将意味着第一个值是字符串,第二个是 int。

    以下是允许的值:

    i - 整数 d - 双倍 s - 字符串 b - BLOB

    但无论如何都要查看准备好的语句的文档。我在这个例子中使用了 msqli。

    【讨论】:

    • 嗯,这将主要是一个本地项目,我不打算向公众发布它,只是一个帮助我个人工作的工具。是的,也许将来我将不得不发布它,但我不会。因此,我只是在寻找解决方案,而不管对输入进行消毒。另外,你能解释一下如何发送我想用 xhr 请求插入的数据吗?谢谢
    • 当然,没问题。不过,您仍然想在您的服务器上设置一个 php 脚本。这可能比在 js 中插入更容易。设置一个 php 脚本,比如 insert.php。然后使用查询字符串从 ajax 调用它,例如:insert.php?val=test。然后在您的 insert.php 中,添加这一行: echo "
      "; print_r($_GET);回声“
      ”;出口;您将看到查询字符串变量是如何存储的,在本例中为 $_GET['val']。然后使用该值编写您的 mysql 语句。如果您的 php 脚本可以从 Internet 访问,您仍然需要保护输入。
    • 这在 cmets 中可能有点太复杂了。告诉我您使用的是什么数据库,我将编辑原始答案。
    • 我正在使用Mysql数据库
    • 如果您将数据库结构以及您尝试过的 js 和 php 代码提供给我,我将在 mySQL 数据库上设置一个相同的表并对代码进行故障排除。去掉你的凭据,我不需要它们,你也不应该分享它们。
    【解决方案2】:

    您可能想要检查 Ajax 请求。

    我建议start here

    您要做的基本上是创建从 javascript 到服务器上的 php 文件的异步请求。

    Ajax 允许通过交换小的内容来异步更新网页 后台服务器的大量数据。这意味着它 可以更新网页的部分内容,而无需重新加载整个网页 页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多