【问题标题】:Using setInterval to post data periodically to DB使用 setInterval 定期将数据发布到数据库
【发布时间】:2019-09-30 12:02:16
【问题描述】:

我想使用 setInterval 函数每隔几秒钟将数据从我的网站发布到我的数据库。我没有收到任何错误消息,页面只是刷新删除任何输入的数据,但没有数据发布到数据库

<body>
 <div class="container">
   <div class="row">
     <form onclick="startPost()" method='POST' enctype='multipart/form-data'>
     <textarea name="field1" id="field1"></textarea>
     <input type="submit" id="post">
   </form>
 </div>

function startPost(){
    setInterval(function(){
        $("field1").load("post.php");
    }, 4000)
}
});

post.php

<?php
include "connection.php";

$post1 = $connection->real_escape_string($_POST['field1']);

$insert = "INSERT INTO DBtable (WebText) VALUES ($post1)";

$resultinsert = $connection->query($insert);


if(!$resultinsert){

  echo $connection->error;
}else{
  echo "<p> Text is posting </p>";
}

?>

我希望每四秒将数据发布到数据库,但页面只是在点击提交时刷新。 connection.php 连接数据库

【问题讨论】:

  • 您的脚本对SQL Injection Attack 甚至if you are escaping inputs, its not safe! 都是开放的,在MYSQLI_PDO API 中使用prepared parameterized statements
  • 听起来您可能需要使用 AJAX 而不是仅使用 php 的解决方案。你想收集什么数据? PHP 正在刷新页面,但无法指示客户端提交数据。 Yude 需要一种客户端语言来做到这一点。
  • 你混淆了很多概念。在 jQuery 上使用 .load,您正在尝试模拟一个 POST 请求(尽管它确实不是,而且您实际上并没有向服务器发送任何内容)。在提交时,您正在执行表单提交,这涉及页面重新加载,使间隔无效。最后一点,如前所述,您的代码容易受到 SQL 注入的攻击。
  • 我正在尝试每四秒将输入到 textarea 的文本发送到数据库。收集的数据只是用户在网站上输入的文本。

标签: javascript php setinterval


【解决方案1】:

HTML 表单提交具有在提交结束时刷新的默认行为。

<form onclick="startPost(event)" method='POST' enctype='multipart/form-data'>

像上面一样将事件传递给你的函数

function startPost(event){
    event.preventDefault();
    setInterval(function(){
        $("field1").load("post.php");
    }, 4000)
}
});

添加 preventDefault 以停止此默认行为。不同的浏览器有时反应不同,有时还需要执行event.stopPropagation() 这也可以防止事件触发对其父元素的点击。在您的具体情况下不需要。

编辑:

为了在提交时停止重新加载,您需要按如下方式捕获 onsubmit 事件:

<form onsubmit="preventReload(event)" method='POST' enctype='multipart/form-data'>
function preventReload(event) { event.preventDefault(); }

【讨论】:

  • 这个答案在概念上是正确的,尽管.load 仍然不会真正执行相关的发布请求,而只是一个空的请求。您应该完全解决问题:解决超时问题是一个很好的起点,但您也应该提供有关丢失帖子数据的解决方案。
  • 我还想到 preventDefault 实际上应该附加到提交本身,而不是 onclick。更好的是,将其附加到表单的 onsubmit="" 属性
  • 如果我需要完全诚实,这里的表格是不必要的,它可以删除。
  • 虽然这完全正确,但 OP 混淆的根源在于页面重新加载,这完全是由表单提交的默认行为引起的。这回答了其他人以后可能会偶然发现这个问题的问题。
  • 不过,它仍然不会发布数据。你也应该解决这个问题:P
猜你喜欢
  • 2015-08-04
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
相关资源
最近更新 更多