从数组解析值到数据库PHP

时间:2014-03-08 14:05:58

标签: php ajax arrays

我有这个可排序的列表,使用户可以通过在他们想要的特定位置拖动它们来对事物进行排序。然后将项目拖动到的位置放入数据库,以便在下次用户登录时记住确切的位置。为此,我有:

$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']。问题是这个数组似乎不再包含任何值。我不知道如何解析该值,以便在数据库中更改正确的元素。嗯希望我把一切都弄清楚,随意提出更多信息,提前谢谢。

1 个答案:

答案 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...
}

希望这有帮助。

相关问题