要用javascript调用php获取数据库接口,是一个很常见的前后端交互操作
章贡网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。创新互联公司于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
通过javascript发送http请求php的API接口,php连接数据库并查询结果,最后返回出来
这样javascript就能获取到数据库的数据
Node.JS 服务器可以在 后端 连接mysql,这时的情况和php是一样的。
我从未见过前端JS直接连接mysql的,原因是:
(1)浏览器内置的javascript 引擎一般只支持websocket,即基于http连接的套接字高层协议,而不是真正的socket,因此除非服务器端也开启websocket服务并拆开套接字转发到mysql,否则无法代理连接
(2)我见过的绝大多数mysql 服务器都工作在服务器环境下的一个虚拟子网,换句话说,直接的远程3306端口是拒绝连接的,这样可以隔绝端口直接攻击
如果前段js直接可以连接后端服务器mysql的端口,那么就不叫B/S结构了,而是C/S结构(比如传统的windows桌面程序),安全上有很多问题,所以大多数浏览器也不支持这个操作。
其实不用再前端提交IP的,
用户提交数据给后端处理的时候,就可以获取到用户的IP地址的
$ip = GetyonghuIP(); 这样你就能获取到用户IP地址,
然后 插入数据库中即可,
压根不用前端提交的。
html
head
title智能递归菜单-读取数据库/title
style
TD {
FONT-FAMILY: "Verdana", "宋体"; FONT-SIZE: 12px; LINE-HEIGHT: 130%; letter-spacing:1px
}
A:link {
COLOR: #990000; FONT-FAMILY: "Verdana", "宋体"; FONT-SIZE: 12px; TEXT-DECORATION: none; letter-spacing:1px
}
A:visited {
COLOR: #990000; FONT-FAMILY: "Verdana", "宋体"; FONT-SIZE: 12px; TEXT-DECORATION: none; letter-spacing:1px
}
A:active {
COLOR: #990000; FONT-FAMILY: "Verdana", "宋体"; FONT-SIZE: 12px; TEXT-DECORATION: none; letter-spacing:1px
}
A:hover {
COLOR: #ff0000; FONT-FAMILY: "Verdana", "宋体"; FONT-SIZE: 12px; TEXT-DECORATION: underline; letter-spacing:1px
}
.Menu {
COLOR:#000000; FONT-FAMILY: "Verdana", "宋体"; FONT-SIZE: 12px; CURSOR: hand
}
/style
script language=javascript
function ShowMenu(MenuID)
{
if(MenuID.style.display=="none")
{
MenuID.style.display="";
}
else
{
MenuID.style.display="none";
}
}
/script
/head
body
?php
//基本变量设置
$GLOBALS["ID"] =1; //用来跟踪下拉菜单的ID号
$layer=1; //用来跟踪当前菜单的级数
//连接数据库
$Con=mysql_connect("localhost","root","123456");
mysql_select_db("menu");
//提取一级菜单
$sql="select * from menu where parent_id=0";
$result=mysql_query($sql,$Con);
//如果一级菜单存在则开始菜单的显示
if(mysql_num_rows($result)0) ShowTreeMenu($Con,$result,$layer,$ID);
//=============================================
//显示树型菜单函数 ShowTreeMenu($con,$result,$layer)
//$con:数据库连接
//$result:需要显示的菜单记录集
//layer:需要显示的菜单的级数
//=============================================
function ShowTreeMenu($Con,$result,$layer)
{
//取得需要显示的菜单的项目数
$numrows=mysql_num_rows($result);
//开始显示菜单,每个子菜单都用一个表格来表示
echo "table cellpadding='0' cellspacing='0' border='0'";
for($rows=0;$rows$numrows;$rows++)
{
//将当前菜单项目的内容导入数组
$menu=mysql_fetch_array($result);
//提取菜单项目的子菜单记录集
$sql="select * from menu where parent_id=$menu[id]";
$result_sub=mysql_query($sql,$Con);
echo "tr";
//如果该菜单项目有子菜单,则添加JavaScript onClick语句
if(mysql_num_rows($result_sub)0)
{
echo "td width='20'img src='tree_expand.gif' border='0'/td";
echo "td class='Menu' onClick='javascript:ShowMenu(Menu".$GLOBALS["ID"].");'";
}
else
{
echo "td width='20'img src='tree_collapse.gif' border='0'/td";
echo "td class='Menu'";
}
//如果该菜单项目没有子菜单,并指定了超级连接地址,则指定为超级连接,
//否则只显示菜单名称
if($menu[url]!="")
echo "a href='$menu[url]'$menu[name]/a";
else
echo $menu[name];
echo "
/td
/tr
";
//如果该菜单项目有子菜单,则显示子菜单
if(mysql_num_rows($result_sub)0)
{
//指定该子菜单的ID和style,以便和onClick语句相对应
echo "tr id=Menu".$GLOBALS["ID"]++." style='display:none'";
echo "td width='20' /td";
echo "td";
//将级数加1
$layer++;
//递归调用ShowTreeMenu()函数,生成子菜单
ShowTreeMenu($Con,$result_sub,$layer);
//子菜单处理完成,返回到递归的上一层,将级数减1
$layer--;
echo "/td/tr";
}
//继续显示下一个菜单项目
}
echo "/table";
}
?
?php
$id = 1;
function test()
{
global $id;
unset($id);
}
test();
echo"font class=menu".($id)."/font"; // 在 PHP 4 中这里会打印出 1
?
?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo "font class=menu".$b."/font";
?
/body
/html
呵呵,看咋样,是递归出来的......