Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
vorherigen checkbox-wert ermitteln [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
vorherigen checkbox-wert ermitteln


 
NameZero912
08-12-2005, 19:28 
 
hallo an alle :)

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.

es existieren in der datenbank 2 tabellen. eine tabelle beinhaltet alle datensätze (an die 50 stück), und jeder datensatz wird nur einer kategorie zugeordnet, es existiert dafür hal eine palte "catid" in der tabelle. in der anderen tabelle stehen die kategorien selbst.

am anfang der seite werden alle kategorien (also nur der Name der Kategorie) 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 (damit er nicht erst alle von hand angklicken muss falls er alle kategorien angezeigt haben möchte). aber es könnte ja auch der andere fall eintreten: dass der user bereits ein paar boxen deselektiert hat und auf Anzeigen gedrückt hat.

es entstehen also 2 fälle:
Fall 1: der User hat die seite zum ersten mal aufgerufen: es werden also die bestehenden Kategorien samt checkbox angezeigt, alle haben die "checked" markierung, und der user kann auf anzeigen drücken
Fall 2: falls der submitbutton aber aktiviert wurde, sollen natürlich nur noch die checkboxen angeklickt sein die der user vorher auch angewählt hat. das problem das ich nun habe, ist, dass das array das die checkboxen erzeugt haben nur die werte anzeigen wird, die auch angeklickt wurden, nicht aber die, die nicht angeklickt wurden.

/*durch suchfunktion-nutzung kam dann etwas auf von wegen "isset" geschichte, dass man prüfen soll ob die variable gesetzt ist, und wenn nicht, dass die variable dann auf null gesetzt werden soll. aber das kann nicht wirklich funktionieren, und es hat auch nicht funktioniert*/


folgendermaßen sieht mein code bis jetzt aus:
echo '<form action="';
echo $_SERVER['PHP_SELF'];
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)
{
$getcatidforcatname=mysql_query("SELECT id, catname FROM `tuning-cats` WHERE catname='$v'");
$catids = mysql_fetch_array($getcatidforcatname);
$matchid = $catids["id"];
/*im array kann ich jeder checkbox leider nur einen wert zuweisen, . ich habe als wert den "catname" gewählt, da
der user auf jeden fall nochmal die Kategorie als überschrift sehen soll. wenn später die datensätze gewählt
werden, muss ich natürlich für die catname die entsprechende catid herausbekommen*/
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
}


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 aber 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 der while-schleife und es wird die erste checkbox mit dem ersten value erstellt. wie soll ich dann eine funktionierende kontrolle einbauen, wenn ich als vergleichsreferenz ein array habe ? da wäre die einzige möglichkeit eine art zähler ($i).

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 den $i zähler einbauen und dann wäre der vergleich möglich...
das könnte dann z.B. so aussehen:
while $boxen = mysql_fetch_array($cats) )
{
....
$i=0;
if ($_POST['selected[$i]'] == "on")
{echo " checked";}
$i++;
....
}

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

Habt ihr ne Idee wie man es trotzdem hinbekommt ?

 
Abraxax
08-12-2005, 19:59 
 
sorry. habe aber nur bis hierher gelesen ... :p

Original geschrieben von NameZero912
/*durch suchfunktion-nutzung kam dann etwas auf von wegen "isset" geschichte, dass man prüfen soll ob die variable gesetzt ist, und wenn nicht, dass die variable dann auf null gesetzt werden soll. aber das kann nicht wirklich funktionieren, und es hat auch nicht funktioniert*/


und das isset() ist genau deine gesuchte lösung, tippe ich mal. vorausgesetzt natürlich, dass du bei der ausgabe der CBs auch die id entsprechend mitgibst.

while ( $boxen = mysql_fetch_array($cats) )
{
$catid = $boxen["id"];
$catname = $boxen["catname"];
echo '<input type="checkbox" name="selected['.$catid.']" value="1" checked> '.$catname.' ';
}

schaue es dir mal an und teste ein wenig mit isset() rum.

wenn $_POST['selected'] nicht vorhanden ist, schalte alle an. ansonsten nur die, welche auch aktviert wurden ....

$_POST['selected'][$catid] == 1

und das isset() bei den ganzen abfragen natürlich nicht vergessen. ;)

 
Abraxax
08-12-2005, 20:02 
 
da will ich mal nicht so sein ... ;)
while ( $boxen = mysql_fetch_array($cats) )
{
$catid = $boxen["id"];
$catname = $boxen["catname"];
$sel = '';
if ( !isset($_POST['selected']) ||
isset($_POST['selected'][$catid]) && $_POST['selected'][$catid] == 1 )
$sel = 'checked="cecked"';
echo '<input type="checkbox" name="selected['.$catid.']" value="1" '.$sel.'> '.$catname.' ';
}

 
NameZero912
08-12-2005, 20:21 
 
ah, vielen dank, ich hab den code glaube ich sogar soweit verstanden!

die checkboxen werden alle selektiert wenn die variable selected noch garnicht existiert (also der user noch garnicht auf den submit button geklickt hat), oder wenn sie zwar existiert, aber dabei gleichzeitig 1 sein muss

Allerdings hatte dann plötzlich meine Abfrage der Datensätze nicht mehr funktioniert, da die variable $catname plötzlich nicht mehr im Spiel war. aber ich habe einfach an den stellen an denen du "1" geschrieben hattest die "1" durch $catname ersetzt, seitdem funktioniert alles so wie es soll

vielen dank nochmals für die hilfe!

ich habe in meinem ersten beitrag ja geschrieben:
/*durch suchfunktion-nutzung kam dann etwas auf von wegen "isset" geschichte, dass man prüfen soll ob die variable gesetzt ist, und wenn nicht, dass die variable dann auf null gesetzt werden soll. aber das kann nicht wirklich funktionieren, und es hat auch nicht funktioniert*/

ich hatte etwas ähnliches wie du es nun geschrieben hast bereits selbst probiert, aber ich wusste nicht wie man einen bestimmten wert im selected-array ansprechen kann und hatte es falsch geschrieben, nämlich so:
$_POST['selected[$catid]']
anstatt
$_POST['selected'][$catid]

MfG

 
Abraxax
08-12-2005, 22:01 
 
[...] durch $catname ersetzt [...] und wenn ein toller user die namen ändert, funktioniert auch nichts mehr. ich würde dir empfehlen aussschliesslich über die id's zu arbeiten.

diese kannst du leichter, schneller und effektiver prüfen und hast damit auch den vorteil, dass ein böser user nicht einfach so dein script unterwandern kann.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:57 Uhr.