需要根据xampp服务器中的下拉菜单更新图表

k3bvogb1  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(446)

我在mysql数据库(practice\u database)中有一个名为'marks'的表,包含以下值:(我使用的是xampp服务器)name,sem,internal,end\u sem,avani 1 55 56 alka 1 26 29 saurabh 1 44 40 rekha 1 42 39 ralph 1 52 60 avani 2 57 51 alka 2 53 52 saurabh 2 33 22 rekha 2 37 29 ralph 2 47 55 avani 3 56 59 alka 3 47 45 saurabh 3 33 45 rekha 3 32 25 ralph 3 44 59
我需要创建一个图形,根据我在相应的下拉菜单中选择的值,显示内部和结束标记。下拉菜单必须由列sem填充。这是以下代码:

  1. <?php
  2. $con = mysqli_connect('localhost','root','','practice_database');
  3. ?>
  4. <!DOCTYPE HTML>
  5. <html>
  6. <head>
  7. <meta charset="utf-8">
  8. <body>
  9. <form name="frmdropdown" method="POST" >
  10. <center>
  11. <h2 align="right">SEMESTER</h2>
  12. <strong> Select Semester: </strong>
  13. <select align="right" name="empName">
  14. <option value=""> -----ALL----- </option>
  15. <?php
  16. $Sem="Select DISTINCT Sem from Marks";
  17. $exec1 = mysqli_query($con,$Sem);
  18. while($r=mysqli_fetch_array($exec1)) {
  19. echo "<option value='$r[0]'> $r[0] </option>";
  20. }
  21. ?>
  22. </select>
  23. </body>
  24. <title>
  25. Create Google Charts
  26. </title>
  27. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  28. <script type="text/javascript">
  29. google.load("visualization", "1", {packages:["corechart"]});
  30. google.setOnLoadCallback(drawChart);
  31. function drawChart() {
  32. var data = google.visualization.arrayToDataTable([
  33. ['Name', 'Internal', 'End_sem'],
  34. <?php
  35. if($_SERVER['REQUEST_METHOD'] == "POST")
  36. {
  37. $des=$_POST["empName"];
  38. if($des=="") // if ALL is selected in Dropdown box
  39. {
  40. $query="SELECT Name, Internal, End_sem FROM Marks";
  41. }
  42. else
  43. {
  44. $query="SELECT Name, Internal, End_sem FROM Marks where sem='".$des."'";
  45. }
  46. }
  47. while($row = mysqli_fetch_row($query)) {
  48. echo "['".$row['Name']."',".$row['Internal'].",".$row['End_sem']."],";
  49. }
  50. ?>
  51. ]);
  52. var options = {
  53. title: 'Student Performance',titleTextStyle: {color: 'black'},
  54. hAxis: {title: 'Student Name-->', titleTextStyle: {color: 'red'}},
  55. vAxis: {title: 'Marks', titleTextStyle: {color: 'green'}},
  56. colors: ['blue','red'],
  57. is3D:true
  58. };
  59. var chart = new google.visualization.ColumnChart(document.getElementById("columnchart"));
  60. chart.draw(data, options);
  61. }
  62. </script>
  63. </head>
  64. <body>
  65. <h3>Column Chart</h3>
  66. <div id="columnchart" style="width: 900px; height: 500px; color: red;"></div>
  67. </body>
  68. </html>

然而,它不起作用。没有下拉菜单部分,代码可以正常工作。但是我的经理想要强制包含下拉菜单。因为我没有以前的编程经验,我发现谷歌图表更容易。有人能帮我纠正一下这段代码中的错误吗?我会很感激的。谢谢。

f0ofjuux

f0ofjuux1#

问题是您没有提交查询。你在试着做一件事 mysqli_fetch_row 而不是mysqli\u结果。是否要在初始页面加载时加载所有行?然后还需要将查询放在 REQUEST_METHOD . 请执行以下操作:

  1. if($_SERVER['REQUEST_METHOD'] == "POST" && $_POST["empName"])
  2. {
  3. $query="SELECT Name, Internal, End_sem FROM Marks where sem='".$_POST["empName"]."'";
  4. }
  5. else
  6. {
  7. $query="SELECT Name, Internal, End_sem FROM Marks";
  8. }
  9. $result = mysqli_query($con, $query);
  10. while($row = mysqli_fetch_row($result)) {
  11. echo "['".$row['Name']."',".$row['Internal'].",".$row['End_sem']."],";
  12. }

关于代码的一些注意事项:应该使用mysqli的面向对象样式,而不是过程样式 mysqli_ 功能,特别是出于安全原因。你需要消毒 $_POST["empName"] 以及防止mysql注入的查询。您应该阅读以下内容:如何防止php中的sql注入?
你考虑过用javascript按学期过滤而不是重新加载页面吗?这可以很容易地实现,因为您无论如何都要在init上加载完整的数据。您可以将数据存储在 drawChart() 方法并为select定义onchange回调方法,该方法过滤行并重新绘制图表。

展开查看全部

相关问题