0

我使用 php 和 mysql 创建了一个调查系统。我有一个名为“答案”的答案表,其中存储了用户提交的所有回复。我创建了一个脚本来生成一个谷歌图表,一次显示 2 个问题的统计数据。这个脚本有时似乎在响应时间很短的情况下工作,有时它需要很长时间,甚至返回一个内部服务器错误(我认为因为它需要很长时间才能得到结果,但我不确定)

这是php脚本

<?
// DB CONFIG FILE
require("../db/config.inc.php");
// DB CLASS FILE
require("../db/Database.class.php");
// CREATE THE $DB OBJECT
$db = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
// DB CONNECTION
$db->connect();


error_reporting(-1);

// GET THE SERVER ID VIA POST
$sID = 1342625918; // HARD NUMBER FOR TESTING

// GET THE QUESTION IDS VIA POST
$question1 = 5; // HARD NUMBER FOR TESTING
$question2 = 17; // HARD NUMBER FOR TESTING

//GET THE NAME OF THE SURVEY
$sql = "SELECT * FROM survey WHERE sID = '$sID'";
$rows = $db->query($sql);
while ($record = $db->fetch_array($rows)) {
$sName = $record["sName"];
}

//GET QUESTION ONE
$sql = "SELECT * FROM questions WHERE qID = '$question1'";
$rows = $db->query($sql);
while ($record = $db->fetch_array($rows)) {
$q1Text = $record["qName"];
}

//GET QUESTION TWO
$sql = "SELECT * FROM questions WHERE qID = '$question2'";
$rows = $db->query($sql);
while ($record = $db->fetch_array($rows)) {
$q2Text = $record["qName"];
}

//THIS GETS THE NAMES FOR THE GOOGLE GRAPH
$sql006 = "SELECT * from survey_selected_question, survey_selected_question_selected_option, options WHERE survey_selected_question.qID = '$question1' AND survey_selected_question_selected_option.ssqID = survey_selected_question.ssqID AND options.oID = survey_selected_question_selected_option.oID AND survey_selected_question.sID = '$sID'";
$rows006 = $db->query($sql006);
$numRes006 = $db->affected_rows;
$names = "";
while ($record006 = $db->fetch_array($rows006)) {
$names .= "'".$record006["oName"]."',";
}
// CLEAN UP THE NAMES VAR
$names = substr($names, 0, -1);


// START FUNCTION FOO
function foo($answer1, $answer2, $sID){

// CREATE THE DB OBJECT
$dbOne = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
// DB CONNECTION
$dbOne->connect();

$returnVal = 0;

//GET THE DISTINCT SUBMISSIONS FROM THE ANSWERS TABLE FOR THIS SPECIFIC SURVEY
$sql0 = "SELECT DISTINCT(submissionID) FROM answer WHERE sID = '$sID'";
$rows0 = $dbOne->query($sql0);

while ($record0 = $dbOne->fetch_array($rows0)) {

$submissionID = $record0["submissionID"];

// SELECT SUBMISSIONS WHERE ANSWER = PASSED ANSWER 1 or 2
$sql01 = "SELECT * from answer WHERE submissionID = '$submissionID' AND (answer = '$answer1' OR answer = '$answer2')";
$rows01 = $dbOne->query($sql01);
$numRes = $dbOne->affected_rows;

if($numRes=='2'){

$returnVal = $returnVal + 1;

}
}
return $returnVal;

$dbOne->close();
}
//END FUNCTION FOO

// START FUNCTION FOO2
function foo2($oID, $sID, $question1){

// CREATE THE DB OBJECT
$dbTwo = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
// DB CONNECTION
$dbTwo->connect();

// GET OPTION IDS AND BUILD AN OUTWARD STRING FOR GOOGLE GRAPH OF RESULTS
$sql2 = "SELECT * from survey_selected_question, survey_selected_question_selected_option, options WHERE survey_selected_question.qID = '$question1' AND survey_selected_question_selected_option.ssqID = survey_selected_question.ssqID AND options.oID = survey_selected_question_selected_option.oID AND survey_selected_question.sID = '$sID'";
$rows2 = $dbTwo->query($sql2);
$returnVal2 = "";
while ($record2 = $dbTwo->fetch_array($rows2)) {

$returnVal2 .= "".foo($record2["oID"], $oID, $sID).",";
}
//END FUNCTION FOO2

// CLEAN UP THE RETURNVAL2
substr($returnVal2, 0, -1);

// RETURN THE VAL HERE
return $returnVal2;
$dbTwo->close();
}

// START BUILDING THE google Array
$sql003 = "SELECT * from survey_selected_question, survey_selected_question_selected_option, options WHERE survey_selected_question.qID = '$question2' AND survey_selected_question_selected_option.ssqID = survey_selected_question.ssqID AND options.oID = survey_selected_question_selected_option.oID AND survey_selected_question.sID = '$sID'";
$rows003 = $db->query($sql003);
$numRes2 = $db->affected_rows;
$googleArray = "";
while ($record003 = $db->fetch_array($rows003)) {

$googleArray .= "['".$record003["oName"]."',".foo2($record003["oID"], $sID, $question1)."],";
?>
<?

}

// CLEAN UP THE GOOGLE ARRAY
$googleArray = substr($googleArray, 0, -1);

?>
<!DOCTYPE HTML>
<html>
<head>
<meta name = "viewport" content = "width = device-width">
<meta name = "viewport" content = "initial-scale = 1.0, user-scalable = no">
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
        ['Name',<?= $names; ?>],
        <?= $googleArray; ?>
]);

        var options = {
          title: 'Line graph for question "<?= $q1Text; ?>" against question "<?= $q2Text; ?>"'
          , colors:['#5D0F99','#2F543B','#BD2115','#D67314','#F92985','#0D85C7','#000D9C','#D9A5F6', '#27E80C', '#725F53']
        };

        var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
        chart.draw(data, options);
      }
    </script>
<style>
div#wrapper {
max-width: 700px;
overflow:hidden;
background:#eee;
margin: 0 auto;
padding: 8px 8px 8px 8px;
border:1px solid black;
}

a{
    color:#000;

}

input.goback {
background-color: #ccc;
border: 1px outset #000;
color: #000;
padding: 4px;
margin-left: 2px;
}

</style>
</head>
<body>
<div id="wrapper">
<h1><?= $sName; ?></h1>

<form method="post" action="main.php">
<p>Show me average(s) on 
  <select name="oID">
  <?
//GET QUESTION ONE
$sql004 = "SELECT * from survey_selected_question, survey_selected_question_selected_option, options WHERE survey_selected_question.qID = '$question1' AND survey_selected_question_selected_option.ssqID = survey_selected_question.ssqID AND options.oID = survey_selected_question_selected_option.oID AND survey_selected_question.sID = '$sID'";
$rows004 = $db->query($sql004);

while ($record004 = $db->fetch_array($rows004)) {
?>
  <option value="<?= $record004["oID"]; ?>"><?= $record004["oName"]; ?></option>
<?
}
?>
</select>

with these survey type(s): 
<select name="types">
<option value="0">All</option>
<?
//GET THIS SURVEYS TYPES
$sql005 = "SELECT * from survey_types, survey_selected_types WHERE survey_selected_types.sID = '$sID' AND survey_selected_types.stID = survey_types.stID";
$rows005 = $db->query($sql005);

while ($record005 = $db->fetch_array($rows005)) {
?>
<option value="<?= $record005["stID"]; ?>"><?= $record005["stName"]; ?></option>
<?
}
?>
</select>

over a 12 month period.

<input type="hidden" name="sID" value="<?= $sID; ?>">
<input type="hidden" name="question1" value="<?= $question1; ?>">
<input type="hidden" name="edit" value="average">
<input type="hidden" name="question2" value="<?= $question2; ?>">
<input type="submit" name="submit" value="Go" class="goback">
</p>
</form>

<div id="chart_div" style="width: 675px; height: 500px;"></div>
<form method="post" action="main.php">
<p>
<input type="hidden" name="edit" value="survey">
<input type="hidden" name="sID" value="<?= $sID; ?>">
<input type="submit" value="Back To Statistics" class="goback">
</p>
</form>
</div>
</body>
</html>
<?
$db->close();
?>

这是它输出的html(如果以及何时工作......就像我说的那样有时它返回得相当快,有时根本没有内部服务器错误)

<!DOCTYPE HTML>
<html>
<head>
<meta name = "viewport" content = "width = device-width">
<meta name = "viewport" content = "initial-scale = 1.0, user-scalable = no">
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
        ['Name','None','$1 - $50','$51 - $200','Over $200'],
        ['Yes',85,100,87,82,],['No',70,82,81,74,],['Undecided ',76,90,90,84,]]);

        var options = {
          title: 'Line graph for question "Not including this event, please estimate how much will you spend in the community during your visit, including accommodations, transportation, food, and gas, etc.)" against question "Would you describe this event as providing "good value?"'
          , colors:['#5D0F99','#2F543B','#BD2115','#D67314','#F92985','#0D85C7','#000D9C','#D9A5F6', '#27E80C', '#725F53']
        };

        var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
        chart.draw(data, options);
      }
    </script>
<style>
div#wrapper {
max-width: 700px;
overflow:hidden;
background:#eee;
margin: 0 auto;
padding: 8px 8px 8px 8px;
border:1px solid black;
}

a{
    color:#000;

}

input.goback {
background-color: #ccc;
border: 1px outset #000;
color: #000;
padding: 4px;
margin-left: 2px;
}

</style>
</head>
<body>
<div id="wrapper">
<h1>Test Survey One</h1>

<form method="post" action="main.php">
<p>Show me average(s) on 
  <select name="oID">
    <option value="33">None</option>
  <option value="34">$1 - $50</option>
  <option value="35">$51 - $200</option>
  <option value="36">Over $200</option>
</select>

with these survey type(s): 
<select name="types">
<option value="0">All</option>
<option value="13">One week</option>
<option value="16">Paid</option>
<option value="18">Fair</option>
<option value="50">Live performance(s)</option>
<option value="51">Exhibition</option>
<option value="59">Community Pride</option>
<option value="54">Local foods / goods (grown or produced)</option>
<option value="53">Agriculture</option>
<option value="52">Art and Culture</option>
<option value="61">Industry</option>
<option value="62">Shop local</option>
<option value="39">Simcoe</option>
<option value="48">Fall</option>
<option value="65">Sale(s)</option>
<option value="66">Vendors</option>
<option value="67">Midway / rides</option>
<option value="68">Live music</option>
<option value="70">Live performance (not music or theatre)</option>
</select>

over a 12 month period.

<input type="hidden" name="sID" value="1342625918">
<input type="hidden" name="question1" value="5">
<input type="hidden" name="edit" value="average">
<input type="hidden" name="question2" value="17">
<input type="submit" name="submit" value="Go" class="goback">
</p>
</form>

<div id="chart_div" style="width: 675px; height: 500px;"></div>
<form method="post" action="main.php">
<p>
<input type="hidden" name="edit" value="survey">
<input type="hidden" name="sID" value="1342625918">
<input type="submit" value="Back To Statistics" class="goback">
</p>
</form>
</div>
</body>
</html>

关于为什么这有时会很快起作用而其他人基本上似乎是超时或什么的任何想法?

注意:我第一次传递 question1 和 question2 号码并加载页面时它会超时。如果我点击刷新它会加载

4

1 回答 1

0

可能与 jsapi 可能使用www.google.com/chart的事实有关?生成它们。有时会超时。

100% 确定,它应该使用http://chart.googleapis.com/图表?也许使用 google.Visualization 构造函数可以让您更改目标 URL。

于 2012-07-23T17:40:39.517 回答