2013-11-22 3 views
1

Работает на системе перетаскивания, чтобы заказать элементы внутри joomla. Получение элементов из базы данных не является проблемой. Я делаю это с помощью следующего кодаJoomla 3 update dabatase

`<script type="text/javascript"> 
$(document).ready(function(){ 

    $(function() { 
     $("#contentLeft ul").sortable({ opacity: 0.6, cursor: 'move', update: function() { 
      var order = $(this).sortable("serialize") + '&action=updateRecordsListings'; 
      $.post("templates/sorteren/test/updateDB.php", order, function(theResponse){ 
       $("#contentRight").html(theResponse); 
      });                
     }         
     }); 
    }); 

}); 
</script> 

    <?php 
     $db = & JFactory::getDBO(); 
    $query = $db->getQuery(true) 
     ->select('a.title, a.id, a.sorteren') 
     ->from('#__k2_items as a') 
     ->where('a.created_by =' . $user->id . ' and a.trash = 0') 
     ->order('a.sorteren'); 
    $db->setQuery($query); 
    $items = $db->loadObjectList(); 
    foreach($items as $item) { 
     echo '<li id="recordsArray_' . $item->id . '">' . $item->title . ''; 

    }?>` 

Но проблема где-то в следующем коде, но я не могу понять, что проблема может быть

<?php defined('_JEXEC') or die; 
$db =& JFactory::getDBO(); 
$query = $db->getQuery(true); 


$action     = mysql_real_escape_string($_POST['action']); 
$updateRecordsArray  = $_POST['recordsArray']; 

if ($action == "updateRecordsListings"){ 

    $listingCounter = 1; 
    foreach ($updateRecordsArray as $recordIDValue) { 

$query = "UPDATE #__k2_items SET sorteren = " . $listingCounter . " WHERE id = " . $recordIDValue; 
        $db->setQuery($query); 
        $db->query(); 


     $listingCounter = $listingCounter + 1; 
    } 

    echo '<pre>'; 
    print_r($updateRecordsArray); 
    echo '</pre>'; 
    echo 'If you refresh the page, you will see that records will stay just as you modified.'; 
} 
?> 

Есть ли кто-то, кто может толкнуть меня в хорошем направлении? было бы здорово :)

UPDATE:

Я использую это вне Joomla и работает

<script type="text/javascript" src="jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="jquery-ui-1.7.1.custom.min.js"></script> 

<script type="text/javascript"> 
$(document).ready(function(){ 

    $(function() { 
     $("#contentLeft ul").sortable({ opacity: 0.6, cursor: 'move', update: function() { 
      var order = $(this).sortable("serialize") + '&action=updateRecordsListings'; 
      $.post("updateDB.php", order, function(theResponse){ 
       $("#contentRight").html(theResponse); 
      });                
     }         
     }); 
    }); 

}); 
</script> 



<div id="contentLeft"> 
      <ul> 

<?php 
       $query = "SELECT * FROM kxmkw_k2_items WHERE created_by = 1000 AND trash = 0 ORDER BY sorteren ASC"; 
       $result = mysql_query($query); 

       while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
       { 
       ?> 
        <li id="recordsArray_<?php echo $row['id']; ?>"><?php echo $row['title'] . "<br> " . $row['id']; ?></li> 
       <?php } ?> 
      </ul> 
     </div> 

внутри Joomla я использовать этот

<script type="text/javascript"> 
$(document).ready(function(){ 

    $(function() { 
     $("#contentLeft ul").sortable({ opacity: 0.6, cursor: 'move', update: function() { 
      var order = $(this).sortable("serialize") + '&action=updateRecordsListings'; 
      $.post("templates/sorteren/test/updateDB.php", order, function(theResponse){ 
       $("#contentRight").html(theResponse); 
      });                
     }         
     }); 
    }); 

}); 
</script> 
<?php 
     $db = & JFactory::getDBO(); 
    $query = $db->getQuery(true) 
     ->select('a.title, a.id, a.sorteren') 
     ->from('#__k2_items as a') 
     ->where('a.created_by =' . $user->id . ' and a.trash = 0') 
     ->order('a.sorteren'); 
    $db->setQuery($query); 
    $items = $db->loadObjectList(); 
    foreach($items as $item) { 
     echo '<li id="recordsArray_' . $item->id . '">' . $item->title . ''; 

    }?> 

Любая идея?

ответ

0

Для начала вы не используете стандарты кодирования Joomla для всего и для тех бит, которые вы есть, они старые стандарты.

Попробуйте использовать это:

<?php 
defined('_JEXEC') or die; 

$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 

$input = new JInput; 
$post = $input->getArray($_POST); 
$action = $post["action"]; 
$updateRecordsArray = $post["recordsArray"]; 

if ($action == "updateRecordsListings"){ 

    $listingCounter = 1; 
    foreach ($updateRecordsArray as $recordIDValue) { 

     $fields = array(
      $db->quoteName('sorteren') . '=' . $listingCounter 
     ); 
     $conditions = array(
      $db->quoteName('id') . ' = ' . $recordIDValue 
     ); 

     $query->update($db->quoteName('#__k2_items'))->set($fields)->where($conditions); 

     $db->setQuery($query); 
     $db->execute(); 

     $listingCounter = $listingCounter + 1; 
    } 

    echo '<pre>'; 
    print_r($updateRecordsArray); 
    echo '</pre>'; 
    echo 'If you refresh the page, you will see that records will stay just as you modified.'; 
} 
?> 

Как вы можете видеть, я сделал некоторые изменения:

  • Заменено $_POST с JInput методами.
  • Заменено $db->query() с $db->execute() как $db->query() устарело.
  • Используемые современные методы для обновления данных в базе данных
  • создал поля и условия, в которых вы хотите добавить больше в будущем.
  • Заменил функцию escape_string с помощью quoteName() в актуальном запросе, который позаботится об этом.

Для получения дополнительной информации о том, как вставить или обновить данные в Joomla, есть чтение этого:

http://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase

Update 2:

Попробуйте использовать это вместо того, чтобы:

$input = new JInput; 
$post = $input->getArray($_POST); 
$action = $post["action"]; 
$updateRecordsArray = $post["recordsArray"]; 

Я обновил полный запрос с помощью этих chan о.э.р..

Если это не сработает, попробуйте демпинг переменных, чтобы увидеть, если есть какие-либо ценности, как так:

var_dump($action); 
var_dump($updateRecordsArray); 

Надеется, что это помогает

+0

Лоддеру, Спасибо за быстрый ответ и объяснение, но это также не обновляет базу данных. – user3021953

+0

@ user3021953 - см. Мой обновленный ответ – Lodder

+0

Если я добавлю var_dump, он даст мне null null взамен. Вне Joomla он работает, но внутри joomla это идет не так. Еще несколько советов для меня? :) Приветствия \ – user3021953