PHP定义列表顺序

设置数据库

由于数据通常* *存储在数据库中,我们会将我们的自定义列表顺序存储在SQL表列。 我使用MySQL仅仅因为我使用,但据我所知,所有的查询都应该使用的SQL数据库。

首先,让我们来建立一个表。 创建一个名为“信息”的表和一个叫“作用”的列类型int和一个名叫“名称”列类型为varchar(10)。 这是一个查询:

创建表“信息”(“作用”INT非空,“名字”VARCHAR(10)非空
)

这是另一个查询来填充它与一些数据:

插入
“废话”(“作用”,“名字”) 
值
(' 1 ',“拉里”),(' 2 ',“花”),(“3”,“萌”),(“4”,“玛丽”),(“5”,“简”);

注意:usort列中的值必须是唯一的为了这段代码的工作。 然而,不让这个主键列,auto_increment或独特。 如果你这样做,互换的作用值的查询会大喊大叫,你有重复的条目。

但没关系,因为作用的目的并不是替换行id,你可能会,也可能已经是独一无二的,auto_incremented等等……

这个计划

好现在我们已经与一些数据表设置,让我们来谈谈脚本。 这个示例脚本的目的是显示的数据表。 我们将列名称链接,这样我们可以通过列名排序。

更重要的是,我们将创建“向上”和“向下的箭头对于每一行,这样我们就可以订单列表中我们如何想。 当你点击一个向上或向下的箭头,该脚本将查询发送到数据库交换数据表中的行高于或低于行。

整个代码的方式- - - - - - - - - - - >

的代码

这是整个脚本。 接下来的几页将打破下来一点点。

< ?php
/ /连接数据库
康涅狄格州美元=首先(“localhost”,“dbusername”,“dbpassword”)或死(mysql_error());
$ db=mysql_select_db(“dbname”,康涅狄格州美元)或死(mysql_error());/ /如果一个箭头链接被点击了……如果($ _GET[“dir”]& &$ _GET[“id”]){/ /得到增值供应商更容易处理
dir美元=$ _GET[“dir”];/ /扮演int和sql注入预防开关两美元的id
$ id=(int)$ _GET[“id”];/ /决定行我们交换基于美元dir开关(dir美元){/ /如果我们上升,交换1小于id情况下“了”:/ /确保上面一行来交换
美元掉期=($ id>1)?$ id- - -:1;打破;/ /如果我们掉下来,掉期是1比id情况下“下来”:/ /找出行是最高的
美元的sql=“SELECT count(*)从信息”;
美元的结果=mysql_query(美元的sql,康涅狄格州美元)或死(mysql_error());
$ r=mysql_fetch_row(美元的结果);
美元最大=$ r[0];/ /确保下面一行来交换
美元掉期=($ id<美元最大)?$ id+ +:美元最大;打破;/ /默认值(sql注入预防dir美元)默认的:
美元掉期=$ id;}/ /开关dir美元结束/ /交换行。 基本思想是使id = $交换和交换美元= $ id
美元的sql=“更新信息设置的作用=情况下作用当$ id然后交换,交换美元$ id的作用在结束(id、交换美元)”;
美元的结果=mysql_query(美元的sql,康涅狄格州美元)或死(mysql_error());}/ /如果得到终结/ /设置和一个默认顺序(sql感染预防sortby美元)
sortby美元=($ _GET[“sortby”]= =“名字”)?$ _GET[“sortby”]:“作用”;/ /将信息从表中
美元的sql=“选择的作用,名字来源于信息秩序sortby美元”;
美元的结果=mysql_query(美元的sql,康涅狄格州美元)或死(mysql_error());/ /显示表
回声“表边界= ' 1 ' > <”;
回声“< tr >”;/ /列名称链接,sortby
回声“< td > < a href = ' { $ _SERVER[' PHP_SELF ']} ? sortby = usort ' > usort < / > < / td >”;
回声“< td > < a href = ' { $ _SERVER[' PHP_SELF ']} ? sortby =名字' > < / > < / td >”;
回声" < / tr > ";/ /显示一行数据而($ r=作用是(美元的结果)){
回声“< tr >”;/ /链接改变定制订单,传递方向和自定义id排序
回声“< td对齐=“中心”> < a href = ' { $ _SERVER[' PHP_SELF ']} ? dir = up&id = { $ r(的作用)} > / \ < / >”;
回声“< a href = { $ _SERVER[' PHP_SELF ']} ? dir = down&id = { $ r(的作用)}’> \ / < / > < / td >”;
回声“< td > { $ r(“名字”)} < / td > ";
回声" < / tr > ";}/ / $ r时结束
回声" < /表> ";/ /显示表? >

连接到数据库

< ?php
/ /连接数据库
康涅狄格州美元=首先(“localhost”,“dbusername”,“dbpassword”)或死(mysql_error());
$ db=mysql_select_db(“dbname”,康涅狄格州美元)或死(mysql_error());

首先要做的是连接到数据库。 这里没有什么特别的。 在适当的地方插入你自己的信息。

如果一个箭头点击…

/ /如果一个箭头链接被点击了……如果($ _GET[“dir”]& &$ _GET[“id”]){/ /得到增值供应商更容易处理
dir美元=$ _GET[“dir”];/ /扮演int和sql注入预防开关两美元的id
$ id=(int)$ _GET[“id”];

好,接下来,我们要检查是否一个箭头点击。 我们通过检查两个变量。 一个变量(“dir”)会告诉我们哪个方向交换(向上或向下)、数量和其他变量(id)会告诉我们数量是多少。 我们将它们分配给“常规”变量更容易编码。

$ id是int类型。我们这样做的原因是为了防止人们进入一半数字或数字以外的东西。 这样做是为了防止可能的sql注入攻击这个变量(你总是安全意识)。

向上或向下

开关(dir美元){/ /如果我们上升,交换1小于id情况下“了”:/ /确保上面一行来交换
美元掉期=($ id>1)?$ id- - -:1;打破;

美元dir告诉我们我们想要交换:向上或向下。 例如,如果我们有一个列表,1,2,3,交换将改变列表2,1,3。 交换将改变列表1,3,2。

列表交换交换了
1 2 1
2 1 3
3 3 2

我们将使用一个开关来决定做什么如果$ dir向上或向下。 如果$ dir = = '了'然后我们将使用三元运算符确保当前行大于1,所以有高于行交换。 如果有,那么我们将分配前一行交换美元减去1。 如果没有行高于当前行(它已经在列表的顶部),我们分配1。

我们怎么知道行上面1小于当前号码吗? 的作用,因为所有的值应该是唯一的。 5行= = 5数字,1 - 5。 总是会有1、2、3、4、5。 订购的作用永远是1 - 5(或者无论有多少你有)。 你必须计划,或者它不会工作。

好吧,我收回那句话。 它不会工作,这段代码的例子。 你可以的,做一个查询发现上面或下面会是什么,不管它是1,但我们不会把所有复杂。

沿着…… 列表

/ /如果我们掉下来,掉期是1比id情况下“下来”:/ /找出行是最高的
美元的sql=“SELECT count(*)从信息”;
美元的结果=mysql_query(美元的sql,康涅狄格州美元)或死(mysql_error());
$ r=mysql_fetch_row(美元的结果);
美元最大=$ r[0];/ /确保下面一行来交换
美元掉期=($ id<美元最大)?$ id+ +:美元最大;打破;

交换了一排同样的原则作为交换行,除了我们,下降,而不是上升。 首先,我们做一个选择count(*)找出有多少行。 是的,这将是每个页面加载完成。 是的,我们可以将其保存在一个cookie或会话var或通过url(虽然我拒绝这个var的GET方法无论如何,出于安全考虑),但为了简化,我们将选择每次。

获取结果,把它放在一个var马克斯美元。 使用三元检查如果有交换到一行。 如果有,那么当前行加1的id。如果不是,然后分配美元max。

/ /默认值(sql注入预防dir美元)默认的:
美元掉期=$ id;}/ /开关dir美元结束

默认的美元互换将$ id。 这是为了以防有人决定进入dir = somethingotherthanupordown的url。

2卡蒙特…

/ /交换行。 基本思想是使id = $交换和交换美元= $ id
美元的sql=“更新信息设置的作用=情况下作用当$ id然后交换,交换美元$ id的作用在结束(id、交换美元)”;
美元的结果=mysql_query(美元的sql,康涅狄格州美元)或死(mysql_error());}/ /如果得到终结

现在我们知道这两个数我们要交换,我们将运行查询交换他们的数据库。 基本查询说:

在每个数字的列表(…),我们将运行一个条件。 如果它等于一件事,我们要分配这另一件事。 如果这是另一件事,我们要分配这一件事

或一个更“php”的说法:

foreach(列表行美元){
如果(行= = x美元){
行= y美元;
} elseif($行= = $ y){
行美元= $ x;
}

你: “现在等待一分钟… 数据库怎么做呢? 我理解做更新表设置列列= $ y = $ x,但你不能只是转身做同样的事情第二行,因为第一行已经更新! 没有搜索数量! wtf ? ?”

我: 魔法。 你听说过我:魔法。 为真实的。 好,真正发生的是,在内部数据库将创建一个临时变量来执行执行。 第一行被更新,它等于什么。 第二行是更新基于临时变量。 然而,时间之间的第一行被更新和第二行被更新,行都包含相同的信息,因此随之而来的复制错误消息如果你试图索引列一些独特的味道。

排序的数据

/ /设置和一个默认顺序(sql感染预防sortby美元)
sortby美元=($ _GET[“sortby”]= =“名字”)?$ _GET[“sortby”]:“作用”;/ /将信息从表中
美元的sql=“选择的作用,名字来源于信息秩序sortby美元”;
美元的结果=mysql_query(美元的sql,康涅狄格州美元)或死(mysql_error());

很直接。 我们希望能够单击列名排序的数据列,所以分配一个列名sortby查询中使用美元。 因为我们只有两列排序,我们使用另一个三元分配一个或另一个。 这将确保sortby美元只会“名称”或“作用”和别的东西不像另一个sql注入的尝试。 然后我们运行查询的数据显示。

显示信息

/ /显示表
回声“表边界= ' 1 ' > <”;
回声“< tr >”;/ /列名称链接,sortby
回声“< td > < a href = ' { $ _SERVER[' PHP_SELF ']} ? sortby = usort ' > usort < / > < / td >”;
回声“< td > < a href = ' { $ _SERVER[' PHP_SELF ']} ? sortby =名字' > < / > < / td >”;
回声" < / tr > ";

接下来,我们将开始一个html表,第一行的列名。 我们让他们链接,通过url传递列名,所以脚本知道列顺序的结果,你应该点击。

/ /显示一行数据而($ r=作用是(美元的结果)){
回声“< tr >”;/ /链接改变定制订单,传递方向和自定义id排序
回声“< td对齐=“中心”> < a href = ' { $ _SERVER[' PHP_SELF ']} ? dir = up&id = { $ r(的作用)} > / \ < / >”;
回声“< a href = { $ _SERVER[' PHP_SELF ']} ? dir = down&id = { $ r(的作用)}’> \ / < / > < / td >”;
回声“< td > { $ r(“名字”)} < / td > ";
回声" < / tr > ";}/ / $ r时结束
回声" < /表> ";/ /显示表? >

最后,我们使用while循环遍历和显示结果从数据查询。 我们做一些箭头和向下箭头链接,通过交换哪个方向,以及数量的作用这一行,所以脚本知道行交换,应该单击其中一个链接。 名字是显示为纯文本,因为我们什么都没做。 关闭循环后的表,做完了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值