Avatar billede hans01 Forsker
13. august 2016 - 03:31 Der er 18 kommentarer og
1 løsning

Hjælp til gemme drag and drop position i databasen

Jeg har lavet en Drag and drop side, hvor man kan flytte filer rundt, nu er det jeg gerne ville kunne gemme , de nye ændringer i databasen, så den bliver opdateret med de nye positioner..

Kan nogen hjælpe med det sidste spørgsmål?

Min javascript ser sådan ud:
<script>
  $( function() {
    $( "#sortable1, #sortable2" ).sortable({
        cursor: 'move',
          containment: 'document',

      connectWith: ".connectedSortable"
    }).disableSelection();
  } );
  </script>

OG PHP SCRIPTET SER SÅDEN UD:

<?php
require("connection.php");
$sql = "SELECT tbl_fysiske_servere.name, GROUP_CONCAT(tbl_virtuelle_servere.name) FROM tbl_fysiske_servere LEFT JOIN tbl_virtuelle_servere ON tbl_fysiske_servere.id = tbl_virtuelle_servere.fysiske_server_id GROUP BY tbl_fysiske_servere.name ORDER BY tbl_fysiske_servere.name";
if ($stmt = $mysqli->prepare($sql)) {
    /* Eksekver forespørgslen */
    $stmt->execute();
    /* Bind resultatet, og navngivning af output variable */
    $stmt->bind_result($fysisk_server_name, $virtuel_server_name);
    /* Hent rækker og udskriv data */

    while ($stmt->fetch()) {  ?>

      <?php
        echo "<br>";
        echo $fysisk_server_name; ?>

      <hr> <?php     
        $ar = explode(",", $virtuel_server_name);
        for($i=0, $lng=count($ar); $i<$lng; $i++){?>
        <li class="ui-state-default">
          <?php  echo "<br>";
            echo $ar[$i];?>
          </li>
        <?php               
        }
        echo "<br>";
    }
    $stmt->close();
} else {
    /* error */
    echo 'error: ' . $mysqli->error;
}
?>
Avatar billede arne_v Ekspert
13. august 2016 - 04:06 #1
Altsaa din JavaScript sender et request til et PHP script som laver en UPDATE SQL.
Avatar billede hans01 Forsker
13. august 2016 - 04:17 #2
Ja det er rigtigt..
Avatar billede arne_v Ekspert
13. august 2016 - 04:30 #3
Og hvad er det som du skal have hjaelp til?

SQL saetning?

PHP kode?

JavaScript kode?
Avatar billede hans01 Forsker
13. august 2016 - 04:33 #4
God morgen arne, jeg har selv bikset rundt med forskellige ting, uden held.. Så jeg skal sådan set bruge hjælpe til at få de nye positioner ind og opdatere mysql basen.
Avatar billede arne_v Ekspert
13. august 2016 - 04:47 #5
Stadig aften her.

:-)
Avatar billede arne_v Ekspert
13. august 2016 - 04:50 #6
Det er et ret aabent sporgsmaal saa.

JavaScript er ikke lige mig.

Men dit PHP script skal vel:
- hente position fra $_POST
- hente mysqli connection
- prepare SQL a la UPDATE tbl_fysiske_servere SET placering = ? WHERE id = ?
- execute
Avatar billede hans01 Forsker
13. august 2016 - 04:51 #7
Ja, det er sådan noget, det er ikke sikkert jeg skal bruge javascriptet, hvis det kan lavet udelukkende med php
Avatar billede olsensweb.dk Ekspert
13. august 2016 - 09:48 #8
svar på arne_v spørgsmål

>Men dit PHP script skal vel:
>- hente position fra $_POST
det er vel her du har problemet, du får ikke sendt dine data fra clienten til serveren

>- hente mysqli connection
der har du en extern fil der hedder connection.php
vist i http://www.computerworld.dk/eksperten/spm/1012113?k=8228270

>- prepare SQL a la UPDATE tbl_fysiske_servere SET placering = ? WHERE id = ?
hedder i dit tilfælde
UPDATE tbl_virtuelle_servere SET fysiske_server_id = ? WHERE id = ?

som vist i http://www.computerworld.dk/eksperten/spm/1012113?k=8228388
hvis vi arbejder med denne database http://www.computerworld.dk/eksperten/spm/1012113?k=8228275

-----------

>Ja, det er sådan noget, det er ikke sikkert jeg skal bruge javascriptet, hvis det kan lavet udelukkende med php
det kan laves med næsten rent PHP !!, men det er ikke optimalt, da du for hver virtuel server du flytter, skal trykke på en knap.
det var derfor jeg i http://www.computerworld.dk/eksperten/spm/1012113?k=8228388 forslog at anvende AJAX
Avatar billede hans01 Forsker
15. august 2016 - 03:12 #9
Nå, men nu har jeg rodet med det i et stykke tid dog uden at kunne få det til at virke.. jeg har ledt på google for at få hjælp, men jeg syntes ikke rigtigt jeg kan finde noget.. Jeg må sige jeg er ikke helt fortrolig med php og ajax. men jeg prøver dog..

Jeg er klar over jeg skal hente mysqli forbindelsen som ekstern fil connection.php

det har jeg her:

require("connection.php");
$sql = "UPDATE tbl_virtuelle_servere SET fysiske_server_id = ? WHERE id = ?";
?>

jeg er kommet frem til dette ajax script:

<script>
function update(){
 
    $.ajax({
        type:'POST',
        url:'connection.php',
        data:{data:data},
        success: function(){
            alert('Updated');
        }
    });
}
</script>

Hvad har jeg gjort forkert, lige nu er jeg lidt fustreret!
Avatar billede arne_v Ekspert
15. august 2016 - 06:11 #10
Det er vel ikke connection.php men den PHP side som laver UPDATE og bruger connection.php du skal kalde.

Og du skal jo mere end bare lave en streng med SQL. Du skal have den udfoert med de rigtige parametre - som skal overfoeres fra JavaScript.
Avatar billede hans01 Forsker
16. august 2016 - 03:54 #11
Jeg tror jeg nærmer mig, men intil videre virker det ikke..


Så har jeg ændret lidt i scriptet, jeg har oprettet en update.php side med dette indhold:

<?php require_once('Connections/test.php'); ?>
<?php
    $data  =  $_POST['data'];
 
    $sql = "UPDATE tbl_virtuelle_servere SET fysiske_server_id = ? WHERE id = ?";
?>

derefter er mit ajax script ændret til: function update(){
 
    $.ajax({
        type:'POST',
        url:'update.php',
        data:{data:data},
        success: function(){
            alert('Updated');
        }
    });
}
Avatar billede arne_v Ekspert
16. august 2016 - 04:07 #12
Indeholder $data hvad den skal?

Nej => fix det.

Ja => arbejd videre paa update.php: prepare $sql, bind params udfra $data, execute
Avatar billede hans01 Forsker
16. august 2016 - 04:34 #13
ok, så ved jeg hvor jeg skal klemme på.. takker på denne tidlige morgenstund:.
Avatar billede olsensweb.dk Ekspert
16. august 2016 - 05:56 #14
her er lidt du kan læse på, og prøve at forstå


hvis du kigger i OleBole's guide, kan du se en typisk skabelon for update
guiden hed(der) Prepared Statements under MySQLI - kom igang
og lå www.eksperten.dk/guide/1480

kan nu findes på http://archive.org/web/
indtast www.eksperten.dk/guide/1480 i søge feltet
vælg sidst gemte dato her april 13, 2016

citat

I et kald til metoden bind_param består første argument altid af en streng med ligeså mange tegn, som der er
efterfølgende parametre. I dette eksempel kun med ét: 'i' - men i det følgende eksempel med flere tegn. Disse tegn skal
modsvare de pågældende variablers type - og kan antage følgende værdier:
*) s: string
*) i: integer
*) d: double
*) b: blob (binære data, sendt som pakker)

...............


Eksempel på UPDATE fra form med method="post":

/* Opret et prepared statement */
if ($stmt = $mysqli->prepare('UPDATE `tabel` SET `fornavn`=? WHERE `id`=?')) {
/* Bind parametre */
$stmt->bind_param('si', $fornavn, $id);
/* Sæt værdier på parametrene */
$fornavn = $_POST['fornavn'];
$id = $_POST['id'];
/* Eksekver forespørgslen */
$stmt->execute();
/* Luk statement */
$stmt->close();
} else {
/* Der er opstået en fejl */
echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
}

/citat
Avatar billede hans01 Forsker
16. august 2016 - 06:16 #15
Jeg tror jeg skal prøve med et mindre udfordrende opgave næste gang, puha jeg syntes godt nok i er tålmodige..

Jeg roder lidt videre..
Avatar billede hans01 Forsker
18. august 2016 - 03:58 #16
efter jeg har rodet med skidtet noget tid nu, så syntes jeg forviringen er endeløs, jeg bliver nok nød til lidt mere hjælp med scriptet, ellers må jeg droppe at få den til det.. Jeg ved godt dette er hjælp til selvhjælp, men jeg roder noget rundt i blinde lige nu..

Meld lige ud om i kan hjælpe ellers lukker jeg sp..
Avatar billede olsensweb.dk Ekspert
18. august 2016 - 12:07 #17
som jeg ser det har du flere problemer:

  • du mangler basal viden om javascript, (herunder jquery), PHP, MySql,
  • du har ikke dit fysiske og virtuelle server id'er tilgængelig.
  • du får ikke fat i server teksten optimalt server id, på den vireuelle server du flytter, og trækker den til
  • du bruger kun én liste (ul), du skal mindst en liste du drag'er fra (de vireuelle servere), og én du dropper til (den fysiske server)


du bør læse OleBole's guide >Prepared Statements under MySQLI - kom igang< som omtalt i #14
du bør læse på denne https://jqueryui.com/droppable/
istedet for denne https://jqueryui.com/sortable/


>ellers må jeg droppe at få den til det..
tror jeg du skal, ellers skal andre lave det for dig.

som du skrev i #15
>Jeg tror jeg skal prøve med et mindre udfordrende opgave næste gang<
kort sagt du har gabt over for meget.

>Meld lige ud om i kan hjælpe ellers lukker jeg sp..
jeg tror/ved både Arne_v og jeg ville kunne løse opgaven, hvis vi brugte meget tid på det

et andet problem er at vi skal prøve at holde os inde for en kategori (her mysql), der sidder folk der ved noget/meget om mysql, men ikke nødvendigvis JS, og dit problem er klart over flere kategorier.
så kunne man have oprettet spm i flerer kategorier, (det måtte man ikke på det gamle Eksperten, tror heller ikke man må her på det nye)

det er en fordel ved http://www.udvikleren.dk/ der kan man give det flere tags og så vil det dukke op i flere kategorier, så nogle svare i tråden ud fra mysql, nogle php, og andre ud fra js.
men ja det er også hjælp til selvhjælp, ikke en bestillings central.
Avatar billede arne_v Ekspert
18. august 2016 - 20:13 #18
Jeg eg er meget enig. Det vil vaere meget svaert at faa den her koert igennem.
Avatar billede hans01 Forsker
19. august 2016 - 04:46 #19
Tak for rådene, og tipsene.. og ikke mindst tålmodigheden..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester