将javascript变量传递给PHP并进行mysql查询

时间:2011-04-27 21:29:17

标签: php javascript mysql

我将以下脚本(取自大型脚本)保存为example3.php:

<script type="text/javascript">
var layer;

//where layer is a table like 
------------------------------------
BUSNAME       +    Category    +
------------------------------------
200 Bay       +   Restaurant   +
201 Bay       +   Bank         +
202 Bay       +   School       +
203 Bay       +   Restaurant   +
204 Bay       +   School       +
205 Bay       +   Restaurant   +
206 Bay       +   Restaurant   +
207 Bay       +   School       +
208 Bay       +   Restaurant   +
209 Bay       +   Restaurant   +
------------------------------------

window.location.href = "example3.php?layer="+ layer;

<?php
  //Make a MySQL Connection
  $query = "SELECT Category, COUNT(BUSNAME) 
    FROM ".$_GET['layer']." GROUP BY Category"; 
  $result = mysql_query($query) or die(mysql_error());
  //Print out result
  while($row = mysql_fetch_array($result)){
    echo "There are ".$row['COUNT(BUSNAME)']. " " .$row['Category']. "items.";
  echo "<br/>";
  }
?>

</script>

不要为什么它不起作用。任何建议必须得到赞赏。

4 个答案:

答案 0 :(得分:4)

如果您有动态表名,您的数据库设计错误

至于你的脚本,它没有任何意义。

分两部分:JS页面和PHP页面。并使用window.location.href

调用此PHP页面

答案 1 :(得分:1)

我建议在客户端(在JS中)对表进行JSON编码。使用POST发送它,然后在服务器端解码(在PHP中)。

大多数流行的JS库都有JSON编码函数,PHP函数名为json_decode

答案 2 :(得分:0)

正如Balus指出的那样,请注意SQL注入。当你到达php页面时,$_GET['layer']是否等于什么?

你的javascript变量是否等于某些东西? var layer = "layer

“layer”是数据库中表的实际名称。

答案 3 :(得分:-1)

修改

在此上下文中mysql_real_escape_string()不起作用。

$layer = mysql_real_escape_string($_GET['layer']);
$query = "SELECT Category, COUNT(BUSNAME) 
FROM `".$layer."` GROUP BY Category"; <<-- this doesn't work.

因为mysql_real_escape_string没有转义反引号`

使用值确实有效

您需要通过mysql_real_escape_string()运行$_GET获得的每个(或使用PDO)
除此之外,您需要将每个值放入查询中,并使用单引号'括起来。

$value = mysql_real_escape_string($_GET['fieldname']);
$query = "SELECT * FROM test WHERE f1 = '".$value."'"; <<-- this works
                                        ^          ^

链接:
SQL注入攻击:How does the SQL injection from the "Bobby Tables" XKCD comic work?
PDO:mysqli or PDO - what are the pros and cons?

一旦找到修复您特定的SQL注入问题,就会立即更新。