Autor Zpráva
Ikki
Profil
Zdravím, ač je mi trapné mít další dotaz takhle brzy, tak mi to nedá.
Našel jsem si na netu script na Drag&Drop pro table rows, to funguje poměrně skvěle, JS se podle hlášky vykoná (success) a všechno je fajn, jenže ID v databázi to nijak nemění. V JS je nějaká proměnná "position", no jenže absolutně nechápu kde se tam bere, podle čeho je stanovená nebo jak funguje.
Když jsem script zkusil s nastavenou hodnotou v PHP scriptu, tak to funguje.

HTML:
<table class="table table-new projectspage">
  <thead>
    <tr>
      <th>ID</th>
      <th width="45%">Název</th>
      <th>1</th>
      <th>2</th>
      <th>3</th>
    </tr>
  </thead>

  <tbody id="projects-tbl" class="row_position">
  <?php foreach($x as $y){ ?>
    <tr id="<?= $y->id; ?>">
      <td class="tbl-ttl">
        #<?= $y->id; ?>
      </td>
      <td>
        <?= $y->nazev; ?>
      </td>
      <td>
      </td>
      <td>
      </td>
      <td>
      </td>

    </tr>
     <?php } ?>
  </tbody>
</table>

JS:
<script type="text/javascript">
    $( ".row_position" ).sortable({
        delay: 150,
        stop: function() {
            var selectedData = new Array();
            $('.row_position>tr').each(function() {
                selectedData.push($(this).attr("id"));
            });
            updateOrder(selectedData);
        }
    });


    function updateOrder(data) {
        $.ajax({
            url:"ajax.php",
            type:'post',
            data:{position:data},
            success:function(){
                alert('your change successfully saved');
            }
        })
    }
</script>

PHP:
<?php 
require('konfigurace.php');
$position = $_POST['position'];

$i=1;
foreach($position as $k=>$v){
  $db = new Databaze();    
     $sql = "UPDATE table SET poradi = $i
                WHERE  id = $v";
                
      return $db->zpracovani($sql);

    $i++;
}
?>

Děkuju za každou radu a případně vysvětlení kde se vlastně ten position bere.
Tomášeek
Profil
Ikki:
Position je proměnná, kterou sis pojmenoval (vytvořil) na řádku 18 druhého scriptu. A její obsah je JavaScriptová proměnná data.

Pokud se nemění nic v databázi, tak je problém ve 3. kousku kódu. Začni tím, že si dumpneš promměnou $position, jestli to je fakt pole, protože s tím jako s polem pracuješ. Pka si vypiš SQL error, případně zapni vypisování chyb na serveru.

Divná mi přijde i logika inkrementace té proměnné $i, ale jak píši, nevím, co v té $position máš za hodnoty. Jde o základní edbugging, to se musíš naučit sám.
Ikki
Profil
Děkuji za vysvětlení té "position", ale kde se bere proměnná "data"?

Debugging tady není potřeba. Ze strany PHP to funguje "bezchybně". Zkoušel jsem to na ID 1, tedy jsem si změn nemohl všimnout, za to se omlouvám. No teď je tady problém ten, že POSITION se vždy rovná 1, tedy ať posunu cokoli kamkoli vždy se hodnota pořadí změní na 1 namísto ID předchozího řádku.
Tomášeek
Profil
Ikki:
Proměnnou data vytváří (vrací) ta funkce updateOrder na řádku 14.

Debugging tady není potřeba.
Ale je. On je debugging i to, že si zjistíš, odkud se proměnná bere a jakých hodnot nabývá :-)

U kódu, který není tvůj, se o těchto věcech dočteš v dokumentaci řešení, případně v neminifikovaném kódu.
Ikki
Profil
Už to vidím, díky.

V tom případě mi tenhle debugging nijak nepomohl.

Kód není minifikovaný a dokumentace kde ti popisují jak script využít se toho moc nedočteš. Bohužel využívám OOP a převést tenhle kód z MySQL řešení na bázi PHP5 bylo samo o sobě sranda. Všechno funguje, ale já potřebuji zjistit proč je tam ta hodnota 1. Jak debugovat Ajax?

$i=1;
nastavuje hodnotu 1, ale proč? Čím ji nahradit?
Radek9
Profil
Ikki:
Všechno funguje, ale já potřebuji zjistit proč je tam ta hodnota 1.
Takže update v DB proběhne? Ta hodnota 1 tam je proto, že se pořadí zřejmě počítá od 1. Přijde ti seřazené pole IDček a postupně jim přidáváš číselné pořadí. Nebo možná úplně nechápu problém, zkus to kdyžtak lépe popsat.

Jak debugovat Ajax?
V Chromu třeba F12 -> Network. Po odeslání ajaxu tam uvidíš nový požadavek. Pokud v PHP scriptu něco vypíšeš, tak se ti to po rozkliknutí toho požadavku ukáže.
Ikki
Profil
Radek9:
Ano, update v DB proběhne. Ať už přesunu cokoliv kamkoliv, tak se "pořadí" nastaví na 1 i přesto že mám nastavené ID v TR odkud by se ID mělo brát. V PHP kódu je nastavené $i = 1;, nemůže to být tím?

Ideální by bylo aby se to ID nahradilo za předchozí ID nebo zmenšilo/zvětšilo podle přesunu.

- Network ukazuje vykonaný požadavek po přesunu.
Radek9
Profil
Ikki:
tak se "pořadí" nastaví na 1
U všech záznamů?

V PHP kódu je nastavené $i = 1;, nemůže to být tím?
Na řádku 11 máš z nějakého důvodu return. Ten tam nemá co dělat a dost možná způsobuje ten problém. Na řádku 13 správně inkrementuješ $i.

Ideální by bylo aby se to ID nahradilo za předchozí ID nebo zmenšilo/zvětšilo podle přesunu.
Mícháš dvě věci dohromady. ID by se měnit nemělo. Správně by se mělo měnit pořadí.
Ikki
Profil
Vyřešil jsem to přepisem z jiného kódu a již to funguje. Je to zvláštní.
No teď mám jeden menší problém. Když to uchopím a pokusím se to přesunout, tak se chytne jen daný text i když jsem tbody nahradil za tr (v JS). Mám tam někde chybu?

<script>
  $(document).ready(function(){
    $( "tr" ).sortable();
});
  $( "tr" ).sortable({
    // Cancel the drag when selecting contenteditable items, buttons, or input boxes
    cancel: ":input,button,[contenteditable]",
    // Set it so rows can only be moved vertically
    axis: "y",
    // Triggered when the user has finished moving a row
    update: function (event, ui) {
        // sortable() - Creates an array of the elements based on the element's id. 
        // The element id must be a word separated by a hyphen, underscore, or equal sign. For example, <tr id='item-1'>
        var data = $(this).sortable('serialize');
        
        //alert(data); <- Uncomment this to see what data will be sent to the server
 
        // AJAX POST to server
        $.ajax({
            data: data,
            type: 'POST',
            url: 'ajax.php',
            success: function(response) {
          // alert(response); <- Uncomment this to see the server's response
      }
        });
    }
});
</script>

Původně tam namísto tr bylo tbody, jenže to přesouvalo celou plochu, tohle naopak jen text na který uchopím.
Tomášeek
Profil
Ikki:
Tenhle kus kódu vypada v pořádku.

Jinak pořad dokola. Udělej si nějaký dump do konzole, ať vidíš, kde s jakými daty pracujes.
Ikki
Profil
Tak mi prosím řekni, jak mám udělat DUMP na tuhle část kódu -
script>
  $(document).ready(function(){
    $( "tr" ).sortable();
});
  $( "tr" ).sortable({

JS není můj kamarád. A ač nechápu jak je možné že při nastavení na tag tr se přesouvá tag td, tak očividně to vyřeší DUMP.
Console.log mi nic zajímavého neporadil.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0