2013-01-20 41 views
0

我是一名业余网站开发人员,我正在开发一款主要使用JavaScript的应用程序,但需要使用PHP/MySQL,因为它是一个测验应用程序,我不希望人们看到所有测验答案通过转到“查看源代码”。相关页面是:index.html,problems.php,functions.js。 index.html是主要的测验页面。 problems.php是用于连接到服务器并在测验页面上获得问题答案的页面。而functions.js用于检查答案在提示应用程序做某事的其他事情中是否正确。将PHP变量传递到JavaScript

的index.html:

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

problems.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方法获取测验问题的答案(当用户点击“Submit”传递时,num = 1,2,3,4,5)。然后将从数据库获得的测验答案传递给functions.js checkAnswer函数以检查答案。我的问题是通过回答JavaScript中函数的问题。此外,它似乎并没有我的服务器连接到我的代码中的数据库。

+1

您的代码容易受到[SQL注入](http://php.net/manual/en/security.database.sql-injection.php)的影响。您需要使用 数据库库的适当方法在 之前转义您的数据以进行查询。 –

+1

我建议你避免使用日期的mysql_ *函数。使用它们用于新代码[非常不鼓励](http://php.net/mysql_query)。更现代的替代品可用并更好地维护。相反,请考虑学习[准备语句](http://en.wikipedia.org/wiki/Prepared_statement),并且您使用[PDO或MySQLi](http://php.net/manual/en/mysqlinfo。 api.choosing.php)。当严格使用时,他们避免繁琐和手动转义部分,从而变得更容易和(作为副产品)使用更安全。查看[本PDO教程](http://goo.gl/vFWnC)有一个好的开始。 –

回答

0

你可以做到这一点如下

步骤

  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); 
}); 
+0

在本地运行.php文件(或使用本地服务器)的最有效方法是什么?关于传入多个ID和回答相同的.php页面呢?谢谢。 – user11235

+0

如果您需要某种模拟功能,请检查此服务器。 [questions/3004696](http://stackoverflow.com/questions/3004696/is-there-a-simple-php-development-server)或者你可以使用[内置服务器](http://php.net) /manual/en/features.commandline.webserver.php) – Wolf

+0

多个ID?那意味着你想要一次验证多个问题? – Wolf

0

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

传递答案作为参数INA GET或POST请求到服务器,获取答案,然后用mysqli_ *或PDO来创建一个准备好的语句来检查你的答案是否正确。

0

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

同时将GET值直接插入到mysql查询中并不安全。使用类似mysql_real_escape_string

+0

我正确使用“include”语句,还是文件必须是“.php”而不是“index.html”我之所以使用.html是因为我想在本地测试应用程序,但也许这是为什么它阻止了服务器连接? – user11235

+0

你应该使用.PHP,并且你应该使用服务器(atleast localhost)运行它... – Wolf