vorherigen checkbox-wert ermitteln

GreenBeret

Mitglied
ich baue ein php-script, bei dem es darum geht, dass dem user nur die datensätze angezeigt werden, die der kategorie entsprechen die er angeklickt hat. ich habe das (teils mittels hilfe aus einem anderem forum) sogar selbst hinbekommen.

am anfang der seite werden alle kategorien angezeigt, jede erhält eine checkbox die standardgemäß aktiviert ist.

Der user wird die datensätze in jedem fall erst dann angezeigt bekommen, wenn er auf den submitbutton (name="showcats", value="Anzeigen") drückt. deswegen sollten standardgemäß alle checkboxen aktiviert sein. aber es könnte ja auch der ander fall eintreten: dass der user bereits ein paar boxen deselektiert hat und auf Anzeigen gedrückt hat.
ob also alle aktiviert sind oder nicht könnte ich über eine if abfrage starten (submitbutton == "Absenden" ?). falls der submitbutton aber aktiviert wurde, sollen natürlich nur noch die checkboxen angeklickt sein die der user vorher auch angewählt hat. Ich wüsste jetzt ehrlich gesagt nicht wie ich das schaffen kann =/

folgendermaßen sieht mein code bis jetzt aus:

PHP:
<?php
echo '<form action="';
echo $_SERVER['PHP_SELF'];
echo '?m=self&um=showmyfeintuning'; // CMS-bedingt
echo '" method="post">';
$cats=mysql_query("SELECT id, catname FROM `tuning-cats`");
echo '<p align="center">';
while ( $boxen = mysql_fetch_array($cats) )
{
    $catid = $boxen["id"];
    $catname = $boxen["catname"];
    echo '<input type="checkbox" name="selected[]" value="'.$catname.'" checked> '.$catname.'  ';
}
echo '<input type="submit" name="showcats" Value="Anzeigen"></p>';
if (isset($_REQUEST['selected'])) {
  //reset($_REQUEST['selected']);
  foreach ($_REQUEST['selected'] as $k => $v)
  {
    $getcatidfromcatname=mysql_query("SELECT id, catname FROM `tuning-cats` WHERE catname='$v'");
    $catids = mysql_fetch_array($getcatidfromcatname);
    $matchid = $catids["id"];
    echo '<br><div id="kattitel"><b>'.$v.'</b></div>'; //Ausgabe der Kategorie
    echo '<br><br>';
    $ergebnis=mysql_query("SELECT id, name, sdwert, beschr, empf, catid FROM tunings WHERE catid='$matchid' ORDER BY name ASC");
    while ($row = mysql_fetch_array($ergebnis) )
    {
    //Es folgt die Darstellung der Datensätze in speziell formatierten Tabellen    
    }
  }
?>
 
EDIT: Hab da Code net richtig angeschaut. Du hast es ja schon so ;)
EDIT2: Du musst den Checkboxen doch einen Wert (value) zuweisen. Dann musst du nur prüfen, ob der Wert ungleich LEER ist.
 
Zuletzt bearbeitet:
:suspekt: aha...sorry verstehe ich nicht :)

mein problem ist: ich habe, wenn ich auf Anzeigen geklickt habe, ein Array, das besteht aus
0 wert1
1 wert2
2 wert3
usw...
die erste zahl ist der key des arrays, der zweite wert ist der wert den ich halt der jeweiligen checkbox zugewiesen habe. aufgeführt werden halt nur die werte die auch wirklich angeklickt wurden

nun habe ich ja die whileschleife die erstmal alle kategorien auflistet. nehmen wir mal an es ist der erste durchgang und es wird die erste checkbox mit dem ersten value erstellt. wie soll ich dann ein if-statement oder was auch immer bauen, wenn ich als vergleichsreferenz ein array habe ?

wenn ich das array der checkboxen so hinbekommen/rausbekommen würde, dass es z.B: so aussieht:
0 on
1 on
2 off
3 off
4 on
....


dann wäre es einfacher. ich könnte in meine erste whileschleife einfach einen zähler einbauen und dann wäre der vergleich möglich...aber das array gibt mir ja nur aus was angeklickt wurde, und ich wenn da drei werte im array sind weiss ich nicht ob es die ersten drei checkboxen, oder die letzten drei oder was auch immer waren
 
Zuletzt bearbeitet:
Wenn die Checkbox nicht ausgewählt ist, wird ein leerer Wert zurückgegeben.
=>
PHP:
if($_REQUEST['selected'][$k] != "" AND !empty($_REQUEST['selected'][$k]))
{
     DANN MACH WAS;
}

EDIT: seh grad, dass du geschrieben hast, dass nichts zurückgegeben wird, wenn nichts ausgewählt wurde.

In dem Fall:
$_SESSION ? ?

$_SESSION[NAME_DER_KATEGORIE] = $i;

$i muss dabei die Kategorien zählen. Dann kannst du das nacher prüfen.
 
Zuletzt bearbeitet:
hmm...also ich habe das nach wie vor nicht hinbekommen =/

Ich komme mit dem von dir geschriebenen Code nicht ganz klar, also was der bezwecken soll. Könntest du ein Beispiel für "dann mach das" bringen ? Ich verstehe nicht, wie dieser Code auf einmal dafür sorgen soll, dass das Array auch nicht angeklickte Kästchen irgendwie als solche kennzeichnet.


Eine ganz anderen Möglichkeit wäre es, gar kein Array "selected[]" zu benutzen, sondern jeder Checkbox einen anderen Namen zu geben. Allerdings muss ich dann Teile des Scripts umbauen damit die Auswahl der Datensätze wieder funktioniert...
 
Zuletzt bearbeitet:
Und auch Dich moechte ich bitten Deinen Beitrag bezueglich Gross- und Kleinschreibung zu korrigieren und Dich auch in Zukunft daran halten.

:confused:
Was ist denn heute los? Ist allgemeine Shift-Drueck-Faulheit ausgebrochen?
Deutschlandweiter Tastatur-Crash?
 
problem von der "konkurrenz" sehr fix gelöst :eek:
PHP:
while ( $boxen = mysql_fetch_array($cats) )
{
	$catid = $boxen["id"];
	$catname = $boxen["catname"];
	$sel = '';
	if ( !isset($_POST['selected']) || isset($_POST['selected'][$catid]) && $_POST['selected'][$catid] == $catname )
        {$sel = 'checked="cecked"';}
	echo '<input type="checkbox" name="selected['.$catid.']" value="'.$catname.'" '.$sel.'> '.$catname.'  ';
}

MfG
 
So wie ich das sehe, ist dein Problem dann ja gelöst, oder?
Dann markiere das Thema doch bitte als erledigt. Danke
 
lol, natürlich ist das Problem gelöst, drum habe ich ja die Lösung extra nochmal gepostet :)

Ich weiss auch dass man den Thread dann als gelöst markieren soll...bloß weiss ich nicht, wie bzw. wo man das tun soll
EDIT: GEFUNDEN
 
Zurück