【问题标题】:Is it possible to update data in my SQL database with Javascript?是否可以使用 Javascript 更新 mySQL 数据库中的数据?
【发布时间】:2015-08-02 11:23:31
【问题描述】:

我开始使用 javascript 学习一些 SQL,我想将我的变量(“来自 javascript 的 Val_Points”)放入用户(例如:Robert)的表(“Usuarios”)中。这是通过 Javascript 实现的还是有其他一些方法?

var Val_Points = 0; /* Variable */
$('.btn').click(function() {
  Val_Points += 5; /* value +5 */
  /* Update individual SQL Data
  var UpdateSQL = dbConn.executeUpdate('UPDATE Usuarios SET Points="$Val_Points" WHERE Username="$_SESSION[username]"'); 
*/
  $('#exp_bar').val(Val_Points);
});
<?php
	session_start();
	require 'connect.php';
$username_session = $_SESSION['username']; /* "Robert" Session */
$query = "SELECT * FROM `Usuarios` WHERE usuario='$username_session'";
$result = mysqli_query($connection, $query);
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Points</p>
<progress id ="exp_bar" value="0" max="100"></progress><br>
<button class="btn">+1</button>

我还看到了一个简化此https://hiddentao.github.io/squel/ 的脚本,也许在编写脚本时使用它可能更具可读性。有什么帮助吗?

编辑

我尝试通过 $_SESSION 使用 php 完成所有这些操作

<?php
session_start();
require 'connect.php';
$username_session = $_SESSION['username'];
$query = "SELECT * FROM `Usuarios` WHERE username='$username_session'";
$result = mysqli_query($connection, $query);

if(empty($_SESSION['Val_Points'])){

    $Val_Points_Session = $_SESSION['Val_Points'] = 0; 
}


 echo "<form action='' method='POST'>
   <progress id ='exp_bar' value='".$_SESSION['Val_Points']++."' max='100'></progress>
   <input class='btn' type='submit'  value='Increase val' /> 
 </form>";

 echo $_SESSION['Val_Points']; /* Show current variable */
$Update_SQL = "UPDATE Usuarios SET Points='$Val_Points_Session' WHERE username='$username_session'";

?>

但它不会更新表格,表格保持相同的值

用户名积分
罗伯特 0

【问题讨论】:

  • 你试图在你的js中执行php?您必须调用服务器(例如 $.ajax ),然后才能完成更新。不知道为什么添加php标签被拒绝...
  • 有可能从我看到像这样的一些例子stackoverflow.com/questions/11232865/… 但它也没有帮助我也添加了 php 标签!
  • 好吧,有了这个库,似乎可以从 JS 执行 SQL,我只是无法想象这怎么能真正安全,我更喜欢中间有一层,抱歉帮不上忙你用那唯一的“传统”方式。
  • 我想做的就是使用 javascript 中的变量 (Val_Points) 并将其更新为查询,我敢打赌还有另一种方法可以做到这一点,但我不知道。可以使用php从HTML按钮创建一个+5的变量并将其更新为查询吗?我是新手,我真的很困惑。
  • 是的,有可能可以给出一个模板......而且一开始确实很混乱:最重要的是总是提醒自己JS在客户端运行而php在服务器端运行(虽然你可以将javascript添加到您的php中,它不会在服务器上被解释)。

标签: javascript php jquery sql ajax


【解决方案1】:

是否可以使用 Javascript 向 SQL 数据库插入数据

简单的答案是否定的。不是只是使用 Javascript。

要理解这一点,您需要知道client-sideserver-side 之间的区别。

客户端

客户端执行的操作。这些操作由用户的计算机/软件进行。这也意味着客户可以随心所欲地修改数据。

服务器端

服务器执行的操作。这些操作是在服务器上进行的,并且仅使用客户端发送的信息。数据接收后客户端无法修改。

您的数据库位于您服务器上的server-side 上。客户端无法直接访问此数据库,因此您需要将数据从client-side 发送到server-side。这可以通过javascript 完成。

那么该怎么做呢。

在您的情况下,您想将Javascript(客户端)与PHP(服务器)结合起来。通过PHP,我们将数据插入到您的SQL 数据库中。

示例

Javascript / Jquery(!)

我们将使用$.ajax()。这是 jQuery 框架之外的一个函数,它向您的服务器发出请求。

$('.btn').click(function() {
    var request = $.ajax({
        url: "phpfile.php",
        data: { label: "value" },
        method: "POST"
    });

    request.done(function() {
        // Do something after its done.
    });
 });

PHP

<?php

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
      // do your database stuff.
      // the data you send from the client is in the $_POST array.
      // for example $_POST['label']
    }

?>

【讨论】:

  • 鉴于我的 cmets 不再相关,我将删除它们。我也给了这个答案+1。
【解决方案2】:

“标准”方法

foo.php 是包含按钮和脚本的站点:

<button id="update-btn">update</button>
...
<script src="foo.js"></script>

foo.js 添加点击处理程序:

$('#update-btn').click(function() {
    $.ajax({
        'url': 'fooHandler.php',
        'method': 'POST',
        'data': {'sid': ..., 'action': 'update', 'value': ...}
        /* 'success': function(data) { ... } */
        /* 'error': function ... */
    });
});

fooHandler.php 处理客户端对服务器的请求:

<?php
  if (isset($_POST['sid'], $_POST['action'])) {
    /* TODO check if valid session */
    if ($_POST['action'] == 'update') {
      /* check if the rest is in order */
      if (isset($_POST['value'] and is_numeric($_POST['value'])) {
        /* TODO execute query */
      }
    } elseif ($_POST['action'] == ...) {
      ...
    }
  }
?>

【讨论】:

  • @Criss 您也可以使用.submit 而不是.click 将提交处理程序添加到表单而不是单击按钮(并在那里添加ajax 命令)并确保您返回false所以表格实际上并没有发送。您可以刷新站点上的其他值,例如$('#counter-lbl').html('new content');,而无需重新加载整个页面。我真的会创建至少 2 个 php 文件(内容 + 请求处理程序),否则会变得非常混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 2012-04-03
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
相关资源
最近更新 更多