我正在尝试使用HTML将PHP变量发送到Javascript函数。我不知道这是否可能。我是一个新手。
这是index.php和abc.php两个文件中的所有代码注:我已将文件名从index.html更改为index.php
index . php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-transitional.dtd">
<?php
require("../php/abc.php");
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Some Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="file.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="here.js"></script>
</head>
<body onload="init();">
<noscript>
Your browser does not support Javascript!!
</noscript>
<table id="content">
<tr>
<td>
<div id="scroll"></div>
</td>
<td id="colorpicker" valign="top">
<img src="palette.png" id="palette" alt="Color Palette" border="1" onclick="getColor(event);" />
<br />
<input id="color" type="hidden" readonly="true" value="#000000" />
<span id="sampleText">
(text will look like this)
</span>
</td>
</tr>
</table>
<div>
<input type="text" id="userName" maxlength="50" size="10" onblur="javascript: check('<?php echo $phpVariable; ?>');" />
<input type="text" id="messageBox" maxlength="2000" size="50" onkeydown="handleKey(event);" />
<input type="button" value="Send" onclick="sendMessage();" />
<input type="button" value="Delete All" onclick="deleteMessages();" />
</div>
</body>
</html>
Javscript函数
function check(param_name)
{
var oUser=document.getElementById("userName");
oUser.value = param_name;
}
abc.php
if(isset($_POST['user_name'], $_POST['action'])) {
$user_name = $_POST['user_name'];
$action = $_POST['action'];
if($action == 'joined') {
$phpVariable = user_joined($user_name);
}
function user_joined($user_name) {
$servername = "";
$username = "";
$password = "";
$dbname = "";
//Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$user_name = mysql_real_escape_string(htmlentities($user_name));
$sql = "INSERT INTO table_name (column_name) VALUES ('$user_name')";
$query = "INSERT INTO table_name2 (column_name) VALUES ('$user_name')";
$result = $conn->query($query);
if($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error in inserting: " . $sql. "<br>" . $conn->error;
}
return $user_name;
$conn->close();
}
试试这样
HTML<input type="text" id="nametxt" />
<button id="btn-check"></button>
Javascript $(document).ready(function (){
$("#btn-check").click(function(){
var name = $('#nametxt').val();
var login = {
parameter: name
};
$.ajax({
type: 'POST',
url: 'file.php',
data: login,
datatype: 'json'
}).done(function(data) {
console.log(data);
});
});
});
PHP <?php
//do some
echo information; -- this way return parameters
?>
正如您所写的,将PHP变量的值输出到HTML页面的方法是执行<?php echo $phpVariable ?>
。在较新版本的PHP中(以及在打开该设置的较旧版本中),您可以将其缩短为<?= $phpVariable ?>
。
你得到一个"未定义的变量"警告可能是因为$phpVariable
没有被设置。在您的代码中,只有在$action == 'joined'
时才初始化该变量。如果你想让它有一个默认值,先给它一个:
$phpVariable = null;
// note that three equals signs are not necessary here
// but a good habit for cases where it matters
if ($action === 'joined') { ... }
当您将PHP变量输出到JavaScript字符串中时,您应该转义输出,这样您就不会让您的访问者容易受到XSS(跨站点脚本)攻击。在这种情况下,json_encode
应该是足够的。但是,由于JavaScript不在<script>
标记内,而是在onblur
属性内,因此必须转义HTML中的任何特殊字符。由于在属性值周围使用了双引号,因此htmlspecialchars
就足够了。总之,您将输出htmlspecialchars(json_encode($phpVariable))
。这一切的原因是你不想依赖于你的输入是干净的——错误会犯,当他们这样做的时候,你不想让别人攻击你的用户。
<input type="text" id="userName" maxlength="50" size="10"
onblur="javascript: check('<?= htmlspecialchars(json_encode($phpVariable)) ?>');" />
既然我们给$phpVariable
一个默认值(null
),并且我们用它来调用check
函数,我们应该给check
函数添加一个"检查"来确保我们得到一个真实的值,像这样:
// you should use camelCase or under_scores, but not both, for consistency
function check(paramName) {
// loose equals to match null or undefined
if (paramName == null) {
return;
}
var oUser = document.getElementById("userName");
oUser.value = paramName;
}
或者,如果你真的想要小心你的函数输入,你可以验证paramName
是一个字符串,并且它有一个非零长度,但是在像JavaScript这样的动态类型语言中,手动做所有这些检查有时会成为一场失败的战斗。
这样是行不通的,因为PHP是在服务器端执行的,而JavaScript是在客户端执行的。
为了做到这一点,您将不得不对PHP文件进行AJAX调用,然后对结果使用JavaScript。