gpt4 book ai didi

javascript - 将用户输入保存到 PHP,然后在 Javascript 函数中使用

转载 作者:行者123 更新时间:2023-11-28 17:16:07 24 4
gpt4 key购买 nike

正在寻找解决我遇到的问题的方法。我的 PHP 文件能够存储用户输入的日期和时间。但是,一旦存储了日期,就无法再在我的 Javascript 函数中使用它。

我只是不知道数据是如何一步步处理的。如何提取数据库中存储的数据以在 Javascript 函数中使用?

更新:添加代码

PHP:简单地存储输入,并显示它已存储

    <?php
// ONLY Process Form if $_POST is NOT Empty
if ( ! empty( $_POST ) ) {

// Connect to MySQL
$mysqli = new mysqli( 'hn', 'un', 'pw', 'db' );

// Check Our Connection
if ( $mysqli->connect_error ) {
die( 'Connect Error: ' . $mysqli->connect_errno . ': ' . $mysqli->connect_error );
}

// Insert Our Data
$sql = "INSERT INTO table ( mydate ) VALUES ( '{$mysqli->real_escape_string($_POST['myDate'])}' )";
$insert = $mysqli->query($sql);

// Print Response from MySQL
if ( $insert ) {
echo "Success! Row ID: {$mysqli->insert_id}";
} else {
die("Error: {$mysqli->errno} : {$mysqli->error}");
}

// Close Connection
$mysqli->close();
}
?>

HTML:只是一个表单

  <html>
<head>
<meta charset="utf-8">
<title>User Form</title>
</head>
<script type="text/javascript" src="/displaytimer.js"></script>
<body>
<!-- HTML Form -->
<form class="" action="/index.php" method="post">
<input type="datetime-local" name="myDate" id="myDate"><br /><br />
<button id="submit" onclick="clickButton()" value="submit">Submit</button><br /><br />
<div id="showDate"></div>
</form>
</body>
</html>

JAVASCRIPT:根据用户输入的日期生成计时器。也可以在 iPhone 上访问(在此处找到有关 SO 的帮助)。 我确信有一种更简单的方法可以做到这一点,但我主要是在寻找如何仍然使用 var n 中输入的日期。

// get the iso time string formatted for usage in an input['type="datetime-local"']
var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1);
var localISOTimeWithoutSeconds = localISOTime.slice(0,16);

// select the "datetime-local" input to set the default value on
var dtlInput = document.querySelector('input[type="datetime-local"]');

// set it and forget it ;)
dtlInput.value = localISOTime.slice(0,16);

function clickButton() {
var x = setInterval(function() {
// Get Date Selected & Convert to ISO
var n = document.getElementById("myDate").value;
var d = new Date(n);
var dISO = d.toISOString();

// Get Today's Date
var today = new Date();
var tS = today.toDateString();
var tISO = today.toISOString();

// Calculate Time Left
var dParse = Date.parse(dISO);
var tParse = Date.parse(tISO);
var distance = dParse - tParse;
// days
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
if (days > 0) {
days = Math.floor(distance / (1000 * 60 * 60 * 24));
} else {
days = 0;
}
// hours
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
if (hours > 0) {
hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
} else {
hours = 0;
}
// minutes
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
if (minutes > 0) {
minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
} else {
minutes = 0;
}
// seconds
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
if (seconds > 0) {
seconds = Math.floor((distance % (1000 * 60)) / 1000);
} else {
seconds = 0;
}

// Print Distance or Expired Message
if (days > 0 || hours > 0 || days > 0 || seconds > 0) {
document.getElementById("showDate").innerHTML = days + " days " + hours + " hours " + minutes + " minutes " + seconds + " seconds ";
} else {
document.getElementById("showDate").innerHTML = "The time has expired";
}
}, 1000);
}

最佳答案

通过使用 AJAX 提交表单(即在服务器上存储日期),页面不会重新加载,因此您的 javaScript 代码将被执行。
以下是其工作原理的详细说明:

  1. clickButton() JavaScript 函数从表单的输入字段。
  2. 然后执行 ajax 请求,将数据发送到 PHP 文件,即 store_data.php(这将包含最初位于页面顶部的 PHP 代码)。
  3. 服务器处理 PHP 文件中的内容。即,将日期插入数据库
  4. PHP 文件会将您喜欢的任何数据回显给客户端(根据您的情况,成功或错误)。
  5. 在客户端执行回调,可以从服务器检索数据(回显)并执行 javaScript 代码。注意:页面尚未重新加载,因此 myDate 输入字段仍处于填充状态。

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>User Form</title>
<script type="text/javascript" src="/displaytimer.js"></script>
</head>
<body>
<!-- HTML Form -->
<form class="" action="" method="post">
<input type="datetime-local" name="myDate" id="myDate"><br /><br />
<button id="submit" onclick="clickButton()" type="button">Submit</button><br /><br />
<div id="showDate"></div>
</form>
</body>
</html>

displaytimer.js

 window.onload = function(){
// get the iso time string formatted for usage in an input['type="datetime-local"']
var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0,-1);
var localISOTimeWithoutSeconds = localISOTime.slice(0,16);

// select the "datetime-local" input to set the default value on
var dtlInput = document.querySelector('input[type="datetime-local"]');

// set it and forget it ;)
dtlInput.value = localISOTime.slice(0,16);
}


function createXHR(){
//This function sets up the XMLHttpRequest
try{
return new XMLHttpRequest();
}catch(e){
//to support older browsers
try{
return new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
return new ActiveXObject("Msxml2.XMLHTTP");
}
}
}

function clickButton(){
//The form has been submitted.
//Get the value of the myDate field from the form
var myDate = document.getElementById('myDate').value;
//set up the ajax request
xmlhttp = createXHR();
xmlhttp.onreadystatechange = ajaxCallback; //name of our callback function here
//Ive called the php file store_data.php but you can call it whatever you like.
xmlhttp.open("POST", "store_data.php" ,true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//send our variables with the request
xmlhttp.send("myDate=" + myDate);
}

function ajaxCallback(){
//this function will be executed once the ajax request is completed
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
//The ajax request was successful.
//we can now get the response text using xmlhttp.responseText. This will be whatever was echoed in the php file
var data = xmlhttp.responseText;
//In your case "data" will either be "Success! Row ID: ..." OR "Error: ....." so you can do checks here.
//For demonstration I will just continue with the rest of your code.

var x = setInterval(function() {
// Get Date Selected & Convert to ISO
var n = document.getElementById("myDate").value;
var d = new Date(n);
var dISO = d.toISOString();

// Get Today's Date
var today = new Date();
var tS = today.toDateString();
var tISO = today.toISOString();

// Calculate Time Left
var dParse = Date.parse(dISO);
var tParse = Date.parse(tISO);
var distance = dParse - tParse;
// days
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
if (days > 0) {
days = Math.floor(distance / (1000 * 60 * 60 * 24));
} else {
days = 0;
}
// hours
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
if (hours > 0) {
hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
} else {
hours = 0;
}
// minutes
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
if (minutes > 0) {
minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
} else {
minutes = 0;
}
// seconds
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
if (seconds > 0) {
seconds = Math.floor((distance % (1000 * 60)) / 1000);
} else {
seconds = 0;
}

// Print Distance or Expired Message
if (days > 0 || hours > 0 || days > 0 || seconds > 0) {
document.getElementById("showDate").innerHTML = days + " days " + hours + " hours " + minutes + " minutes " + seconds + " seconds ";
} else {
document.getElementById("showDate").innerHTML = "The time has expired";
}
}, 1000);

}
}

store_data.php

<?php
// ONLY Process Form if $_POST is NOT Empty
if ( ! empty( $_POST ) ) {

// Connect to MySQL
$mysqli = new mysqli( 'hn', 'un', 'pw', 'db' );

// Check Our Connection
if ( $mysqli->connect_error ) {
die( 'Connect Error: ' . $mysqli->connect_errno . ': ' . $mysqli->connect_error );
}

// Insert Our Data
$sql = "INSERT INTO table ( mydate ) VALUES ( '{$mysqli->real_escape_string($_POST['myDate'])}' )";
$insert = $mysqli->query($sql);

// Print Response from MySQL
if ( $insert ) {
echo "Success! Row ID: {$mysqli->insert_id}";
} else {
die("Error: {$mysqli->errno} : {$mysqli->error}");
}

// Close Connection
$mysqli->close();
}
?>

更新:

如果您想从 PHP 文件发回多个变量,您可以创建一个关联数组并使用 json_encode,如下所示:

store_data.php:

$responseData = array(); //create a PHP array
$responseData['status'] = "success";
$responseData['myDateSubmitted'] = $_POST['myDate']; //store the date that was submitted into a variable to send back
echo json_encode($responseData); //echo the response data back to the client

displaytimer.js

function ajaxCallback(){
//this function will be executed once the ajax request is completed
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
//The ajax request was successful.
//we can now get the response text using xmlhttp.responseText.
//parse the response text as JSON because we used json_encode in our PHP file.
var jsonData = JSON.parse(xmlhttp.responseText);
console.log(jsonData.myDateSubmitted); //check one of our variables
//Rest of your code here
}

}

关于javascript - 将用户输入保存到 PHP,然后在 Javascript 函数中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53463363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com