我是这样设计的:一个是数据库连接文件 db.conn.php 一个自定义函数文件 config.inc.php
db.conn.php:
<?php$db_host = 'localhost';$db_user = '*****';$db_password = '*******';$db_database = '******';$conn = new mysqli($db_host, $db_user, $db_password, $db_database);mysqli_query($conn, "set names 'utf8'"); if(mysqli_connect_errno()){die('数据库连接失败: ' . mysqli_connect_error());}$site_data = $conn->query("SELECT * FROM `dh_member_control` WHERE `id`=1");$site = mysqli_fetch_array($site_data);?>
config.inc.php:
function marrbase(){if(isset($_COOKIE["uname"]) && isset($_COOKIE["uid"])){global $mbase;global $conn;$mql = "select * from dh_member where `id`=" . $_COOKIE["uid"] . " and `mck`=1";$mbase_data = mysqli_query($conn, $mql);$mbase = mysqli_fetch_array($mbase_data);}else{exit();}}function login_log($muid){if (empty($muid)){exit();}else {global $conn;$lql = "INSERT INTO `dh_mllog` (`uid`,`ltime`,`lip`,`lptxt`) VALUES (". $muid .",'". date("Y-m-d H:i:s") ."','". getIPaddress() ."','". getIPS138(getIPaddress()) ."')" ;if (!mysqli_query($conn, $lql)){die(mysqli_error());exit();}}}function memberislogin($back = NULL){if(!isset($_COOKIE["uname"]) || !isset($_COOKIE["uid"])){echo "<script>alert('没有登录');window.location.href=\"/member/login.php?backurl=". $back ."\";</script>"; exit();}else {global $conn;$login_check = mysqli_query ("SELECT * FROM `dh_member` WHERE `id`=". $_COOKIE["uid"] ." AND `mck`=1");if(!mysqli_num_rows($login_check)){echo "<script>window.location.href=\"/member/login.php?backurl=". $back ."\"</script>"; exit();}}}.....等等自定义函数
在用户前台 引用进这些文件 然后进行输出交互等操作..
这里面我目前就觉着 我每次自定义个函数 都要 global $conn 来引用,有没有更好的办法来设计?
整个网页设计有没有更好的设计方式呢(CMS就不要推荐了)
求做过大项目的大神指点指点..
回复讨论(解决方案)
从 mysqli 继承一个 db 类
提供:
count 属性,用于返回影响的条数
fetch 方法,传入查询指令,返回一维数组
fetchall 方法,传入查询指令,返回二维数组
exec 方法,用于执行非查询类指令
基本就够了
学会封装代码,将mysql模块封装,其它需要用的地方,引用这个文件,直接调用封装的接口。
从 mysqli 继承一个 db 类
提供:
count 属性,用于返回影响的条数
fetch 方法,传入查询指令,返回一维数组
fetchall 方法,传入查询指令,返回二维数组
exec 方法,用于执行非查询类指令
基本就够了
谢谢两位大神啊 我之前看过有这样的资源 就是常用数据库操作类 是这样类似的用途么
fetchall 方法,传入查询指令,返回二维数组
exec 方法,用于执行非查询类指令
这两个 我有点不太理解 返回二维数组 ,一般在什么情况下会用到啊
用于执行非查询类指令
学会封装代码,将mysql模块封装,其它需要用的地方,引用这个文件,直接调用封装的接口。
谢谢啊,有没有实例代码啊?
你总是有查询出多条记录的情况吧?比如文章列表
最简单的写法
class db extends mysqli { function __construct() { parent::__construct('localhost', '用户名', '口令', '数据库'); $this->query('set names utf8'); } function fetch($sql) { $rs = $this->query($sql); return $rs->fetch_assoc(); } function fetchall($sql) { $rs = $this->query($sql); while($row = $rs->fetch_assoc()) { $res[] = $row; } return $res; } funetion exec($sql) { return $this->query($sql); }}
例
$p = new db;print_r($p->fetch("select * from a"));print_r($p->fetchall("select * from a"));
由于是继承 mysqli 类的,所以 mysqli 类的方法、属性都存在,不必一一抄写
你的 INSERT INTO `dh_mllog`.... 不就是非查询类的指令吗
你的 INSERT INTO `dh_mllog`.... 不就是非查询类的指令吗
你总是有查询出多条记录的情况吧?比如文章列表
最简单的写法
class db extends mysqli { function __construct() { parent::__construct('localhost', '用户名', '口令', '数据库'); $this->query('set names utf8'); } function fetch($sql) { $rs = $this->query($sql); return $rs->fetch_assoc(); } function fetchall($sql) { $rs = $this->query($sql); while($row = $rs->fetch_assoc()) { $res[] = $row; } return $res; } funetion exec($sql) { return $this->query($sql); }}
例
$p = new db;print_r($p->fetch("select * from a"));print_r($p->fetchall("select * from a"));
由于是继承 mysqli 类的,所以 mysqli 类的方法、属性都存在,不必一一抄写
谢谢版主
你的 INSERT INTO `dh_mllog`.... 不就是非查询类的指令吗
你总是有查询出多条记录的情况吧?比如文章列表
最简单的写法
class db extends mysqli { function __construct() { parent::__construct('localhost', '用户名', '口令', '数据库'); $this->query('set names utf8'); } function fetch($sql) { $rs = $this->query($sql); return $rs->fetch_assoc(); } function fetchall($sql) { $rs = $this->query($sql); while($row = $rs->fetch_assoc()) { $res[] = $row; } return $res; } funetion exec($sql) { return $this->query($sql); }}
例
$p = new db;print_r($p->fetch("select * from a"));print_r($p->fetchall("select * from a"));
由于是继承 mysqli 类的,所以 mysqli 类的方法、属性都存在,不必一一抄写
谢谢版主
弱弱的问下啊,下面这段,按你这样的类方法调用该怎么改写啊?
<?$hot_vip_data = $conn->query("SELECT * FROM dh_member WHERE `mck`=1 AND `photo`<>'/images/nan.png' AND `photo`<>'/images/nv.png' ORDER BY `mpower` DESC,`cktime` DESC LIMIT 1,12");$i=1;while ($hot_vip = mysqli_fetch_array($hot_vip_data)){if ($i % 6 == 0){$last=" class=\"last\"";}else{$last="";}$i++;?><li <? echo $last;?> onclick="javascript:location.href='/display/?<? echo $hot_vip["id"]?>.html'"><div class="vpc"><img src="/static/imghwm/default1.png" data-src="<? echo $hot_vip[" class="lazy" photo"]? alt="小白求指点:这样的代码结构怎么样优化呢?" >" /></div><div class="vpn"><? if (strlen($hot_vip["unick"])>4){echo cut_str($hot_vip["unick"],4);}else{echo $hot_vip["unick"];}if ($hot_vip["mpower"]==2){ echo " <a href=\"/vip/\" title=\"初遇会员\"><img src="/static/imghwm/default1.png" data-src="<? echo $hvip_data[" class="lazy" src=\"/images/v.png\" / alt="小白求指点:这样的代码结构怎么样优化呢?" ></a>";} ?></div><div class="vpt"><? $timediff = strtotime (date("y-m-d")) - strtotime($hot_vip["sri"]) ;echo intval($timediff/(86400*365)) . "岁 ";echo $hot_vip["add"];?></div></li><? }?>
这样改写么?
<?$hvip = new db;$hvip_data = $hvip->fetchall("SELECT * FROM dh_member WHERE `mck`=1 AND `photo`<>'/images/nan.png' AND `photo`<>'/images/nv.png' ORDER BY `mpower` DESC,`cktime` DESC LIMIT 1,12");$i=1;while ($hvip_data){if ($i % 6 == 0){$last = " class=\"last\"";}else{$last = "";}$i++;?><li <? echo $last;?> onclick="javascript:location.href='/display/?<? echo $hvip_data["id"]?>.html'"><div class="vpc"><img src="/static/imghwm/default1.png" data-src="<? echo $hvip_data[" class="lazy" photo"]? alt="小白求指点:这样的代码结构怎么样优化呢?" >" /></div><div class="vpn"><? if (strlen($hvip_data["unick"])>4){echo cut_str($hvip_data["unick"],4);}else{echo $hvip_data["unick"];}if ($hvip_data["mpower"]==2){ echo " <a href=\"/vip/\" title=\"初遇会员\"><img src="/static/imghwm/default1.png" data-src="<? echo $hvip_data[" class="lazy" src=\"/images/v.png\" / alt="小白求指点:这样的代码结构怎么样优化呢?" ></a>";} ?></div><div class="vpt"><? $timediff = strtotime (date("y-m-d")) - strtotime($hvip_data["sri"]) ;echo intval($timediff/(86400*365)) . "岁 ";echo $hvip_data["add"];?></div></li><? }?>
<?$hvip = new db;$sql = $hvip->fetchall("SELECT * FROM dh_member WHERE `mck`=1 AND `photo`<>'/images/nan.png' AND `photo`<>'/images/nv.png' ORDER BY `mpower` DESC,`cktime` DESC LIMIT 1,12";foreach($hvip->fetchall($sql) as $i=>$hvip_data) { if (($i+1) % 6 == 0) $last = " class=\"last\""; else $last = "";?><li <? echo $last;?> onclick="javascript:location.href='/display/?<? echo $hvip_data["id"]?>.html'"><div class="vpc"><img src="/static/imghwm/default1.png" data-src="<? echo $hvip_data[" class="lazy" photo"]? alt="小白求指点:这样的代码结构怎么样优化呢?" >" /></div><div class="vpn"><? if (strlen($hvip_data["unick"])>4){echo cut_str($hvip_data["unick"],4);}else{echo $hvip_data["unick"];}if ($hvip_data["mpower"]==2){ echo " <a href=\"/vip/\" title=\"初遇会员\"><img src="/static/imghwm/default1.png" data-src="<? echo $hvip_data[" class="lazy" src=\"/images/v.png\" / alt="小白求指点:这样的代码结构怎么样优化呢?" ></a>";} ?></div><div class="vpt"><? $timediff = strtotime (date("y-m-d")) - strtotime($hvip_data["sri"]) ;echo intval($timediff/(86400*365)) . "岁 ";echo $hvip_data["add"];?></div></li><? }?>
<?$hvip = new db;$sql = $hvip->fetchall("SELECT * FROM dh_member WHERE `mck`=1 AND `photo`<>'/images/nan.png' AND `photo`<>'/images/nv.png' ORDER BY `mpower` DESC,`cktime` DESC LIMIT 1,12";foreach($hvip->fetchall($sql) as $i=>$hvip_data) { if (($i+1) % 6 == 0) $last = " class=\"last\""; else $last = "";?><li <? echo $last;?> onclick="javascript:location.href='/display/?<? echo $hvip_data["id"]?>.html'"><div class="vpc"><img src="/static/imghwm/default1.png" data-src="<? echo $hvip_data[" class="lazy" photo"]? alt="小白求指点:这样的代码结构怎么样优化呢?" >" /></div><div class="vpn"><? if (strlen($hvip_data["unick"])>4){echo cut_str($hvip_data["unick"],4);}else{echo $hvip_data["unick"];}if ($hvip_data["mpower"]==2){ echo " <a href=\"/vip/\" title=\"初遇会员\"><img src=\"/images/v.png\" / alt="小白求指点:这样的代码结构怎么样优化呢?" ></a>";} ?></div><div class="vpt"><? $timediff = strtotime (date("y-m-d")) - strtotime($hvip_data["sri"]) ;echo intval($timediff/(86400*365)) . "岁 ";echo $hvip_data["add"];?></div></li><? }?>
谢谢版主

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInacookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionwwithSession_start()和stordoredAtain $ _session.2)

在PHP中,遍历会话数据可以通过以下步骤实现:1.使用session_start()启动会话。2.通过foreach循环遍历$_SESSION数组中的所有键值对。3.处理复杂数据结构时,使用is_array()或is_object()函数,并用print_r()输出详细信息。4.优化遍历时,可采用分页处理,避免一次性处理大量数据。这将帮助你在实际项目中更有效地管理和使用PHP会话数据。

会话通过服务器端的状态管理机制实现用户认证。1)会话创建并生成唯一ID,2)ID通过cookies传递,3)服务器存储并通过ID访问会话数据,4)实现用户认证和状态管理,提升应用安全性和用户体验。

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器