【问题标题】:Passing PHP variables into JavaScript [duplicate]将 PHP 变量传递到 JavaScript [重复]
【发布时间】:2013-01-20 18:03:25
【问题描述】:

我是一名业余 Web 开发人员,我正在开发一个主要使用 JavaScript 但需要使用 PHP/MySQL 的应用程序,因为它是一个测验应用程序,我不希望人们通过转到“查看”来查看所有测验答案资源。”相关的页面有:index.html、problems.php、functions.js。 index.html 是主要的测验页面。 questions.php 是用于连接到服务器并获取测验页面上问题答案的页面。 functions.js 用于检查答案是否正确以及提示应用程序执行某些操作的其他事项。

索引.html:

<?php
    include ("problems.php");                                    
?>
...

问题.php

<?php
    // Connect to server
    $con = mysql_connect("XXXXXXXXXXXXX", "XXXXXXXXXXX", "XXXXXXXXXXXX");
    mysql_select_db("problems", $con);
    if (!$con) {
         die("Didn't connect");
    }
    $question_num = $_GET["num"];
    $sql = "SELECT question FROM questions WHERE num='" . $question_num . "';";
    $answer = mysql_fetch_array(mysql_query($sql))['question'];
?>

functions.js

function checkAnswer(ans, input) {
    if (ans == input) {
        alert("Correct!");
    }
}

我不是 PHP 开发人员,对 PHP 知之甚少(这就是我选择在应用程序中使用 JavaScript 的原因)。但我想使用 GET 方法来获取测验问题的答案(当用户单击“提交”时传入 ?num=1,2,3,4,5)。然后将从数据库中获取的测验答案传递给functions.js的checkAnswer函数以检查答案。我的问题是对 JavaScript 函数的问题的答案传递。此外,我的服务器似乎甚至没有连接到我的代码中的数据库。

【问题讨论】:

  • 您的代码容易受到SQL injection 的攻击。在进行查询之前,您需要使用数据库库的适当方法来转义您的数据。
  • 我建议你避免使用过时的 mysql_* 函数。将它们用于新代码是highly discouraged。更现代的替代品可用且维护得更好。相反,请考虑了解prepared statements,并且您可以使用PDO or MySQLi。当严格使用时,它们避免了繁琐的手动转义部分,从而变得更容易并且(作为副产品)更安全地使用。查看this PDO tutorial 以获得良好的开端。

标签: php javascript html web-applications


【解决方案1】:

您可以通过以下方式实现此目的

步骤

  1. 将用户输入的问题 ID 和答案传递到 PHP 页面
  2. 在 php 页面验证答案
  3. 然后根据答案返回真/假

我会建议你使用 jQuery ajax 来做这个

$.ajax({
   url: "GetAnswerStatus.PHP?questionid=4&input=3"
}).done(function ( data ) {
   // data = true/ false
   console.log("Answer:" + data);
});

或使用jQuery .get

$.get('GetAnswerStatus.PHP?questionid=4&input=3', function(data) {
    console.log("Answer:" + data);
});

【讨论】:

  • 在本地(或使用本地服务器)运行 .php 文件的最有效方法是什么?将多个 id 和答案传递给同一个 .php 页面怎么样?谢谢。
  • 如果您需要一些简单的东西,请检查此服务器。 questions/3004696 或者你可以使用built in server
  • 多个ID?这意味着您想一次性验证多个问题?
  • 是的,点击“检查”按钮时会出现多个问题
  • 好的。最简单的选择是将它们作为格式化字符串QID1#ANS1,QID2#ANS2,QID3#ANS3,QID4#ANS4 发送。然后在您的 PHP 代码中,您可以将其拆分并循环。
【解决方案2】:

我建议不要将答案存储在 javascript 中,因为任何人都可以打开 javascript 文件并进行查看。我建议做所有的答案检查服务器端。

将答案作为 GET 或 POST 请求中的参数传递给服务器,捕获答案,然后使用 mysqli_* 或 PDO 创建准备好的语句来检查您的答案是否正确。

【讨论】:

    【解决方案3】:

    如果您使用 javascript 向客户端获取答案,用户将能够看到它。将答案发送到服务器(例如使用 ajax)并在那里检查(仅返回是否正确)。

    直接将 GET 值插入 mysql 查询也不是很安全。使用 mysql_real_escape_string 之类的东西。

    【讨论】:

    • 我是正确使用“include”语句还是文件必须是“.php”而不是“index.html”我使用.html的原因是因为我想在本地测试应用程序,但也许这就是它阻止服务器连接的原因?
    • 你应该使用 .PHP 并且你应该使用服务器(至少本地主机)运行它...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多