Avatar billede naquer Nybegynder
03. september 2011 - 15:57 Der er 4 kommentarer og
1 løsning

Kalde en query fra en checkbox

Hej

Jeg har en checkbox form med nogle værdier. Når der trykkes på checkboxene, skal de eksekvere en mysql query baseret på hvad der er valgt, som så skal vises i en anden div.

Et eksempel på ovenstående er http://www.miinto.dk/guide-m-bukser, hvor siden opdateres når der vælges et mærke i checkboxene.

Kan i være behjælpelig med hvordan dette nemmest løses?
Avatar billede olebole Juniormester
03. september 2011 - 16:47 #1
<ole>

Det gøres med Ajax. Når en checkbox klikkes, sendes et XHR-kald til serveren, som henter data i databasen. Serveren formaterer data som JSON eller XML og sender resultatet tilbage til browseren. Her indsættes data i elementer, som tilføjes sidens DOM-træ.

At der så i virkeligheden er tale om non-Ajax, er en helt anden ting. Ajax (Asynchronous Javascript And XMLHttpRequest) er jo netop kendetegnet ved asynkron adfærd. Det vil sige, at serverkaldet ikke må bremse brugeren i videre interaktion med interfacet, mens det foretages.

Løsningen på miinto.dk er lavet efter ganske almindelig 'stenalder-web' tankegang med sideskift, hvor brugeren efterlades passiv. Den eneste forskel er, at skærmen ikke bliver helt hvid, men kun delvist hvid. Det er det stik modsatte af den moderne tankegang med asynkrone kald - kaldet Ajax

/mvh
</bole>
Avatar billede naquer Nybegynder
03. september 2011 - 17:18 #2
Mange tak for forklaringen Ole.

Er det muligt at lave ovenstående ved en kombination af nedenstående:

1) onclick="document.formnavn.submit()"

og dette script som opdaterer en div når funktionen kaldes:

2)
<script>   
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
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("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","receiver.php?q="+str,true);
xmlhttp.send();
}   
</script>


Normalt bruger jeg

onClick='showUser(this.value)'

Til at aktivere ovenstående funktion. Kan dette kombineres med tidligere nævnte onclick="document.formnavn.submit()", således at div'en bliver kaldt ligeledes med at formen submittes?
Avatar billede olebole Juniormester
04. september 2011 - 22:54 #3
Det har stadig ikke så meget med Ajax at gøre. Man HTML formaterer ikke data på serveren, men formaterer data som JSON eller XML.

Efter klienten har parsed responsen, oprettes passende elementer, som indsættes i dokumentet - begge dele med DOM.

Det er ikke ukompliceret, og man skal kende applikationen i enkeltheder for at kunne fortælle, hvad du præcist skal gøre
Avatar billede naquer Nybegynder
05. september 2011 - 20:23 #4
Hej Ole

Tak for svaret. Da mit kendskab til AJAX er begrænset, forsøgte jeg mig med en lidt kreativ løsning, som imidlertid gav det ønskede resultat.

Det jeg gjorde var:

1) Sætte onClick på mine checkboxe til at kalde det scriptet var min 2. post
<input onClick='showUser(this.value)' type='checkbox' name='checkfriends[]' value='" .$friend['uid']. "' />";

2) Sætte en SESSION i det php script som funktionen kalder, som tilføjer værdien af ID'en i checkboxen til SESSION, med følgende logik:

a) Findes strengen ikke i SESSION tilføjet den opdelt med et komma
b) Findes strengen i forvejen, har brugeren aktiveret samme id 2 gange, og har altså fjernet fluebenet. I dette tilfælde fjernes værdien fra SESSION.

if(!isset($_SESSION['ar'])) {
    $_SESSION['ar'] = "," . $_REQUEST['q'];
} else {
    $_SESSION['ar'] = $_SESSION['ar']. "," .$_REQUEST['q'];
}

$num = substr_count($_SESSION['ar'], $_REQUEST['q']);
$comma =  substr_count($_SESSION['ar'], '.');


$rep = "," . $_REQUEST['q'];

if($num > 1) {
        $_SESSION['ar'] = str_replace($rep,"",$_SESSION['ar']);
}

3) Denne værdi kan jeg så bruge direkte i min SQL SELECT statement i samme script, hvorefter indholdet efter valget i checkboxene vises.


Din løsning er nok mere best practice, så du smider bare et svar :-)
Avatar billede naquer Nybegynder
08. januar 2012 - 11:25 #5
Lukket - Ole du siger bare til hvis du vil have point
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