WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Arrayer i php (https://www.wn.se/forum/showthread.php?t=1042286)

klein 2010-05-30 13:52

Arrayer i php
 
Har ett formulär som ser ut så här :

<FORM METHOD="post">
<FIELDSET>
<LEGEND><B>HUR KOMMUNICERA VI MED KUNDEN?</B></LEGEND>
<P>
<INPUT TYPE="CHECKBOX" name="FORM_KUND_KONTAKT['SMS']" VALUE="ON" ID="0" <? echo GetChecked( $KUND_KONTAKT, 0); ?>>
<LABEL FOR="postal">SMS</LABEL>
<INPUT TYPE="CHECKBOX" NAME="FORM_KUND_KONTAKT['EMAIL']" VALUE="ON" ID="1" <? echo GetChecked( $KUND_KONTAKT, 1); ?>>
<LABEL FOR="email">E-post</LABEL>
<INPUT TYPE="CHECKBOX" NAME="FORM_KUND_KONTAKT['TELEFON']" VALUE="ON ID="2" <? echo GetChecked( $KUND_KONTAKT, 2); ?>>
<LABEL FOR="telefon">Telefon</LABEL>
</P>
<INPUT TYPE="SUBMIT" VALUE="S&Auml;ND">

</FIELDSET>

Php kod

$KUND_KONTAKT = $_REQUEST["FORM_KUND_KONTAKT"];

Nu vill jag har ut vilken kryssruta som kunden har klicka i..

Det mest logiska vore :

print $KUND_KONTAKT['SMS'];

Men det fungera, vad gör jag för fel?

KarlRoos 2010-05-30 13:54

Kod:

if(isset($KUND_KONTAKT['SMS'])){
echo 'du valde SMS';
}
elseif(isset($KUND_KONTAKT['EMAIL'])){
echo 'du valde e-mail';
}


tartareandesire 2010-05-30 16:08

Citat:

Ursprungligen postat av KarlRoos (Inlägg 20357342)
Kod:

if(isset($KUND_KONTAKT['SMS'])){
echo 'du valde SMS';
}
elseif(isset($KUND_KONTAKT['EMAIL'])){
echo 'du valde e-mail';
}


Eftersom det är kryssrutor och man lämpligtvis kan välja mer än ett alternativ i det här fallet så bör det nog inte vara elseif.

hnn 2010-05-30 22:26

Klein:

Bättre om du använder $_POST istället för $_REQUEST.

För $_GET kan skriva över $_POST om du använder $_REQUEST.

Den magiska ordningen är GPC -> $_GET, $_POST, $_COOKIES

KarlRoos 2010-05-31 16:13

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20357375)
Eftersom det är kryssrutor och man lämpligtvis kan välja mer än ett alternativ i det här fallet så bör det nog inte vara elseif.

Självklart är det så, jag tänkte att det var radio-knappar. Mitt fel!

klein 2010-06-01 09:55

Man kan inte använda isset för kolla innehåll array, man skall använda array_key_exists för detta, enligt se2.php.net . Det knepiga är , gör jag en print_r på strängen , så hittar jag innehållet :

Array ( ['SMS'] => ON )

Men kan får inte ut det med print variabel['SMS'];



Citat:

Ursprungligen postat av tartareandesire (Inlägg 20357375)
Eftersom det är kryssrutor och man lämpligtvis kan välja mer än ett alternativ i det här fallet så bör det nog inte vara elseif.


tartareandesire 2010-06-01 10:39

1. Det går alldeles utmärkt att använda isset även på array-variabler förutsatt att man använder det på rätt sätt. Ett array-element är på inget sätt annorlunda än en vanlig variabel.

2. Använd $_POST istället för $_REQUEST som redan sagts.

3. Vill du köra din variant så ta bort '' från key-värdena så fungerar det. Det är dock betydligt smidigare, och det som normalt används, att bara köra variabel[] som namn på fälten så får du en array per automatik. Då sätter du sms, email etc. som värde istället.

4. ID-värden ska inte börja med en siffra.

5. Sätt action-attribut på formuläret.

6. Sluttagg saknas på formuläret, men det kanske bara inte kom med här.

7. Använd inte stora bokstäver till allting, det blir så hiskligt fult och jobbigt att läsa :)

klein 2010-06-01 17:35

1) Hur är rätt sätt? Har skrivit print "<BR>".isset( $KUND_KONTAKT['SMS'] ); men får inte ut data.

2) Spelar någon roll.. Men visst, har ändra i koden.
3) Kan du ge ett kod exempel
4) Vad gör tagen ID?
5) Det finns! Det är samma fil, som laddar formuläret.
7) Jag tycker det är lättare och läsa HTML kod om den är i stor bokstäver..:-)

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20357645)
1. Det går alldeles utmärkt att använda isset även på array-variabler förutsatt att man använder det på rätt sätt. Ett array-element är på inget sätt annorlunda än en vanlig variabel.

2. Använd $_POST istället för $_REQUEST som redan sagts.

3. Vill du köra din variant så ta bort '' från key-värdena så fungerar det. Det är dock betydligt smidigare, och det som normalt används, att bara köra variabel[] som namn på fälten så får du en array per automatik. Då sätter du sms, email etc. som värde istället.

4. ID-värden ska inte börja med en siffra.

5. Sätt action-attribut på formuläret.

6. Sluttagg saknas på formuläret, men det kanske bara inte kom med här.

7. Använd inte stora bokstäver till allting, det blir så hiskligt fult och jobbigt att läsa :)


KarlRoos 2010-06-01 21:19

Citat:

Ursprungligen postat av klein (Inlägg 20357716)
1) Hur är rätt sätt? Har skrivit print "<BR>".isset( $KUND_KONTAKT['SMS'] ); men får inte ut data.

2) Spelar någon roll.. Men visst, har ändra i koden.
3) Kan du ge ett kod exempel
4) Vad gör tagen ID?
5) Det finns! Det är samma fil, som laddar formuläret.
7) Jag tycker det är lättare och läsa HTML kod om den är i stor bokstäver..:-)

1) if(isset($KUND_KONTAKT['SMS'])){
echo 'ON';
}

4) ID identifierar elementet i fråga.
7) Använd inte stora bokstäver...

klein 2010-06-02 07:18

Det där fungera dålig.. Skit skumt! Jag ser innehållet med print_r men inte med print $KUND_KONTAKT['SMS'];

7) Smak sak! Jag håller med delvis att bit 5 skall vara clearad när man skriver , men ibland i HTML kod är enklare att läsa, om man har bit 5 satt i ASCII Texten.

Citat:

Ursprungligen postat av KarlRoos (Inlägg 20357734)
1) if(isset($KUND_KONTAKT['SMS'])){
echo 'ON';
}

4) ID identifierar elementet i fråga.
7) Använd inte stora bokstäver...



Alla tider är GMT +2. Klockan är nu 22:16.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson