php无限级分类(带数据库)(1/2)

 更新时间:2016年11月25日 17:33  点击:1939
这是一款利用递归写的php无限级分类代码,是一款树型的无限级分类实例,一的无限都是利用递归来实现的,也有更高级的写法,二叉树来实现无限分类了。
 代码如下 复制代码
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.111cn.net/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<head>
<style type="text/css教程">
<!--
.menu { color:#000000; font-size: 12px; cursor: hand;}
</style>
<script type="text/网页特效">
function showmenu(menuid)
 {
 if(menuid.style.display=="none")
 {
 menuid.style.display="";
 }
 else
 {
 menuid.style.display="none";
 }
 }
</script>
<title>电视树状目录</title>
</head>
<body>
<?php
 $globals["id"] =1;
 $jibie=1;
 $sql="select * from tvmenu where bid=0";
 $result=mysql教程_query($sql,$conn);
 
 if(mysql_num_rows($result)>0)
 treemenu($conn,$result,$jibie,$id);
 
 function treemenu($conn,$result,$jibie)  //进入函数循环
 {
 $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 tvmenu where bid=$menu[id]";
 $result_sub=mysql_query($sql,$conn);
 echo "<tr>";
  //如果该菜单项目有子菜单,则添加javascript onclick语句
  if(mysql_num_rows($result_sub)>0)
  {
  echo "<td width='20'><img src='+.gif' border='0'></td>";
  echo "<td class='menu' onclick='javascript:showmenu(menu".$globals["id"].");'>";
  }
  else
  {
  echo "<td width='20'><img src='-.gif' border='0'></td>";
  echo "<td class='menu'>";
  }
  if($menu[url]!="")
  echo "<a href='$menu[url]'>$menu[name]</a> ";
  else
  echo "<a href='#'>$menu[name]</a>   <a href='?b={$menu[id]}&tpye=add'> 添加</a>  <a href='?b={$menu[id]}&tpye=edit'> 编辑</a>  <a href='?b={$menu[id]}&action=del'> 删除</a>";
  echo "</td> </tr>";
  if(mysql_num_rows($result_sub)>0)
  {
  echo "<tr id=menu".$globals["id"]++." style='display:none'>";
  echo "<td width='20'> </td>";
  echo "<td>";
  //将级数加1
  $jibie++;
  treemenu($conn,$result_sub,$jibie);
  $jibie--;
  echo "</td></tr>";
  }
  //显示下一菜单
  }
  echo "</table>";
}
?>
<br />
<br />
<?php if ($tpye=="add") { ?>
<table width="551" border="0" cellpadding="0" cellspacing="1" bgcolor="#cccccc">
<form action="" method="post" name="form1">
  <tr>
    <td height="28" colspan="2" align="center" bgcolor="#ffffff">添加栏目</td>
  </tr>
  <tr>
    <td width="246" height="28" align="right" bgcolor="#ffffff">栏目名称:</td>
    <td width="302" height="28" bgcolor="#ffffff"><input name="name" type="text" id="name" /></td>
  </tr>
  <tr>
    <td height="28" align="right" bgcolor="#ffffff">所属分类:</td>
    <td height="28" bgcolor="#ffffff"><select name="bid">
<?php
   
 $sql="select * from tvmenu";
 $que=mysql_query($sql,$conn);
    while($rs=mysql_fetch_array($que)){
  if ($rs['id']==$b) {
     $selected="selected="selected"";
     }else{
     $selected="";
     }
 ?>
 
      <option value="<?php echo $rs["id"]; ?>" <?php echo $selected;?>><?php echo $rs["name"]; ?></option>
  <?php }?>
    </select>
    </td>
  </tr>
  <tr>
    <td height="28" colspan="2" align="center" bgcolor="#ffffff"><input type="submit" name="submit" value="提 交" /></td>
  </tr>
  </form>
</table>
<?php }?>

 

判断用户登陆主要分几个过程,第一步是用户登陆成功后把数据保存到session中,然后当用户访问需要登陆过的用户权限时就来判断session是否为空,如果不是就登录成功。下面来看个实例

 

<?php教程
session_start();

if(getconfig("chatroom_admin")==$_post["username"]&&getconfig("chatroom_adminpassword")==md5($_post["password"]))
{
 //登陆成功,注册session
 session_register("administrator");
 if(isset($_session["hack_num"]))
 {
  session_unregister("hack_num");
 }
 $_session["administrator"] = "yes";
 header("location:main.php");
 exit;

}
else
{
 if($_session["hack_num"]=="")
 {
  session_register("hack_num");
  $_session["hack_num"] = 1;
 }
 else
 {
  $_session["hack_num"] ++;

 }
 header("location:../notice.php?id=".admin_login_lost);
 exit;
}
?>

看到红色的没,那里就是用户登录成功把数据保存到session['hack_num']面。

<?php
//这个页面首先判断用户是否正确登录,如未登录,就转到登录页面。
session_start();
if((!$user_id)or(!$user_array[hack_num])or(!$user_array[hack_num])){
    header("location: login.php3");
}
?>

上面这段代码是用来判断session['hack_num']是否有值了,有就是登录成功了。

本站原创转载注明来源http://www.111cn.net/phper/php.html

本文章要讲的php 缓存技术是讲把数据生成一个临时缓存文件保存到硬盘,然后根据缓存文件设定的时间删除缓存文件再次生成新的缓存文件哦。
 代码如下 复制代码

$filename = 'cachefile.php';
$str ='echo "bb";';
if( is_file( $filename ) )
{
 $tmp = readcache( $filename ) ;
}
else
{
 createcache( $filename,$str );
}

//写缓存文件

function createcache($filename,$str)
{
 if( $str =='' ){ return false;}
 $fp = fopen($filename,"w+") or die('缓存目录不可能,请设置/www.111cn.net/cache为可写权限!');
 if( ! fwrite($fp,$str) )
 {
  echo '不能创建缓存文件!';
  exit;
 }
 fclose($fp);  
}

//读取缓存文件

function readcache($filename)
{
 $str = file_get_contents($filename);
 if( $str == "" )
 {
  echo "缓存文件读取失败!";
  exit;
 }
 return $str;
}

/*
本站原创文章,转载注明来源http://www.111cn.net/phper/php.html
*/

这是一款php 截取字符串函数哦,支持中文字符串哦,它可以截取html与中西文,等混合的内容,并且把html标签不算在字符截取之内,如果html标签没有闭合,程序将自动过滤多余的标签。
 代码如下 复制代码

function mysubstr( $str, $length ){
   
    $tagcnt = 0;
    $charcnt = 0;
    $tag = '';
    $maxlen = strlen( $str );
    $resultstr = '';
    $tagstack = array();

    for( $i = 0; $i < $length; $i++ ){
        if( $str[$i] == '<' ){

            $resultstr .= $str[$i];

            for( $j=$i; $str[$j]!='>'; $j++,$length++ ){
                $tag .= $str[$j];
            }
            $tagcnt++;
            $length++;
            $tag .= '>';
           
            //如果是开始标记,则入栈,如果是与之相对应的结束标记则出栈
            if( preg_match('/<([^/]+)?>/i', $tag, $r) ){
                echo '入栈:',htmlspecialchars($r[1]),'<br />';
                array_push($tagstack, $r[1]);
            }
            elseif( preg_match( '/'.$tagstack[count($tagstack)-1].'/', $tag ) ){
                echo '出栈:',htmlspecialchars($tagstack[count($tagstack)-1]),'<br />';
                array_pop( $tagstack );
            }

            $tag = '';
            continue;
        }

        $charcnt++;
        $resultstr .= $str[$i];
    }

   
    echo '<hr size=1>最后结果为:';

    //栈是空的直接返回
    if(empty($tagstack)){
        return $resultstr;
    }
    //否则去掉没有结束标记的开始标记
    else{
       
        while(!empty($tagstack)){

            $tag = array_pop($tagstack);

            $index = strrpos($resultstr, $tag);

            for($i = $index-1; $resultstr[$i] != '>'; $i++ ){
                $resultstr[$i] = '';
            }

            $resultstr[$i++] = '';
       
        }

        return $resultstr;
    }
   
}

$sttime = microtime(true);

$stmem = memory_get_usage();

$str = "a1<body>b2<p>c3<em>d4</em>e5</p>f6</body>g7h8";

echo '处理结果为:<br/><hr size=1>',htmlspecialchars( mysubstr( $str, 18 ) ),'<br />';

echo "内存使用情况:",(memory_get_usage()-$stmem),'<br />';

echo "算法运行时间(microtime):",(microtime(true)-$sttime),'<br/>';

//方法二

/

 代码如下 复制代码

**
 * 函数名 html_substr
 * 功能 从html串中截取指定长度的字串,html标记不计算在内
 * 参数
 *  $str 要截取的串
 *  $len 要截取的长度
 *  $mode 不匹配的标记的处理方式 0 删去(默认),1 补齐
 * 返回 截取到的串
 * 说明
 *  未考虑多字节字符,仅已字节做计数单位
 *  未考虑可单独存在的标记
 **/
function html_substr($str, $len, $mode=0) {
  $ar= preg_split('/(<!--.*-->|<[^>]*>)/s', $str, -1, preg_split_delim_capture);
  foreach($ar as $k => $v) {
    if($v{0} != '<') {
      $len = $len - strlen($v);
      if($len < 0) $ar[$k] = substr($v, 0, $len);
    }else $ar[$k] = strtolower($v);
    if($len <= 0) break;
  }
  $ar = array_slice($ar, 0, $k+1);
  $len = count($ar);
  foreach($ar as $k=>$v) {
    if($v{0} == '<' && $v[1] != '/') {
      $ch = str_replace('<', '</', $v);
      for($i=$k+1; $i<$len && $ar[$i]!=$ch; $i++);
      if($i == $len)
        if($mode)
          $ar[$len] = $ch . $ar[$len];
        else
          $ar[$k] = '';
    }
  }
  return join('', $ar);
}
$str = "123<em>abc</em>456<em>def</em>789";

echo '<xmp>';
echo html_substr($str, 5) . php_eol;
echo html_substr($str, 5, 1);

 

/*
create table `member` (
  `member_account` varchar(25) collate utf8_unicode_ci not null,
  `member_password` varchar(32) collate utf8_unicode_ci not null,
  `member_name` varchar(20) collate utf8_unicode_ci not null,
  `sex` varchar(1) collate utf8_unicode_ci not null,
  `schoolnumber` varchar(10) collate utf8_unicode_ci not null,
  `phonenumber` varchar(15) collate utf8_unicode_ci not null,
  `email` varchar(50) collate utf8_unicode_ci not null,
  unique key `member_account` (`member_account`)
) engine=innodb default charset=utf8 collate=utf8_unicode_ci;

*/
?>

 代码如下 复制代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>会员注册</title>
</head>

<body>
<div align="center"><font face="楷书" size="+3">会员注册</font></div>
<form id="form1" name="form1" method="get" action="register_get.php">
  <table width="695" border="1" align="center" cellpadding="1" cellspacing="1">
    <tr>
      <td width="167">账号:(account)</td>
      <td width="416"><input name="m_acct" type="text" id="m_acct" value="<?php if(!empty($_get['m_acct']))
echo $_get['m_acct'];
?>" maxlength="20" />
  <font color="#ff0000"> *</font>(由20个数字或字母组成)</td>
    </tr>
    <tr>
      <td>密码:(password)</td>
      <td><input name="m_pw" type="password" id="m_pw" maxlength="20" />
      <font color="#ff0000"> *</font>(由20个数字或字母组成)</td>
    </tr>
    <tr>
      <td>确认密码(password)</td>
      <td><input type="password" name="pass" id="pass" />
      <font color="#ff0000"> *</font>(再次输入密码)</td>
    </tr>
    <tr>
      <td>真实姓名:(name)</td>
      <td><input type="text" name="m_name" id="m_name" value="<?php if(!empty($_get['m_name']))
echo $_get['m_name'];
?>" /></td>
    </tr>
    <tr>
      <td>性别:(sex)</td>
      <td align="left"><p>
        <label>
          <input name="m_sex" type="radio" id="radiogroup1_0" value="男" />
          男</label>
        <label>
          <input type="radio" name="m_sex" value="女" id="radiogroup1_1" />
          女&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000"> *</font></label>
</td>
    </tr>
    <tr>
      <td>学号:(school number)</td>
      <td><input type="text" name="m_snum" id="m_snum" value="<?php if(!empty($_get['m_snum']))
echo $_get['m_snum'];
?>" /></td>
    </tr>
    <tr>
      <td>手机号码:(mobil phone)</td>
      <td><input type="text" name="m_pnum" id="m_pnum" value="<?php if(!empty($_get['m_pnum']))
echo $_get['m_pnum'];
?>"/></td>
    </tr>
    <tr>
      <td>电子邮箱:(email)</td>
      <td><input type="text" name="m_email" id="m_email" value="<?php if(!empty($_get['m_email']))
echo $_get['m_email'];
?>"/></td>
    </tr>
    <tr>
      <td colspan="2" align="center"><input type="reset" name="button" id="button" value="重置表单" />
      <input type="submit" name="button2" id="button2" value="确定注册" /></td>
    </tr>
  </table>
</form></p>
<p align="center">以上打"*"为必填项</p>
</body>
</html>

register_get.php文件
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>提示</title>
</head>
<?php
if(empty($_get['m_acct']))
echo "账号不能为空!<a href='register.php?m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</a></p>";
else if(empty($_get['m_pw']))
echo "密码不能为空!<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."&m_email=".$_get['m_email']."'>返回重新注册。</a></p>";
else if($_get['m_pw']!=$_get['pass'])
echo "两次输入的密码不一样,<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</p>";
else if(empty($_get['m_sex']))
echo "未输入性别,<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</a></p>";
else if(!empty($_get['m_snum'])&&!is_numeric($_get['m_snum']))
echo "学号必须全为数字,<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</a></p>";
else if(!empty($_get['m_pnum'])&&!is_numeric($_get['m_pnum']))
echo "手机号码必须全为数字,<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."'>返回重新注册。</a></p>";
else if(!empty($_get['m_email'])&&!ereg("([0-9a-za-z]+)([@])([0-9a-za-z]+)(.)([0-9a-za-z]+)",$_get['m_email']))
echo "邮箱输入不合法!<a href='register.php?m_acct=".$_get['m_acct']."&m_name=".$_get['m_name']."&m_sex=".$_get['m_sex']."&m_snum=".$_get['m_snum']."&m_pnum=".$_get['m_pnum']."'>返回重新注册。</a></p>";
else
{
require_once ('inc.php');
$_session['pass']="ok";
$_session['member']=$_get['m_acct'];
$link = getdblink();
$sql="insert into member values('".$_get['m_acct']."','".md5($_get['m_pw'])."','".$_get['m_name']."','".$_get['m_sex']."','".$_get['m_snum']."','".$_get['m_pnum']."','".$_get['m_email']."')";
$result=mysql教程_query($sql)or die(mysql_error());
if($result>0)
echo "".$_get['m_name'].",恭喜你注册成功,<a href='member_index.php'>马上进入主页面...</p>";
else
{
 $_session['pass']="no pass";
 echo "注册失败!<a href-'register.php'>重新注册。</a></p>";
 mysql_close();
}
}
?>
<body>
</body>
</html>

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • PHP实现递归无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。 递归,简单的说就是一段程序代码的重复调用,当把...2015-10-23
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • ecshop商品无限级分类代码

    ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
  • Linux 下使用shell脚本定时维护数据库的案例

    这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • PHP连接公司内部服务器的MYSQL数据库的简单实例

    “主机,用户名,密码”得到连接、“数据库,sql,连接”得到结果,最后是结果的处理显示。当然,数据库连接是扩展库为我们完成的,我们能做的仅仅是处理结果而已。...2013-09-29
  • C#连接加密的Sqlite数据库的方法

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25