Avatar billede Calle5463 Forsker
03. maj 2012 - 13:24 Der er 11 kommentarer og
1 løsning

Data for checkboxe via AJAX / JS

Jeg har lidt AJAX venligst tilvirket af ronols. Det skubber data over i mine fomularfelter.

Nu har jeg brug for, at få skubbet nogle tjekmarks over, så mine checkboxe viser værdierne hentet fra mysql-db. En af boxene ser sådan ud i min formular (jette),den her er der seks af:

echo "<td align='right'>Opgave 1: <input type='checkbox' name='Opgave[]' value='1' $chked[1] ></td>";


Kan jeg gøre noget i den her retning i min js-fil / hvordan skal det se ud for at være helt rigtigt (glem // - de skal sfl. fjernes når det slippes løs)?


            // var lgd = values.length;      // skal de øvrige variable (maxlgd, bin, t, i, nr) defineres?
            //
            // maxlgd = 6;
            // bin = str_pad(decbin(values[0]['sOpgave']), maxlgd, "0", STR_PAD_LEFT);
            // lgd = strlen(bin);
            // t=lgd-1;
            // for(i=t; i >= 0; i--){  // Køres baglæns men vises forlæns
            //     nr=lgd-i;
            //    if(bin[i] == 1) {document.jette.$chked[nr].value = "checked"; } else { document.jette.$chked[nr].value=""; }
            //}   


NB: values[0]['sOpgave'] kommer fra: $info[]=array( "sOpgave"=>$row['sOpgave']); som er resultatet af læsning af mysql-tabellen.
Avatar billede Calle5463 Forsker
04. maj 2012 - 12:14 #1
Det skal vist se mere ud som det her:

var x = values[0]['sOpgave'];
x = parseInt(x);
var bin = x.toString(6);
for(i = 5; i >= 0; i--){  // Køres baglæns men vises forlæns
var nr = 6 - i;
if(bin[i] == 1) {document.jette.Opgave[nr].checked = true; } else { document.jette.Opgave[nr].checked = false; }
}

Den kan dog ikke lide if-sætningen!!!
Avatar billede Calle5463 Forsker
05. maj 2012 - 09:51 #2
Rettelse: Boxene ser sådan ud i min formular (jette),dem er der seks af:

<?PHP
echo "<td align='right'>Opgave1: <input type='checkbox' name='Opgave[]' value='1' ></td>";
?>

Det er tilsyneladende de her den ikke kan lide:{document.jette.Opgave[nr].checked = checked;}
{document.jette.Opgave[nr].checked = unchecked;}
Avatar billede Calle5463 Forsker
05. maj 2012 - 11:39 #3
Yyyyrk!!!: Det her bliver ikke til binære værdier - man kan da heller aldrig stole på noget man finder på nettet):

var x = values[0]['sOpgave'];
x = parseInt(x);
var bin = x.toString(6);

- det kan javascript tilsyneladende ikke, altså må jeg gøre det allerede når den finder data (PHP: decbin() ) eller selv lave en funktion i javascript.
Avatar billede olsensweb.dk Ekspert
05. maj 2012 - 11:43 #4
du kan nok med fordel skimme http://www.dev-archive.net/articles/js-dot-notation/
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title></title>
    <style type="text/css">
    </style>
    <script type="text/javascript"></script>
</head>
<body>
<form name="jette">
<table width='600'>
    <tr>
        <td>Opgave 1: <input type='checkbox' name='opgave[]'></td>
        <td>Opgave 2: <input type='checkbox' name='opgave[]'></td> 
        <td>Opgave 3: <input type='checkbox' name='opgave[]'></td>
    </tr>
    <tr>
        <td>Opgave 4: <input type='checkbox' name='opgave[]'></td>
        <td>Opgave 5: <input type='checkbox' name='opgave[]'></td>
        <td>Opgave 6: <input type='checkbox' name='opgave[]'></td>
    </tr>
</table>
</form>
<script type="text/javascript">       
    var bin=Array(0,0,0,0,1,1);       
    for(nr = 5; nr >= 0; nr--){             
        if(bin[nr] == 1) {               
            document.jette["opgave[]"][nr].checked = true;
        }
        else {                
            document.jette["opgave[]"][nr].checked = false;
        }
    }
</script>
</body>
</html>
Avatar billede olsensweb.dk Ekspert
05. maj 2012 - 11:55 #5
#3 - det kan javascript tilsyneladende ikke, altså må jeg gøre det allerede når den finder data (PHP: decbin() ) eller selv lave en funktion i javascript.

man kunne jo google js dec2bin
eller tage smutvejen når du nu er bekendt med php se på http://phpjs.org/
kig her http://phpjs.org/functions/decbin:381
Avatar billede Calle5463 Forsker
05. maj 2012 - 12:11 #6
#4: så kom der flueben i checkboxene - nu skal jeg bare finde det rigtige sted at indsætte decbin(), så det er den binære værdi jeg får "skubbet" over i AJAX-delen:

Det her skal indsættes det rigtige sted:

$bin = decbin($x);
$bin = substr(str_repeat(0,8),0,8-strlen($bin)).$bin;


- i forhold til nedenstående (hvoraf man også ser hvor lidt detail-overblik jeg har :-| ):

$id = $_POST['id'];
$info=array();
$sql = "SELECT * FROM k29592748, s29592748 WHERE sSag=$id AND kNr=sNr";
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result)){
  $info[]=array( 
    "kNr"=>$row['kNr'],
    "sOpgave"=>$row['sOpgave'],
    "sOpgaveKommentar"=>$row['sOpgaveKommentar']);
}
Avatar billede Calle5463 Forsker
05. maj 2012 - 12:13 #7
#5: jeg lover dig google er ved at brænde sammen på min pc!
Avatar billede olsensweb.dk Ekspert
05. maj 2012 - 17:34 #8
en lille omskrivning af js coden fra #4, så den er lidt pænere
<script type="text/javascript">        
    //var bin=Array(0,0,0,0,1,1);       
    var bin="000011";   
    var aNodeList = document.jette["opgave[]"];
    var lng = aNodeList.length; 
    for(nr = lng-1; nr >= 0; nr--){    
    //for(nr = 5; nr >= 0; nr--){
        if(bin[nr] == 1) {               
            aNodeList[nr].checked=true;
        }
        else {                
            aNodeList[nr].checked=false;
        }       
    }
</script>


#6
stå værdien af X i en af de 2 tabeller ??,
hvis den gør kan du jo lave convatering inde i din while, og tage den convaterede værdi med i dit info array

<?php
$id = $_POST['id'];
$info=array();
$sql = "SELECT * FROM k29592748, s29592748 WHERE sSag=$id AND kNr=sNr";
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result)){
    $bin = decbin($x);
    //$bin = substr(str_repeat(0,8),0,8-strlen($bin)).$bin;

  $info[]=array(
    "kNr"=>$row['kNr'],
    "sOpgave"=>$row['sOpgave'],
    "sOpgaveKommentar"=>$row['sOpgaveKommentar'],
    "sOpgaveBin"=>$bin

    );
}
?>
Avatar billede Calle5463 Forsker
05. maj 2012 - 19:15 #9
#7 ad #6:

Ja, s29592748 indeholder dec-værdien i feltet sOpgave, og det var også som du foreslår min mening at konvertere mens jeg stadig har fat i værdien i php-delen - synes det vil gøre det lidt pænere og lige-ud-ad-landevejen - og derefter skubbe værdien ind i $row['sOpgave'].

Er det ligegyldigt for js-delen at længden af det binære felt variere, forstået på den måde, altså kan blive kortere end 6 bit (de 8 er to for meget :-) )? (kan godt se den tjekker på ==1, men er den ligeglad med at værdien kan være ikke-eksisterende?)
Avatar billede olsensweb.dk Ekspert
05. maj 2012 - 20:39 #10
hurtigt banket sammen til inspiration
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title></title>
<style type="text/css">
</style>
<script type="text/javascript">       
function GetAjaxData(){
   
    var url = "req.php";       
    var params = "";
       
    http = new XMLHttpRequest();
    http.open("POST", url, true);
    //Send the proper header information along with the request
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");
    http.send(params);
    http.onreadystatechange = function() {//Call a function when the state changes.
        if(http.readyState == 4 && http.status == 200) {
            // her sker alt det sjove :)
            var values = JSON.parse(http.responseText);
            var lng = values.length;           
            if (lng > 0){   
                //for (var k=0; k<lng; k++) {                       
                    document.jette.kNr.value = values[0]['kNr']; // values[k]
                    document.jette.sOpgave.value = values[0]['sOpgave'];
                    document.jette.sOpgaveKommentar.value = values[0]['sOpgaveKommentar'];                   
                    var bin=values[0]['sOpgaveBin'];
                    var aNodeList = document.jette["opgave[]"];       
                    var NodeLng = aNodeList.length; 
                    for(nr = NodeLng-1; nr >= 0; nr--){    
                        if(bin[nr] == 1) {               
                            aNodeList[nr].checked=true;
                        }
                        else {                
                            aNodeList[nr].checked=false;
                        }       
                    }
                //}                   
            }
            else{ 
                alert("ingen data");               
            }
        }
    }
}
</script>
</head>
<body>
<form name="jette">
<input type='text' name='kNr'>
<input type='text' name='sOpgave'>
<input type='text' name='sOpgaveKommentar'>
<table>
    <tr>
        <td>Opgave 1: <input type='checkbox' name='opgave[]'></td>
        <td>Opgave 2: <input type='checkbox' name='opgave[]'></td> 
        <td>Opgave 3: <input type='checkbox' name='opgave[]'></td>
    </tr>
    <tr>
        <td>Opgave 4: <input type='checkbox' name='opgave[]'></td>
        <td>Opgave 5: <input type='checkbox' name='opgave[]'></td>
        <td>Opgave 6: <input type='checkbox' name='opgave[]'></td>
    </tr>
</table>
</form>
<script type="text/javascript">       
    GetAjaxData();   
</script>
</body>
</html>


req.php
<?php
//while($row=mysql_fetch_assoc($result)){
    $bin = sprintf("%06b", 12); // tallet 12 udskives som binært, med 6 bit
    $info[]=array(
        "kNr"=>"1213",
        "sOpgave"=>"overfører data via AJAX",
        "sOpgaveKommentar"=>"der fokuceres her på at decode opgavebin",
        "sOpgaveBin"=>$bin
    );
//}
echo json_encode($info);
?>
Avatar billede Calle5463 Forsker
05. maj 2012 - 20:52 #11
.1: jeg har lavet noget der virker - det er dog noget meget low-tech kvik-fix og fylder.

.2 jeg mener at kunne se mig ud af #10, som jeg vil implementere i en (anden fredelig) sen aftentime :-) - det er helt klart noget i den retning jeg skal - tak for inspirationen.

ronols - smid et svar så vi kan få lukket den her tråd, jeg har et par andre pinde jeg skal i gang med, så der kommer sikkert flere tråde.
Avatar billede olsensweb.dk Ekspert
05. maj 2012 - 20:58 #12
får du her.
god arbejds lyst, med de andre pinde :)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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