Checkboxen selektieren/deselektieren

Alles, was PHP betrifft, kann hier besprochen werden.

Checkboxen selektieren/deselektieren

Postby H0MER » 14. January 2005 14:46

hi leute!
habe eine problem ...
ich erstelle eine tabelle mit mehreren checkboxen.
die namen der checkbox ist ein array (also Name[]) damit ich in ihm werte speichern kann.
nun will ich gerne nen button haben, der es mir ermöglicht alle checkboxen auf einmal zu markieren oder demarkieren.
hatte das ganze mal mit nen javascript probiert, welches aber mit dem array des namens nicht klarkommt.

hat jemand ne idee wie ich das ganze denn in php realisieren kann?
vielen dank schon mal im vorraus.

mfg
H0MER
H0MER
 
Posts: 53
Joined: 11. June 2003 17:30

Postby Stefan » 14. January 2005 19:02

Javascript kommt schon mit dieser Bezeichnung der Felder klar.
Es kommt darauf an wie Du das Element ansprichts.

document.Element['array[Index]'].value = "geht doch";

de.comp.lang.javascript
http://dcljs.de/
http://JavaScript.FAQTs.com/

Code: Select all
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
  <title>Titel</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">


<script type="text/javascript">
function check(name)
{
var el; // zu checkendes Element
el = document.getElementsByName(name);
var len = el.length;
/**
 * Bitte noch prüfen, ob der Browser das DOM Modell überhaupt
 * unterstützt. Wenn nicht aussteigen "return"
 */
for (var i = 0; i < len; i++)
  el[i].checked = (el[i].checked == false) ? true  : false;
} // function check(name)

</script>



</head>

<body>
<form method="post">
<fieldset><legend>anhaken</legend>

<input type="checkbox" name='DelDatei[]' value='1295363.jpg'>
<input type="checkbox" name='DelDatei[]' value='1295757.jpg'>
<input type="checkbox" name='DelDatei[]' value='testbild.psd'>
<input type="checkbox" name='DelDatei[]' value='apache_pb.gif'>
</fieldset>
</form>
<br>
<a href="#" onclick="check('DelDatei[]');return false;">alle an/abwählen</a></th>
</body>
</html>



ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby H0MER » 14. January 2005 22:41

hi ...
vielen dank für die antwort!
bei mir zuhause hat das jetzt auch soweit hingehaun ;)
das problem was ich hatte ( denke ich zumindest , da ich die skripte nicht hier haben zum testen) ist das ich das element als element aber nicht als element(array) angesprochen habe.

mfg
H0MER
H0MER
 
Posts: 53
Joined: 11. June 2003 17:30

Postby Stefan » 15. January 2005 17:09

Moin,

bitte, gerne geschehen. Eigentlich bin ich ziemlich doof, aber wenn ich schon mal helfen kann.....
Ich denke Du liegst mit Deiner Fehleranalyse richtig. Ich hatte mal genau das gleiche Problem. Deshalb kenn ich ja auch die Lösung.

ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby H0MER » 17. January 2005 09:13

hi ...
so ... habe das jetzt auch bei mir inner firma getestet und läuft wunderbar!

eine kleine anmerkung habe ich noch zu machen:
das skript was du da gepostest hast markiert nicht wirklich alle checkboxen sondern kehrt nur die markierung um.
aber da ich auch auf der suche nach so einem skript bin hat mir das auch sehr geholfen!
vielen dank noch mal.

mfg
H0MER
H0MER
 
Posts: 53
Joined: 11. June 2003 17:30

Postby Stefan » 17. January 2005 13:29

Servus,

das ist korrekt.

Diese Zeile ist dafür verantwortlich
Code: Select all
el[i].checked = (el[i].checked == false) ? true  : false;


Alle aktivieren.
Code: Select all
el[i].checked =true;


Alle deaktivieren
Code: Select all
el[i].checked = false;


müsstest halt noch ein Argument mit in die Funktion nehmen.

Code: Select all
function check(name,zustand)
{
var el; // zu checkendes Element
el = document.getElementsByName(name);
var len = el.length;
/**
 * Bitte noch prüfen, ob der Browser das DOM Modell überhaupt
 * unterstützt. Wenn nicht aussteigen "return"
 */
for (var i = 0; i < len; i++)
  el[i].checked =  zustand;
} // function check(name)


der Aufruf dann mit
Code: Select all
<a href="#" onclick="check('DelDatei[]',true);return false;">anwählen</a>
<a href="#" onclick="check('DelDatei[]',false);return false;">abwählen</a>


ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby H0MER » 19. January 2005 12:06

Hi!
Ich wollte keinen neuen Thread erstellen, habe aber trotzdem noch mal eine Frage.
Diese checkboxen werden in einer Tabelle dargestellt mit einer Beschreibung und einer Version.
Nun möchte ich es gerne so machen, das ich die Tabellenüberschriften als Links habe, die mir die Sortierung der Inhaltsdaten verändert.
(Entweder ascending oder descending sortiert nach Spalte 1 oder 2)
Ich habe das bis jetzt so gelöst, dass ich die SQL-Abfrage verändere, komme aber an immer weitere Schwierigkeiten, blähe damit den Code ziemlich auf und bin nun an den Punkt gekommen wo ich der meinung bin, dass es bestimmt eine schönere/bessere Lösung gibt.
Nur welche? ;)
Habt Ihr vielleicht ein paar Ideen, wie ich die Tabellen besser neu sortieren kann?
Vielen Dank schon mal im Voraus.

mfg
H0MER
H0MER
 
Posts: 53
Joined: 11. June 2003 17:30

Postby Stefan » 19. January 2005 13:16

Servus,

zeig doch mal eine Stückchen Quelltext. Ansonsten bist Du soweit ich das beurteilen kann auf dem richtigen Weg. Ändere die MySQL Anfrage "[...]Order by `". $spalte."` $richtung".

Aus eigener Erfahrung, kann ich Dir bestätigen, daß es selbst für kleine Funktionen/Features, manchmal verhältnismäßig riesige Mengen an zusätzlichem Quellcode bedarf. Versuche die Sachen in Funktionen oder Klassen zu stecken, die Du dann je nach bedarf einbindest, so hälst Du die Datei übersichtlich.

Viel Erfolg
ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby H0MER » 20. January 2005 10:58

Hi.
Ich habe das Problem jetzt mittlerweile gelöst.
Und zwar folgendermassen:

Code: Select all
switch($_GET["order"]){
            case 1: $z=$_GET["order"];
                  if($_GET["asc"]==1){
                     $sort="desc";
                     $sortierung=0;
                  }else{
                     $sort="asc";
                     $sortierung=1;
                  }
                  break;
            case 2: $z=$_GET["order"];
                  if($_GET["asc1"]==1){
                     $sort="desc";
                     $sortierung1=0;
                  }else{
                     $sort="asc";
                     $sortierung1=1;
                  }
                  break;
            case 3: $z=$_GET["order"];
                  if($_GET["asc2"]==1){
                     $sort="desc";
                     $sortierung2=0;
                  }else{
                     $sort="asc";
                     $sortierung2=1;
                  }
                  break;
            default : $z=2;
         }
      

Ich lasse die Sortierung über Links in den Überschriften mittels Get übergeben. Bei dem Switch Statement überprüfe ich, nach welche Spalte sortiert werden soll ($_GET["order"]) und ob es absteigend oder aufsteigend sortiert werden soll (mit Hilfe der Variablen $sort).
Ausserdem übergebe ich den Status, ob die letzte Sortierung aufsteigend oder absteigend war mit Hilfe der Variablen $sortierung.
Die Links, die die Tabellenüberschriften bilden sehen folgendermassen aus:
Code: Select all
<a href=\"".$_SERVER["PHP_SELF"]."?order=1&suche=".$y."&asc=".$sortierung." \" >Rechner</a>

Ich habe jetzt nicht alle 3 Links gepostet, der einzige Unterschied ist, dass bei den drei Links "asc" -"asc2" verwendet wurde. Die Variable $y beinhaltet die Software Id's so wie sie in der Datenbank gespeichert sind.

Meine SQL-Query setzt sich jetzt folgendermassen zusammen:

Code: Select all
SELECT * FROM software_pro_rechner where software_id in ($y) order by $z $sort


Ich hoffe es ist verständlich was ich geschrieben habe.

Wenn du noch Verbesserungsvorschläge hast lass sie mich bitte wissen,
da ich mir nich sicher bin, dass es sich bei dieser Lösung um die effektivste/sauberste Lösung handelt.
Vielen Dank schon mal.

Mfg
H0MER

/edit: ich hatte ausversehen eine Klammer zuviel aus meinem Quelltext kopiert in der Switchanweisung.
H0MER
 
Posts: 53
Joined: 11. June 2003 17:30

Postby Stefan » 26. January 2005 21:07

Wenn so geht, dürfte es ja schonmal gut sein für den Anfang, doch bemühe Dich eine andere Lösung zu finden.

Dinge wie "$asc,$asc1,$asc2" oder "$sortierung, $sortierung1, $sortierung2" binden Dich zu sehr, wenn Du nun eine weiter Spalte einführst, musst Du für diese wieder eine Option im switch-Block vorsehen.
Besser wäre es, nur eine Variable wie $asc oder $sortierung zu haben, die halt je nach dem verschiedene Werten haben können.

Ich hab jetzt nichts zur Hand, aber ich denke man könnte sich bei zig php scripts diese Sortierungsfunktion abschauen bzw. Anreize holen (z.B phpmyadmin?) Bin mir noch nicht ganz sicher, evtl. bin ich in ein paar Tagen(..Wochen) selbst auch damit konfrontiert. Wenn ich dies hier noch zwischen den Ohren halten kann, werd ich Dich informieren wie es bei mir aussieht. Wenn Du in der Zwischenzeit weitergekommen bist, darft Du mir ebenfalls gerne berichten wie der Stand der Dinge ist.

caio, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz


Return to PHP

Who is online

Users browsing this forum: No registered users and 15 guests