[php][mysql]html zoekformulier voor zoeken in database

Pagina: 1
Acties:
  • 910 views sinds 30-01-2008
  • Reageer

Onderwerpen


Verwijderd

Topicstarter
Ik wil een zoekfunctie voor gebruikers schrijven om in een database te zoeken. Het gaat om een mysql database die een groot aantal enquetes bevat.
Op de website moet een lijst komen waarin al deze enquetes te zien zijn. Dit wou ik als een forum opvatten (lijst met topics). De gebruiker moet als zoekfuncties een mentor naam en of een klasnaam invoeren. Daarnaast moet hij selecteren of deze lijst ASC of DESC gesorteerd moet worden. Tot slot moeten ze aangeven of er gezocht moet worden in de enquetes van afgelopen week/maand/jaar.

Een gebruiker die wil zoeken kan bijvoorbeeld een mentor naam of een klas opgeven via een html form. Het probleem is dat ik niet goed weet hoe ik nu mijn zoekfuntie moet schrijven.

$query ="SELECT * FROM enquetes WHERE mentor='$mentor' AND klas='$klas'";

Deze query is niet goed. Een gebruiker moet bijvoorbeeld alleen op mentor kunnen zoeken. Zodra hij klas leeg laat levert dit een probleem op. Hoe moet ik dit aanpakken?

Ik zou met allemaal ifstatements kunnen werken: als $mentor een waarde bevat, dan... als $klas een waarde bevat dan... als $mentor EN $klas een waarde bevat dan....

Maar misschien is er een betere oplossing?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Je SQL Statement dynamisch opbouwen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Zou je aub een klein voorbeeldje kunnen geven?

  • Daventry
  • Registratie: Oktober 2004
  • Laatst online: 21-04 10:00
Ik ken effe geen PHP dus kan je geen voorbeeld met PHP geven. Het idee is simpel, je start met een variabele waarin je de basis steekt (SELECT blah FROM blah WHERE) en dan ga je zien of er een mentor is, zo ja voeg je die eerste conditie toe aan die variabele, zonee - voeg je hem niet toe ... en je doet hetzelfde met klas

Wel effe opletten dat wanneer er meer dan een voorwaarde is, je wel even die AND er moet tussengooien

  • messi
  • Registratie: Oktober 2001
  • Laatst online: 10:51
zoiets:

(de rest kun je zelf wel verzinnen ;))

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php

// De begin query
$query = "SELECT * FROM enquetes WHERE";

// Waarde voor AND functie
$i = '0';

// checken of er een waarde voor mentor is, zo ja dan query langer maken
if (!empty($_POST[mentor])) 
/
 { 
   $i ++;
  $query = "".$query." mentor='".$_POST[mentor]."'";
 }


// checken of er een waarde voor klasis, zo ja dan query langer maken
if (!empty($_POST[klas])) 
 { 
 
  // checken of er een AND tussen moet
 if ($i > 0) 
    { 
       $query ="".$query." AND";
    }

     $i++;
  
  $query = "".$query." klas='".$_POST[klas]."'";
 } 
// enz enz


 $result = mysql_query($query) or die(mysql_error());


?>

[ Voor 67% gewijzigd door messi op 10-02-2005 15:44 . Reden: lots of typos :/ ]

Onze excuses voor het ontbreken van de ondertiteling.


Verwijderd

Topicstarter
Dank voor dit 'kleine' zeer uitgebreide voorbeeld. :*). Mijn zoekscript werkt als een trein. Er is nog een functie waar ik nog niet helemaal uit ben:

Zoek in de afgelopen:
-Alle enquetes
-7 dagen
-1 maand
-1 jaar

In de database staat de datum op deze manier genoteerd: 05-02-2005. Misschien dat een andere manier hiervoor handiger is (deze datum moet hoe dan ook zo zichtbaar worden bij de output zodat men kan zien wanneer de enquete is aangemaakt)? Misschien dat ik iets met de functie time() zou kunnen doen:

nt time ( void )

Retourneert de huidige tijd gemeten in het aantal seconden sinds de Unix Epoch (January 1 1970 00:00:00 GMT).

In 7 dagen gaan 60*60*24*7= 604800 seconden. Het huidige aantal sec sinds de Epoch - 604800 levert een getal op dat precies 7 dagen geleden is. Alle database rijen die een groter aantal seconden bevatten zijn dus tussen nu en 7 dagen gemaakt.
Is dit een practisch idee of kan het beter?
Is het in dat geval dan handig om zowel een datum als 05-02-2005 in de database te hebben met daarnaast een kolom met het aantal sec sinds de epoch of moet ik een functie schrijven die het aantal sec sinds de epoch kan omrekenen naar dagen, maanden jaren? Het lieft zou ik slechts 1 kolom hebben van het type: 05-02-2005 omdat ik deze gelijk kan aanroepen bij het printen van de enquetes op de website, maar ik sta altijd open voor practischere methoden.

Acties:
  • 0 Henk 'm!

Verwijderd

Datums kun je ook gewoon in een sql query verwerken als je een date(time) veld hebt.
Zie hier maar eens: http://dev.mysql.com/doc/...e-and-time-functions.html
En dat verwerk je gewoon op die ene manier van hierboven, maar dan zonder slordigheid foutjes. ;)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//dit moet zo, zie maar bij arrays op php.net
$_POST['mentor']
//ipv
$_POST[mentor]

// en dit moeten buiten quotes. Het is namelijk een integer
$i = '0';
//Dus zo:
$i = 0;
 
//Verder kan dit:
$query = "".$query." mentor='".$_POST[mentor]."'";
// kan dit in de eerste plaats zo:(zonder overbodige quotes)
$query = $query." mentor='".$_POST['mentor']."'";
//maar kan ook zo:
$query .= " mentor='".$_POST['mentor']."'";


Succes!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah nu weet ik wat mysql met het field type date kan aanvangen :) Iedere keer sta je er weer van te kijken hoe krachtig php in combi met mysql is. Mijn zoekscript begint al aardig te vlotten, maar ik ben er nog niet helemaal.

Onderaan de zoektabel (dus buiten het zoekformulier) worden de resultaten van de zoekopdracht weergegeven met een selectievakje ervoor.
code:
1
<input type =\"checkbox\" name=\"id\" value=\"$enquetenummer[$i]\">

Nu wil ik een functie hebben die al deze hokjes tegelijk kan aanvinken of het vinkje weghalen. Dit moet een soort link worden: Check All / Uncheck All (dus geen grote knop, alleen deze woorden). Nu zat ik aan javascript te denken om dit probleem op te lossen. De volgende code is een aardig voorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<SCRIPT LANGUAGE="JavaScript">
function checkAll(field)
{
for (i = 0; i < field.length; i++)
    field[i].checked = true ;
}

function uncheckAll(field)
{
for (i = 0; i < field.length; i++)
    field[i].checked = false ;
}
</script>




<form name="myform" action="checkboxes.asp" method="post">
<b>Your Favorite Scripts & Languages</b><br>
<input type="checkbox" name="list" value="1">Java<br>
<input type="checkbox" name="list" value="2">Javascript<br>
<input type="checkbox" name="list" value="3">Active Server Pages<br>
<input type="checkbox" name="list" value="4">HTML<br>
<input type="checkbox" name="list" value="5">SQL<br>

<input type="button" name="CheckAll" value="Check All"
onClick="checkAll(document.myform.list)">
<input type="button" name="UnCheckAll" value="Uncheck All"
onClick="uncheckAll(document.myform.list)">
<br>
</form>


Er zijn 2 problemen met deze code:
1. Ze gaan er hier van uit dat de selectie vakjes in een form zitten, wat bij mij niet het geval is.
2. Ze gebruiken hier knoppen ipv het woord Check all of in het andere geval Uncheck All. Zodra ik op het woord check all klik, moet alleen de bijbehorende functie worden aangeroepen.

Kan iemand mij uitleggen hoe ik dit probleem oplos. Het is overigens niet de bedoeling dat de hele pagina herlaadt want dan verdwijnen de zoekresultaten!!!

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
Verwijderd schreef op vrijdag 11 februari 2005 @ 13:48:
Datums kun je ook gewoon in een sql query verwerken als je een date(time) veld hebt.
Zie hier maar eens: http://dev.mysql.com/doc/...e-and-time-functions.html
En dat verwerk je gewoon op die ene manier van hierboven, maar dan zonder slordigheid foutjes. ;)
PHP:
1
2
3
4
5
/* knip */

//Verder kan dit:
$query = "".$query." mentor='".$_POST[mentor]."'";
// en nog wat


Succes!
Hmm.. vreemd dat je deze regel dan ook niet even aanpast:

PHP:
1
$query .= " mentor='". $_POST["mentor"] ."'";

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Is er nog iemand die mijn bovenstaande probleem kan oplossen?

[ Voor 89% gewijzigd door Verwijderd op 13-02-2005 16:43 ]


Acties:
  • 0 Henk 'm!

  • messi
  • Registratie: Oktober 2001
  • Laatst online: 10:51
Van die button kun je gewoon een url maken met de onclick erbij

en het is toch handiger om die checkboxes in het form te zetten, aangezien java kijkt naar de formnaam .

Onze excuses voor het ontbreken van de ondertiteling.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
ten eerste is een checkbox geen radio button. Ze moeten allemaal een andere naam hebben anders gaat het niet werken. verder moet je dan even alle velden apart aanspreken om ze te (un)checken.

offtopic:
Denk verder ook even aan mysql_escape_string() anders kun je snel last krijgen van SQL injection.
en het is toch handiger om die checkboxes in het form te zetten, aangezien java kijkt naar de formnaam
Java != Javascript, en de rest slaat nergens op

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Michali schreef op maandag 14 februari 2005 @ 15:00:
ten eerste is een checkbox geen radio button. Ze moeten allemaal een andere naam hebben anders gaat het niet werken. verder moet je dan even alle velden apart aanspreken om ze te (un)checken.

offtopic:
Denk verder ook even aan mysql_escape_string() anders kun je snel last krijgen van SQL injection.



[...]

Java != Javascript, en de rest slaat nergens op
Ah ok, en hoe moet het dan wel? Hoe selecteer ik al die checkboxes in 1 keer en gooi de rijen met de id's van die enquetes dan gelijk uit de database als ik op delete klik?

Even iets anders:
Ik heb een kolom met allemaal cijfers in de database. Nu wil ik het gemiddelde van al die cijfers op 2 decimalen na de komma afgerond hebben. Nu heb ik 2 opties: Laad alle cijfers in een array, tel alles bij elkaar op en deel door de sizeof(array).

De andere optie is om de avg functie van mysql te gebruiken.
$query= "SELECT avg(studie) FROM uitslagen WHERE enquete='$enquete'";
$result= mysql_query($query);
Hoe krijg ik nu het gemiddelde uit de variable result? Deze optie lijkt mij het handigste, tenzij iemand een beter idee heeft?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Die checkboxes:
<input type="checkbox" id="check-1">
<input type="checkbox" id="check-2">

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
//niet compleet correct maar het idee is duidelijk
function checkall(){
  for(var i=1; i<1000; i++){
    if(typeof document.getElementById('check-'+i)!='undefined'){
      document.getElementById('check-'+i).checked=true;
    }else{
      //zodra we de laatste gehad hebben kunnen we stoppen.
      break;
    }
  }
}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Om eerlijk te zijn heb ik het niet zo op die loop methode. Daardoor krijg ik een beperking die ik liever niet wil. Bovendien loop ik dan later nog tegen een probleem:

<input type =\"checkbox\" name=\"id\" value=\"$enquetenummer[$i]\">

Dit heb ik nu.

Nu zou ik graag alle checkboxjes met de naam id checken. Alle checkboxjes hebben als value het enquetenummer van de enquete waar ze bij horen. Alle gecheckte enquetes moeten dmv dit nummer verwijderd worden.

Kan er nog iemand kijken naar mijn probleem met het gemiddelde van een kolom? (zie bovenstaande reply)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Ik zie de beperking niet echt aangezien je gewoon van 1000 een ongeloofwaardig hoog getal kan maken. Sowieso is 1000 checkboxes op een pagina vrij onwerkbaar. Verder moet je de nummering gewoon door laten lopen aangezien de id's alleen maar voor javascript zijn maak je deze gewoon van 1 tot 30 als je 30 vragen hebt. In het name attribuut zet je een echt ID uit je database zodat je straks de vragen kan herkennen als je ze weer op de server terug gepost krijgt.

Over je AVG functie: dit is een aggregated functie wat inhoud dat je een GROUP BY clausule in je query moet hebben. Lees ook even de SQL specificaties. Daar staat dit wel in.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zo ik ben weer terug van vakantie: tijd om te programmeren. Ik ben er achter gekomen dat ik de html formulieren niet helemaal had begrepen. Je mag wel degelijk meerdere formulieren op 1 pagina, maar niet in elkaar gewikkeld:
<form>
<form>
</form>
</form>
Is niet toegestaan. Maar dat is bij mij niet het geval, dus het gebruik van een formulier is geen probleem. Voordat ik zo'n javascript teller inbouw voor het aanvinken van de checkboxjes is dit idee misschien toch nog nuttig:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<input type ="checkbox" name="enquetecheckbox" value="$enquetenummer[$i]">

<input type="button" name="CheckAll" value="Check All" onClick="checkAll(document.checkbox.enquetecheckbox)">
<input type="button" name="UnCheckAll" value="Uncheck All" onClick="uncheckAll(document.checkbox.enquetecheckbox)">

<SCRIPT LANGUAGE="JavaScript">
function checkAll(field)
{
for (i = 0; i < field.length; i++)
    field[i].checked = true ;
}

function uncheckAll(field)
{
for (i = 0; i < field.length; i++)

    field[i].checked = false ;
}
</script>


Dit is niet meer dan een idee. Wat denken jullie er van? Ik loop met deze code tegen het probleem: hoe krijg ik de nummers van alle bijbehorende aangevinkte enquetes in een array? Zodra dit verzonden wordt, krijg je:
enquetecheckbox=1 enquetecheckbox=2 enquetecheckbox=3 enquetecheckbox=4 enz...

Dus hoe kan ik in php de nummers van de aangevinkte enquetes opvangen?

[ Voor 10% gewijzigd door Verwijderd op 03-03-2005 00:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

messi schreef op donderdag 10 februari 2005 @ 15:36:
zoiets:

(de rest kun je zelf wel verzinnen ;))

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php

// De begin query
$query = "SELECT * FROM enquetes WHERE";

// Waarde voor AND functie
$i = '0';

// checken of er een waarde voor mentor is, zo ja dan query langer maken
if (!empty($_POST[mentor])) 
/
 { 
   $i ++;
  $query = "".$query." mentor='".$_POST[mentor]."'";
 }


// checken of er een waarde voor klasis, zo ja dan query langer maken
if (!empty($_POST[klas])) 
 { 
 
  // checken of er een AND tussen moet
 if ($i > 0) 
    { 
       $query ="".$query." AND";
    }

     $i++;
  
  $query = "".$query." klas='".$_POST[klas]."'";
 } 
// enz enz


 $result = mysql_query($query) or die(mysql_error());


?>


messi, je voorbeeld klopt niet helemaal, als je geen zoekcriteria ingeeft,zal je query falen, je hebt dan een WHERE zonder conditie.

Ik gebruik hier voor een basis query met een conditie WHERE 1 = 1, als je je query dan moet vervolledigen met je zoekcriteria, weet je dat je steeds moet beginnen met een AND
In dit voorbeeld werken met de '$i++' gaat nog, maar als je 10 zoekcriteria's hebt, wordt het hopeloos onoverzichtelijk.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

// De begin query
$query = "SELECT * FROM enquetes WHERE 1=1";

// checken of er een waarde voor mentor is, zo ja dan query langer maken
if (!empty($_POST['mentor'])) 
/
 { 
  $query .= " AND mentor='".$_POST['mentor'];
 }

// checken of er een waarde voor klasis, zo ja dan query langer maken
if (!empty($_POST['klas'])) 
 { 
  $query .= " AND klas='".$_POST['klas']."'";
 } 
// enz enz


 $result = mysql_query($query) or die(mysql_error());


?>
en voor je javascript probleem,probeer eens ... http://www.google.com/sea...cript+checkbox+select+all voorbeelden zat.

[ Voor 9% gewijzigd door Verwijderd op 03-03-2005 09:27 . Reden: typo's in code ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jah zoekresultaten genoeg. Ik kan op verschillende manieren alle hokjes laten aanvinken/uitvinken. Het probleem is echter: Hoe zorg ik dat php uit x aantal hokjes de bijbehorende values kan halen?

Bijv:

name=enquetecheckbox value=1
name=enquetecheckbox value=2
name=enquetecheckbox value=3

Hoe krijg ik het voor elkaar dat php deze waardes in een array kan stoppen? De name is constant het zelfde.

Ik zie wel in hoe ik die dingen kan laten aanvinken, maar niet hoe ik vervolgens php alle waardes in een array kan laten stoppen. Graag een hint hierover.

Acties:
  • 0 Henk 'm!

  • R4NCOR
  • Registratie: December 2000
  • Laatst online: 16-09 12:26

R4NCOR

eigenlijk gewoon Niels

Zoals al eerder gezegd, een checkbox is niet gelijk aan een radiobutton. Ze moeten verschillende namen hebben.
Noem ze bijvoorbeeld enquetecheckbox1, enquetecheckbox2 etc.. Waarna je ze met een for-loop doorloopt.

djluc zei dit ook al:
djluc schreef op vrijdag 18 februari 2005 @ 21:17:
Die checkboxes:
<input type="checkbox" id="check-1">
<input type="checkbox" id="check-2">

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
//niet compleet correct maar het idee is duidelijk
function checkall(){
  for(var i=1; i<1000; i++){
    if(typeof document.getElementById('check-'+i)!='undefined'){
      document.getElementById('check-'+i).checked=true;
    }else{
      //zodra we de laatste gehad hebben kunnen we stoppen.
      break;
    }
  }
}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, begrijpelijk dat al die checkboxjes een andere naam moeten krijgen, maar hoe haal ik dan met php de waardes uit die checkboxjes?

Stel: check-1, check-5, check-50 zijn aangevinkt. Ik submit het formulier. Hoe zorg ik dat php de values van deze checkboxjes in een array stopt?

[ Voor 3% gewijzigd door Verwijderd op 06-03-2005 14:04 ]


Acties:
  • 0 Henk 'm!

  • R4NCOR
  • Registratie: December 2000
  • Laatst online: 16-09 12:26

R4NCOR

eigenlijk gewoon Niels

Met een for-loopje bijvoorbeeld:

PHP:
1
2
3
4
5
6
$aantal = 3; //het aantal checkboxen
for ($i = 1; $i <= $aantal; $i++) {
   $naam = "check-" . $i; // naam van de checkbox
   $je_array[] = $_POST[$naam];
   // of doe hier je ding met een if-else-statement, je hebt de waardes hier tenslotte ook al.
}

Je kan ook een if-statement om regel 4 (waar je de waarde in de array stopt) zetten, zodat ie er alleen wat inzet als ie aangevinkt is. (if (isset($_POST[$naam])) bijv. :P

[ Voor 24% gewijzigd door R4NCOR op 06-03-2005 14:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

R4NCOR schreef op zondag 06 maart 2005 @ 14:11:
Je kan ook een if-statement om regel 4 (waar je de waarde in de array stopt) zetten, zodat ie er alleen wat inzet als ie aangevinkt is. (if (isset($_POST[$naam])) bijv. :P
Volgens mij komt een checkbox alleen de $_POST array als hij aangevinkt is. En anders zit hij er gewoon niet in.

Kan je er trouwens niet beter een array van maken?

<input type="checkbox" name="checkbox[]" value="enquetenummer[$i]">

PHP:
1
2
3
4
5
foreach($_POST['checkbox'] AS $id => $checkboxwaarde)
{
    //hier krijg je de checkboxen die aangevinkt zijn
}
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op zondag 06 maart 2005 @ 14:46:
Kan je er trouwens niet beter een array van maken?

<input type="checkbox" name="checkbox[]" value="enquetenummer[$i]">

PHP:
1
2
3
4
5
foreach($_POST['checkbox'] AS $id => $checkboxwaarde)
{
    //hier krijg je de checkboxen die aangevinkt zijn
}
?>
Ik heb geprobeerd jou idee werkende te krijgen, maar om eerlijk te zijn rijkt mijn php kennis niet ver genoeg om dit aan de praat te krijgen. Ik heb er ook geen idee van of dit uberhaupt zou werken.. Waarschijnlijk is de manier die r4ncor aangeeft mijn enige optie.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Verwijderd schreef op zondag 06 maart 2005 @ 17:59:
[...]


Ik heb geprobeerd jou idee werkende te krijgen, maar om eerlijk te zijn rijkt mijn php kennis niet ver genoeg om dit aan de praat te krijgen. Ik heb er ook geen idee van of dit uberhaupt zou werken.. Waarschijnlijk is de manier die r4ncor aangeeft mijn enige optie.
Dat is zeker niet de enige optie. Werk gewoon met arrays, precies zoals HaVri aangeeft. Wat begrijp je niet van wat hij zegt? Als je haken meegeeft aan een variabel: name="var[]" of name="var[index]", dan komt dat in php ook gewoon binnen als array. Je kunt hem dan gewoon accessen via $_POST['var']['index'] bijvoorbeeld. Doe er anders eens een var_dump() op. Dan kun je bestuderen wat de waardes nu allemaal zijn.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hm ik heb het werkende gekregen, maar nu zijn we weer bij het vorige probleem aangekomen, hoe vink ik al die checkboxjes met de naam checkbox[] weer aan? 8)7

Even een stukje code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php

if ($_POST['action']== "subscribe")
{
    foreach($_POST['checkbox'] AS $test)
    {
        echo $test;
    }

}

?>

<SCRIPT LANGUAGE="JavaScript">
function checkAll(field)
{
for (i = 0; i < field.length; i++)
    field[i].checked = true ;
}

function uncheckAll(field)
{
for (i = 0; i < field.length; i++)
    field[i].checked = false ;
}
</script>

<html>
<body>

<form name="myform" action="test.php" method="post">
<input type="hidden" name="action" value="subscribe">

<input type="checkbox" name="checkbox[]" value="1">
<input type="checkbox" name="checkbox[]" value="2">
<input type="checkbox" name="checkbox[]" value="3">
<input type="checkbox" name="checkbox[]" value="4">
<input type="checkbox" name="checkbox[]" value="5">
<input type="submit">

<input type="button" name="CheckAll" value="Check All"
onClick="checkAll(document.myform.checkbox[])">
<input type="button" name="UnCheckAll" value="Uncheck All"
onClick="uncheckAll(document.myform.checkbox[])">
</form>
</body>
</html>


Dit werkt niet door de [ ] achter document.myform.checkbox. Zodra ik overal [] weghaal, werkt het aanvinken perfect (maar dan is de array natuurlijk weg). Ik heb geprobeerd er escape characters voor te zetten: onClick="checkAll(document.myform.checkbox\\[\], maar ook dit werkt niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zondag 06 maart 2005 @ 18:47:
Dit werkt niet door de [ ] achter document.myform.checkbox. Zodra ik overal [] weghaal, werkt het aanvinken perfect (maar dan is de array natuurlijk weg). Ik heb geprobeerd er escape characters voor te zetten: onClick="checkAll(document.myform.checkbox\\[\], maar ook dit werkt niet.
Volgens mij moet het gewoon zonder de haken hoor.(ben niet echt thuis in javascript)
Met de haken in bedoel je namelijk dat je een element achter aan de array toevoegt.
Maar wat bedoel je met "maar dan is de array natuurlijk weg"?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik bedoel dat zodra ik de [] weghaal:

<input type="checkbox" name="checkbox" value="1"> ipv
<input type="checkbox" name="checkbox[]" value="1">

houd je geen array meer over.

Ook als ik deze code gebruik:
onClick="uncheckAll(document.myform.checkbox)"
werkt hij niet.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
je kunt door de array document.forms['myform'].getElementsByTagName('input') heen lopen en dan voor ieder item waarvan de naam gelijk is aan "checkbox[]" en de type waarde gelijk is aan "checkbox" de checked property op true of false zetten.

zoiets dus:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function check(bool)
{
    inputArr = document.forms['myform'].getElementsByTagName('input');
    
    for ( i = 0; i < inputArr.length; i++ )
    {
        if ( inputArr[i].type == "checkbox" && 
            inputArr[i].name == "checkbox[]" )
        {
            inputArr[i].checked = bool;
        }
    }
}

[ Voor 44% gewijzigd door Michali op 06-03-2005 19:20 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het lijkt perfect te werken _/-\o_ Ik ga kijken of ik dit netjes kan inbouwen.

[ Voor 71% gewijzigd door Verwijderd op 06-03-2005 20:57 ]

Pagina: 1