Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php代码调用javascript函数_Php_Javascript - Fatal编程技术网

用php代码调用javascript函数

用php代码调用javascript函数,php,javascript,Php,Javascript,我试图调用php区域顶部声明的Javascript函数。但是它不起作用。谁能告诉我原因吗。除此之外,其他一切都正常工作。请帮帮我 <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>AES (Rijndael) Encryption Test in JavaScript</title> <scr

我试图调用php区域顶部声明的Javascript函数。但是它不起作用。谁能告诉我原因吗。除此之外,其他一切都正常工作。请帮帮我

  <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
  <head>
  <title>AES (Rijndael) Encryption Test in JavaScript</title>
  <script src="aes-enc.js" type="text/javascript" language="JavaScript"></script>
  <script src="aes-dec.js" type="text/javascript" language="JavaScript"></script>
  <script src="aes-test.js" type="text/javascript" language="JavaScript"></script>
  <script type="text/javascript">

   function doDecryption()
            {
            document.write("Inside Javascript");
            var ct, key;

  ct = hex2s(<?php echo $myValue; ?>);
  document.write("Inside Javascript");
  document.write(ct);
 // key = hex2s(theForm.key.value);
 // theForm.plaintext.value = byteArrayToHex(rijndaelDecrypt(ct, key, "ECB"));


            }


  </script>
  </head>

  <body>
  <?php
  mysql_connect("localhost","root","");
  mysql_select_db("encryption") or die(mysql_error());
  $userId = $_POST['userId'];


  if (($_SERVER['REQUEST_METHOD'] == 'POST') && ($_POST['key'] == ""))
  {
     $query = mysql_query("select * from employee_details where id = '$userId'");                       if($row=mysql_fetch_assoc($query))
                {
                    echo '<tr>';
                    foreach($row as $value)
                    echo '<td>'.$value.'</td>';
                    echo '</tr>';
                }

            else { echo "No rows returned"; }}
    else if (($_SERVER['REQUEST_METHOD'] == 'POST') && ($_POST['key']))
        {

           $columname = "ciphertext";
           $tablename = "employee_details";



                function getField($field, $tbl_name, $condition)
            {

                $result = mysql_query("SELECT $field FROM $tbl_name WHERE id =  ".$condition);

                 return @mysql_result($result, 0);
            }

                $myValue = getField($columname,$tablename,$userId);

                echo "$myValue";
                [B]echo '<script type="text/javascript">
                    doDecryption();
                    </script>';[/B]
                echo "whats happening";
                //doDecryption();

        }

   ?>
  </body>
  </html>

JavaScript中的AES(Rijndael)加密测试
函数doDecryption()
{
编写(“内部Javascript”);
var-ct,key;
ct=hex2s();
编写(“内部Javascript”);
文件编写(ct);
//key=hex2s(形式key.value);
//form.plaintext.value=bytearraytochex(rijndaelDecrypt(ct,key,“ECB”);
}

$myValue
在JS中尝试使用时没有值

PHP在服务器上运行,输出一个带有嵌入式JavaScript的HTML文档,该文档被发送到客户端,然后JavaScript运行

如果在PHP到达文档末尾之前您不知道JavaScript变量需要具有什么值,那么在此之前您无法生成JS的该部分。您可能希望将其作为参数写入函数调用

一旦你这样做了,你就会遇到另一个问题——如果你的数据是一个字符串,那么它就需要被引用(并且里面任何匹配的引号都需要被转义)

简而言之:PHP输出的文本可能会作为JS处理,但它不能调用JavaScript函数(除非您开始混合可以与服务器上的Rhino/Spidermonkey/etc通信的扩展)

综上所述,在本例中,似乎没有任何理由首先使用JavaScript,最好将所有逻辑移到PHP

顺便说一句,在大多数浏览器中,您选择的Doctype将触发怪癖模式。这几乎总是非常不受欢迎的

更好的选择是:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

或者如果你真的想要过渡:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

如果您不使用AJAX,看起来很好(如果您使用AJAX,可能需要评估()您的响应)

我已经尝试了你的代码的一个简短版本,它工作正常

<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>AES (Rijndael) Encryption Test in JavaScript</title>
<script src="aes-enc.js" type="text/javascript" language="JavaScript"></script>
<script src="aes-dec.js" type="text/javascript" language="JavaScript"></script>
<script src="aes-test.js" type="text/javascript" language="JavaScript"></script>
<script type="text/javascript">

function doDecryption()
{
    document.write("Inside Javascript");
}

</script>
</head>

<body>
<?php
    echo '<script type="text/javascript">
    doDecryption();
    </script>';
    echo "whats happening";
?>
</body>
</html>

您好。

您能澄清一下这个问题吗?如果问题是:能否在运行时在服务器端PHP代码中调用客户端javascript函数?答案是否定的

如果运行nodeJS服务器,只要javascript代码驻留在nodeJS可以执行的地方,就可以托管javascript服务器端并执行函数调用

但总体而言,用例让我感到困惑。我猜最初设计用于在浏览器客户端进行解密的应用程序之所以这样做,是因为服务器没有执行解密的密钥。因此,如果这是其他人编写的应用程序,而您正试图对其进行更改,那么您需要确保您确实拥有服务器端执行解密过程所需的密钥,因为服务器可能从未打算访问解密密钥。此外,如果服务器确实可以访问密钥来执行解密,那么可能有一种很好的方法可以使用php代码实现这一点。(我不是php开发人员,所以我不能确切地说出编写解密php脚本所需的php代码)

希望这有帮助。
标记更改javascript函数以获取参数(值为
$myValue

然后更改
ct=hex2s()
ct=hex2s(参数)

最后,您需要将
$myValue
php变量传递给javscript函数,您可以在调用它时执行此操作

echo '<script type="text/javascript">
                doDecryption( '.$myValue;.');
                </script>';

输出是什么样子的?我在头脑中运行了代码之后,就明白了为什么会失败。如果您提供了错误消息,那么解决这个问题会更容易。因此,根据经验,尝试将您的问题分解为“为什么这个JS不工作?”或“为什么这个PHP不输出这个HTML/JS源代码?”而不是“为什么PHP生成的HTML/JS源代码没有达到我的预期?”危险:您有一个SQL注入安全漏洞!不要通过将包含未初始化的
$\u POST
数据的字符串粘在一起来构建SQL查询@大卫:哇,我不知道他们甚至为小鲍比桌子做了一个网站(尽管不能访问):。有好几个,这是其中一个更好的。不幸的是,自从我上一次发表评论以来,它似乎已经失败了。毫无疑问,它不久就会恢复。它用多种不同的语言(通常通过解释使用参数化查询的各种方法)解释了问题以及如何避免这些问题,因为您删除了PHP部分,问题是PHP输出了错误的数据…这并不奇怪。你没有回答他的问题,因为:1-你没有使用他的变量,这是他的问题(见David的答案)2-OP没有提到AJAX(和他的问题),为什么在这里提到它?3-
eval()
严重吗?(可能想投反对票。)对@David Dorward,但他问为什么不调用JS,而且如果代码的其余部分可以。。。没有错误,没有任何线索。好了,伙计们,谢谢你们的优势:)只是想帮帮忙。我什么都没说…伙计们,我不明白你们想说什么所以。。你能说得更具体些吗。我会回答你的任何问题……没关系。我没有看到php代码中的脚本标记。所以这篇文章与你的问题无关。对不起,我也正要告诉你;)请不要试图回答得比对方快。如果你的答案是正确的,并且写得很好,你将有一个upvote,也许是一个被接受的。关于输出,我删除了程序中的一些php代码,以便使代码更短。现在我得到了所需的PHP代码输出,但是当我调用javascript函数时,javascript函数没有被调用……换句话说,第一次打印
function doDecryption(param)
echo '<script type="text/javascript">
                doDecryption( '.$myValue;.');
                </script>';
echo '<script type="text/javascript">
                doDecryption( "'.$myValue;.'");
                </script>';