我有这个可排序的列表,使用户可以通过在他们想要的特定位置拖动它们来对事物进行排序。然后将项目拖动到的位置放入数据库,以便在下次用户登录时记住确切的位置。为此,我有:
$item_number = 0;
$rowsize = 12;
$itemArray = array();
$finalArray = array();
$results = 0;
for ($i = 0; $i < $rowsize; $i++) {
$stmt = $mysqli->stmt_init();
$stmt->prepare('SELECT z, name FROM house_room1 INNER JOIN objects ON house_room1.object_id=objects.object_id WHERE house_room1.ref_id = ?');
$stmt->bind_param('i', $i);
if ($stmt->execute()) {
$stmt->bind_result($z, $name);
while ($stmt->fetch()) {
$results = 1;
$itemArray['number'] = $item_number;
$itemArray['name'] = $name;
$itemArray['ref_id'] = $z;
array_push($finalArray, $itemArray);
}
}
else {
echo 'Something went terribly wrong' . $mysqli->error;
}
$stmt->close();
$item_number++;
}
if ($results == 1) {
aasort($finalArray, "ref_id");
foreach($finalArray as $arr) {
echo '<li id="item-' . $arr['number'] . '" class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>' . $arr['name'] . '
<img class="rotate" src="images/house/other/settings.jpg" onclick="rotateObject()"></li>';
}
}
// create a function for sorting
function aasort(&$array, $key)
{
$sorter = array();
$ret = array();
reset($array);
foreach($array as $ii => $va) {
$sorter[$ii] = $va[$key];
}
asort($sorter);
foreach($sorter as $ii => $va) {
$ret[$ii] = $array[$ii];
}
$array = $ret;
}
正如您所看到的,还有一个按钮可以按下,它必须通过使用ajax将一些数据发送到数据库。该函数名为rotateObject(),而ajax调用在此处:
function rotateObject()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("item").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","database/update_settings_rotate.php",true);
xmlhttp.send();
}
在调用之后,数据库必须从数据库中的代码中插入arr ['item_number']值:
require ('../includes/db_connect.php');
/* Register a prepared statement */
if ($stmt = $mysqli->prepare('UPDATE house_room1 SET rotation = ? WHERE ref_id = ?')) {
/* Bind parametres */
$stmt->bind_param('ii', $i, $item_number);
$i = 5;
$item_number = 3;
/* Execute the query */
$stmt->execute();
/* Close statement */
$stmt->close();
}
else {
/* Something went wrong */
echo 'Something went terribly wrong' . $mysqli->error;
}
现在,对于某些测试,item_numer设置为3。它可以正常工作,但是这个变量应该等于用户在排序列表上按下的元素。这是arr ['number']。问题是这个数组似乎不再包含任何值。我不知道如何解析该值,以便在数据库中更改正确的元素。嗯希望我把一切都弄清楚,随意提出更多信息,提前谢谢。
答案 0 :(得分:1)
根据我的理解,你需要发送被点击元素的item_number
为此,我们需要将item_number作为参数发送到AJAX调用中
对<img>
元素的以下修改允许您在rotateObject()
函数中获取item_number。
<img class="rotate" id="img_'.$arr['number'].'" src="images/house/other/settings.jpg" onclick="rotateObject(this)">
^^^^^^^^^^^^^^^^^^^^^^^^^^^ Modified here ^^^^ and here
现在rotateObject()
功能可以访问item_number并将其发送到服务器
在这里,我将item_number作为值发送到键"item_id"
-
function rotateObject(e)
{
//e is handler which contains info about the item clicked. From that we can obtain the image id.
//since the id are of the form img_123(some number), we need to extract only the number.
var img_id = e.id.split("_")[1];
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("item").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","database/update_settings_rotate.php",true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send("item_id="+encodeURIComponent(img_id));
}
所以在你的update_settings_rotate.php
中,获得了item_number -
if(isset($_POST['item_id'])){
$item_number = $_POST['item_id'];
//Rest of your code...
}
希望这有帮助。