Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.
[MOSMS] Få tag i priset
Nu var det länge sen, men du skulle kunna prova:
// Plocka ut priset slutanvändaren blev debiterad (för egen vinststatistik)
(int)$tariff = $_REQUEST['tariff'];
Det tvingar variabled $tariff att räknas som en siffra.
En annan lösning är att behandla det som en sträng: (ej rekommenderat)
if($tariff == "190")
{
echo '190 kr';
}
Eftersom jag satte hartassar runt siffran är det inte längre en siffra utan en sträng med "bokstäver".
Nu var det länge sen, men du skulle kunna prova:
// Plocka ut priset slutanvändaren blev debiterad (för egen vinststatistik)
(int)$tariff = $_REQUEST['tariff'];
Det tvingar variabled $tariff att räknas som en siffra.
En annan lösning är att behandla det som en sträng: (ej rekommenderat)
if($tariff == "190")
{
echo '190 kr';
}
Eftersom jag satte hartassar runt siffran är det inte längre en siffra utan en sträng med "bokstäver".
PHP är så "slappt" att saker som:
$ php -r '$a = 50; if ($a == "50") echo "OK\n"; else echo "--\n";'
OK
$ php -r '$a = "50"; if ($a == 50) echo "OK\n"; else echo "--\n";'
OK
$ php -r '$a = "50"+1; if ($a == 51) echo "OK\n"; else echo "--\n";'
OK
alla fungerar. Vill man inkludera datatyp i jämförelsen så får man använda operatorn `===':
$ php -r '$a = 50; if ($a === "50") echo "OK\n"; else echo "--\n";'
--
$ php -r '$a = "50"; if ($a === 50) echo "OK\n"; else echo "--\n";'
--
$ php -r '$a = "50"+1; if ($a === 51) echo "OK\n"; else echo "--\n";'
OK
I sista fallet ser vi att `"50"+1`, dvs additionen av en sträng och en `int`, automatiskt konverteras till en `int`.
Att `$tariff` alltid är "== 0" för trådskaparen är troligen för att den får det booleanska värdet `False`, alternativt `NULL`, som evaluerar till just `0`:
$ php -r '$a = False; if ($a === 0) echo "OK\n"; else echo "--\n";'
--
$ php -r '$a = False; if ($a == 0) echo "OK\n"; else echo "--\n";'
OK
$ php -r '$a = NULL; if ($a == 0) echo "OK\n"; else echo "--\n";'
OK
Att `$tariff` är `False` skulle kunna tyda på att anropet misslyckats, och/eller så är `$_REQUEST['$tariff']` helt enkelt inte satt, och då returneras `NULL`. Använd exempelvis `var_dump()` för att få full koll på vad som gömmer sig i en variabel:
$ php -r '$a = False; var_dump($a);'
bool(false)
Notera alltså hur PHP hanterar ett index som inte existerar:
$ php -r '$a = []; if ($a["tariff"] == 0) echo "OK\n"; else echo "--\n";'
PHP Notice: Undefined index: tariff in Command line code on line 1
OK
Har man inte aktiverat alla varningar (se `error_reporting`) så får man inte ens en "PHP notice", och PHP tolkar alltså ett icke-existerande vektorindex som `NULL`, vilket också är `0`:
$ php -r '$a = []; var_dump($a["tariff"]);'
PHP Notice: Undefined index: tariff in Command line code on line 1
NULL
Kort sagt, så om man vill göra jämförelser där `False` och `NULL` kan ha oväntade följder, vilket gäller hyfsat ofta, så får man se till att få koll på `===`. Mer information om hur PHP använder `==` och `===` (och varianter som `!==`, etc.) finns i manualen.
En relaterad vanlig fälla är hur strängen "0" hanteras: vad ger egentligen `empty("0")`?
// Stäng av PHP:s felrapportering
error_reporting(0);
Det låter som en dålig idé under utvecklingsarbetet. Stäng av det när tjänsten är "live" för all del, men under utvecklingen är det ju ovärderlig information i felrapporter och varningar. Tanken är inte att detta ska användas för att få PHP att "hålla tyst" om en massa saker för sakens skull, utan man bör i vilket fall lösa alla varningar och fel innan koden körs skarpt.
- Igår Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord 11
- Igår Rykte: Switch 2 släpps i höst – OLED-variant dröjer 35
- Igår Iphones marknadsandel faller i USA 43
- 25 / 4 Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk 92
- 25 / 4 Nu stiger hårddiskpriserna med uppemot 10 procent 23
- Krönika: "Early access" är utstuderad girighet34
- Budgetburk AM4, passande beggat grafikkort?4
- RX 7900XT/XTX Owners Club860
- Formel 1-tråden8891
- Övriga Fynd – Diskussionstråd1263
- Problem med GPU0
- Hjälp med nyinköpt nätagg: BeQuiet Pure Power 12M. Har jag köpt fel?2
- Sur, Ledsen, Galen?! Skriv av er här!21523
- Mekaniska tangentbord – Allmän diskussion6999
- Guide: Sätta upp en RAM-disk för Nvidia Instant Replay (f.d. Shadowplay)75
- Säljes Säljer helt NYTT Vengeance 32GB RGB DDR5 6000Mhz
- Säljes Bärbar ASUS 4800H, RTX 2060, 512 GB SSD, 16 GB RAM
- Säljes Helt NYTT Gigabyte Z790 Aorus Elite AX.
- Säljes Valve Index VR Kit
- Köpes Playstation 4 Pro
- Säljes 2x Xeon 5365 3.0GHz + 8gb DDR2 667MHz + Nvidia GT7300 GPU
- Säljes Lian Li O11 Dynamic XL svart samt 360mm radiatorer
- Säljes Xbox Elite Wireless Series 2 handkontroll
- Bytes Ny RM750x mot SFX
- Säljes RX 6800 XT Asus Strix LC OC och Samsung Odyssey G7 27"
- Krönika: "Early access" är utstuderad girighet34
- Övergivet skadeprogram infekterar miljontals maskiner11
- Helgsnack: Är all reklam till ondo?67
- Microsoft släpper källkoden till MS‑DOS 4.0016
- Ny caps lock-symbol i Windows förbryllar HP-användare20
- Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord11
- Rykte: Switch 2 släpps i höst – OLED-variant dröjer35
- NetonNet varnar om läckta kunduppgifter23
- Premiär på SweClockers! Månadens drop med gamingskärm hos Elgiganten74
- IT-bolag: Teknikstrul är största tidsboven idag42