我已经看到了这方面的一些变化,但主要是它们交换整行而不是该行中的一个值,而不是动态交换。
这是问题:
我有三行,每行包含以下单元格(id、title、content、display_order、visible)。id 是 auto_increment。标题和内容是手动输入的,可见是一个切换。display_order 在每行创建时设置并自动设置为最高整数并设置在堆栈的底部。
我这样设置,以便如果要手动删除这些记录中的任何一个,我可以自动重新排序堆栈(如果有 4 条记录,我删除 #2,新订单重置为 1,2,3 而不是 1 ,3,4)。
每行都有一组向上和向下箭头按钮,它们调用 move.php 并查询 id(id)、display_order(pos) 和 direction(dir)。
在 move.php 中,它使用条件来确定是向上还是向下移动记录,具体取决于方向变量的设置。
我需要编写什么 PHP 代码来获取这三个变量(id、pos、dir)并交换表格单元格 display_order 中的值:这是一个可视化表示
最初的:
id title pos
-----------------
1 slide1 1
2 slide2 2
3 slide3 3
在我单击记录 ID #3 的 UP 按钮后:
id title pos
-----------------
1 slide1 1
2 slide2 3
3 slide3 2
请注意,ID 和 POS 并不总是相同的整数
使用 davidethell 的建议,我创建了这个:
这是我创建的,但我得到的只是 echo $newPos 而不是回到 admin.php:
require ("connection.php");
$id = $_GET['id'];
$pos = $_GET['pos'];
$dir = $_GET['dir'];
if ($dir == 'up') {
$newPos = $pos-1;
} else {
$newPos = $pos+1;
}
$fromRow = "SELECT * FROM pages WHERE display_order = ".$pos."";
$toRow = "SELECT * FROM pages WHERE display_order = ".$newPos."";
$reord = mysqli_query($conn, "UPDATE pages SET display_order = " . $toRow['display_order'] . " WHERE id = " . $fromRow['id']."; UPDATE pages SET display_order = " . $fromRow['display_order'] . " WHERE id = " . $toRow['id']);
if ($reord){
header("Location: admin.php");
}else{
echo $newPos;
}
我遇到的问题是它只呼应 $newPos
更新代码:
require ("connection.php");
$fromArray = array();
$toArray = array();
$id = $_GET['id'];
$pos = $_GET['pos'];
$dir = $_GET['dir'];
if ($dir == 'up') {
$newPos = $pos-1;
} else {
$newPos = $pos+1;
}
$fromRow = mysql_query("SELECT * FROM pages WHERE display_order = ".$pos."");
$toRow = mysql_query("SELECT * FROM pages WHERE display_order = ".$newPos."");
$reord = mysqli_query($conn, "UPDATE pages SET display_order = " . $toRow['display_order'] . " WHERE id = " . $fromRow['id']);
$reord = mysqli_query($conn, "UPDATE pages SET display_order = " . $fromRow['display_order'] . " WHERE id = " . $toRow['id']);
if ($reord){
header("Location: admin.php");
}else{
echo $newPos;
}
结果:回显 $newPos 而不是返回到 admin.php