通过HTML发送PHP变量给javascript函数


send PHP variable to javascript function via HTML

我正在尝试使用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。