PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : checkbox mit PHP auswerten


mapel110
2008-05-29, 14:11:23
Dürfte für euch ein Klacks sein. Ich kriegs jedenfalls nicht hin.

<input type="checkbox" name="ausgabe_vermittlung" value="3838" >Vermittlung auswerten

Dann schreib ich mir in eine SESSION-Variable
$_SESSION["ausgabe_vermittlung"]=$_POST[ausgabe_vermittlung];

Die Abfrage funzt dann aber nicht :(
if (($Vermittlung) || ($_SESSION["ausgabe_vermittlung"]=="3838"))

Fehler? Ja, aber wo?

Kinman
2008-05-29, 14:17:55
Wenn die Checkbox nicht ausgewählt wurde, dann wird der Wert überhaupt nicht übertragen...


if (isset($_POST[ausgabe_vermittlung])) $_SESSION["ausgabe_vermittlung"]=$_POST[ausgabe_vermittlung];
else $_SESSION["ausgabe_vermittlung"] = false; //0 oder was auch immer


mfg Kinman

mapel110
2008-05-29, 14:44:24
hmja, okay. Ein Problem.

Aber ich hab gerade festgestellt:
In der SESSION steht 3838 drin. Aber dennoch prüft er falsch in der ODER-Abfrage. Wieso? ;(

if (($Vermittlung) || ($_SESSION["ausgabe_vermittlung"]=="3838"))

Er geht da einfach nicht rein, wenn die zweite Bedingung erfüllt ist.

Kinman
2008-05-29, 14:46:54
lass die "" mal weg ;)

mfg Kinman

mapel110
2008-05-29, 15:03:06
hm nee, daran liegts nicht.

Weder IE6 noch Opera 9.5 build 10014 machen es. Die zweite Bedingung wird weiterhin ignoriert.

Ich glaub, ich werd mal Elfeif testen...

/edit
if($_SESSION["ausgabe_vermittlung"]=="3838") $Vermittlung=1;

if ($Vermittlung)

Ich habs jetzt verschachtelt. Damit gehts. Kanns wirklich sein, dass Opera und IE6 ein Problem mit dem ODER haben? :O

Gast
2008-05-29, 15:10:27
Kanns wirklich sein, dass Opera und IE6 ein Problem mit dem ODER haben? :O

Sicher nicht den PHP wird Serverseitig verarbeitet. Kein Browser bekommt den Code zu sehen (zumindest wenn er in einem <?php ?> Block drin ist)

mapel110
2008-05-29, 15:12:51
ah okay. Daran hab ich nicht gedacht. PHP Version ist 4.4.7.

The_Invisible
2008-05-29, 15:23:26
hmja, okay. Ein Problem.

Aber ich hab gerade festgestellt:
In der SESSION steht 3838 drin. Aber dennoch prüft er falsch in der ODER-Abfrage. Wieso? ;(

if (($Vermittlung) || ($_SESSION["ausgabe_vermittlung"]=="3838"))

Er geht da einfach nicht rein, wenn die zweite Bedingung erfüllt ist.

die klammern bei der or abfrage kannst du weglassen, haben hier keinen sinn.

ansonsten würde ich mal debuggen mit zb printf("==%s==3838==", $_SESSION["ausgabe_vermittlung"]) ob der vergleich wirklich stimmt.

mfg

Matrix316
2008-05-29, 19:38:40
hmja, okay. Ein Problem.

Aber ich hab gerade festgestellt:
In der SESSION steht 3838 drin. Aber dennoch prüft er falsch in der ODER-Abfrage. Wieso? ;(

if (($Vermittlung) || ($_SESSION["ausgabe_vermittlung"]=="3838"))

Er geht da einfach nicht rein, wenn die zweite Bedingung erfüllt ist.
Ist das nicht normales Verhalten, dass wenn bei einem ODER eine Bedingung erfüllt ist, der ganze Ausdruck "True" ist? Oder sind beide "False" und er überprüft nur eine?

mapel110
2008-05-29, 20:10:16
So ist es auch gewollt. Eine der beiden Bedingungen soll True sein, damits weitergeht. Aber es tuts nicht.

Die 3838 steht in der SESSION-Variablen. Aber in dieser ODER-Abfrage ignoriert er sie. Na jetzt läuft ja die andere Lösung. Ich werd mir das Verhalten mal nach dem Praktikum in 10 Tagen genauer anschauen.

Sephiroth
2008-05-29, 20:42:03
Sicher das die Session-Variable vorher richtig gesetzt wurde? Schau sie dir am besten mit var_dump mal an.
Die Anführungszeichen um die Zahl herum sind OK, denn die GET- und POST-Variablen sind immer Strings (den Typ kann man erst mit HTML5 ändern (http://dev.w3.org/html5/web-forms-2/#extensions)). Macht aber auch keinen Unterschied, da 3838=="3838" auch wahr ist.

Übrigens: Wenn der Schlüssel eines Arrays ein String ist, dann setz den String auch in (einfache) Hochkommata.

esistich
2008-05-30, 18:24:20
hmja, okay. Ein Problem.

Aber ich hab gerade festgestellt:
In der SESSION steht 3838 drin. Aber dennoch prüft er falsch in der ODER-Abfrage. Wieso? ;(

if (($Vermittlung) || ($_SESSION["ausgabe_vermittlung"]=="3838"))

Er geht da einfach nicht rein, wenn die zweite Bedingung erfüllt ist.

das if $Vermittlung überprüft lediglich ob diese Variable gesetzt ist wenn du wissen willst ob diese Variable einen bestimmten Wert hat musst du dieses auch angeben also

if ($Vermittlung) == 3838 || $_SESSION["ausgabe_vermittlung"] == 3838)

mapel110
2008-05-30, 18:29:23
hehe, das ist mir schon klar. Ich will auch prüfen, ob diese Variable gesetzt ist. Ist sie es nicht, soll dieser Pfad auch nicht durchlaufen werden. Das funzte wie es soll.

Zusätzlich wollte ich halt mit dem ODER in Form von || noch eine zweite Bedingung haben. Aber das ging aus irgendwelchen Gründen nicht.

esistich
2008-05-30, 18:35:57
wenn du eine zweite Bedingung stellst, dann musst du dies mit AND bzw. && abfragen

also


if (isset($Vermittlung) && $_SESSION["ausgabe_vermittlung"] == 3838) {

}

Berni
2008-05-30, 18:36:49
Mir kommen die doppelten Anführungszeichen in
$_SESSION["ausgabe_vermittlung"]
komisch vor. Sollten das nicht generell einfache Anführungszeichen sein (und zwar durchgängig überall, auch bei der POST-Variablen!)?

esistich
2008-05-30, 18:39:33
Mir kommen die doppelten Anführungszeichen in
$_SESSION["ausgabe_vermittlung"]
komisch vor. Sollten das nicht generell einfache Anführungszeichen sein?

ich nehme in Array-Klammern grundsätzlich einfache Anführungszeichen aber doppelte sind nicht Falsch dazu ist PHP zu flexiebel.

mapel110
2008-05-30, 18:40:06
wenn du eine zweite Bedingung stellst, dann musst du dies mit AND bzw. && abfragen

also


if (isset($Vermittlung) && $_SESSION["ausgabe_vermittlung"] == 3838) {

}
Ich will aber ODER haben und nicht UND. ;(
Es soll nur eine der beiden Bedingungen reichen, um den Pfad zu durchlaufen.

esistich
2008-05-30, 18:44:16
Ich will aber ODER haben und nicht UND. ;(
Es soll nur eine der beiden Bedingungen reichen, um den Pfad zu durchlaufen.

OK dann habe ich was falsch verstanden

if (isset($Vermittlung) || $_SESSION["ausgabe_vermittlung"] == 3838) {

}

wenn die Variable $Vermittlung gesetzt ist oder dieSession "ausgabe_vermittlung" den Wert 3838 hat, dann...

so?

mapel110
2008-05-30, 18:56:51
Genau, aber das wollte nicht.


Deswegen hatte ich mir mit einer Verschachtelung beholfen. Das geht.

if($_SESSION["ausgabe_vermittlung"]=="3838") $Vermittlung=1;

if ($Vermittlung)




Also wenn ihr offenbar den Fehler auch nicht seht, dann war es wohl irgendein Tippfehler. Wäre nicht das erste Mal bei mir. ;(

esistich
2008-05-30, 19:03:27
Genau, aber das wollte nicht.


Deswegen hatte ich mir mit einer Verschachtelung beholfen. Das geht.

if($_SESSION["ausgabe_vermittlung"]=="3838") $Vermittlung=1;

if ($Vermittlung)




Also wenn ihr offenbar den Fehler auch nicht seht, dann war es wohl irgendein Tippfehler. Wäre nicht das erste Mal bei mir. ;(

bei deiner Verschachtelung passiert folgendes:

wenn die Session den Wert 3838 hat, wird der Variable $Vermittlung der Wert 1 verpasst danach wird abgefragt ob die Variable $Vermittlung gesetzt ist (was immer der Fall ist und somit keine dynamik enthält)

probiers nochmal mit meiner if-Anweisung

so ist es verschachtelt

if ($_SESSION["ausgabe_vermittlung"] == 3838) {
if (isset($Vermittlung)) {
}
}

mapel110
2008-05-30, 19:07:03
okay, wir reden aneinander vorbei. $Vermittlung wird nicht immer gesetzt durch die erste Abfrage. Sondern nur wenn die Bedingung davor erfüllt ist (SESSION=3838).
Aber ich hab mich wohl falsch ausgedrückt. Verschachtelt ist dafür nicht der richtige Begriff.

Berni
2008-05-31, 01:10:24
Möglicherweise hast du woanders einen Fehler im Code. Darum gibt es in andern Foren oft die Regel, einen funktionierenden Code zu posten an dem der Fehler nachvollzogen werden kann. Mit den 3 Zeilen kann dir wohl keiner weiterhelfen...