Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

PHP code if/else shorthand wil niet werken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik probeer op een zo kort mogelijke manier een if/else statement short handed te schrijven maar ik bots tegen een niet werkende code. Kan je volgende op deze manier schrijven?

PHP:
1
$typeelektr = (isset($_POST['soortkeuring'] == ('kies' || 'choisi')) ? 'NVT' : $_POST['soortkeuring']);


kort uitgelegd:

$typeelektr is 'NVT' als $_POST['soortkeuring'] kies of choisi is en anders mag hij gewoon de value overnemen van $_POST['soortkeuring']

Ik weet niet zeker of ik die ('kies' || 'choisi') zomaar op deze manier mag gebruiken en misschien zit daar mijn probleem

Bedankt!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik weet niet zeker of ik die ('kies' || 'choisi') zomaar op deze manier mag gebruiken en misschien zit daar mijn probleem
Als je dat niet zeker weet, waarom probeer je dat dan niet te isoleren en uit te vinden? :)

Want ja, daar zit inderdaad je probleem.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Niet alleen daar, er zit ook een probleem in het verkeerde gebruik van isset.

[ Voor 13% gewijzigd door NMe op 12-06-2014 15:48 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Joolee
  • Registratie: Juni 2005
  • Niet online
Wat er nu gebeurt in stappen:
$_POST['soortkeuring'] == ('Kies' || 'choisi')

('Kies' || 'choisi') Is een boolean vergelijking dus wordt omgezet naar
(true || true) wat resulteert in true

$_POST['soortkeuring'] == true
== is een type onafhankelijke vergelijking. Om twee verschillende types te vergelijken worden deze omgezet naar hetzelfde type.

Als $_POST['soortkeuring'] gelijk is aan undefined, null, 0 of "" dan is staat deze voor false, anders true. Laten we uit gaan dat er iets in zit en dus geldt als true, dan krijg je dus de vergelijking:
true == true wat weer resulteert in true.

Uiteindelijk wordt er dus uitgevoerd: isset(true)
Aangezien isset alleen gebruikt kan worden als deze een variabele als waarde krijgt en niet met iets anders, zal je een foutmelding krijgen ;)

[ Voor 3% gewijzigd door Joolee op 12-06-2014 15:58 ]


Verwijderd

Topicstarter
.oisyn schreef op donderdag 12 juni 2014 @ 15:45:
[...]

Als je dat niet zeker weet, waarom probeer je dat dan niet te isoleren en uit te vinden? :)

Want ja, daar zit inderdaad je probleem.
Wel dat heb ik wel geprobeerd hoor en dan lukte het nog niet, ik vroeg me gewoon af ben ik verplicht om 2x mijn $_POST['soortkeuring'] voluit te schrijven zoals dit:

$_POST['soortkeuring'] == 'kies' || $_POST['soortkeuring'] == 'choisi'

of kon ik het zo kort schrijven als hieronder. Ik heb het op de hele gewone manier wel al werkende gekregen maar het oogde voor mij net iets te groot qua code.

@NME ik begrijp volledig wat je wil bedoelen maar kan je niet een controle doen of $_POST['soortkeuring'] wel effectief een value heeft en tegelijk ook controleren of die values 'kies' of 'choisi' zijn. Hierom vraag ik het is dit alles wel mogelijk zoals ik het hier voorstel.

Het geeft geen zin om dit verder geïsoleerd te testen als ik zelfs niet weet of mijn poging wel volgens de normen is....

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Verwijderd schreef op donderdag 12 juni 2014 @ 15:57:
[...]


Wel dat heb ik wel geprobeerd hoor en dan lukte het nog niet, ik vroeg me gewoon af ben ik verplicht om 2x mijn $_POST['soortkeuring'] voluit te schrijven zoals dit:

$_POST['soortkeuring'] == 'kies' || $_POST['soortkeuring'] == 'choisi'

of kon ik het zo kort schrijven als hieronder. Ik heb het op de hele gewone manier wel al werkende gekregen maar het oogde voor mij net iets te groot qua code.

@NME ik begrijp volledig wat je wil bedoelen maar kan je niet een controle doen of $_POST['soortkeuring'] wel effectief een value heeft en tegelijk ook controleren of die values 'kies' of 'choisi' zijn. Hierom vraag ik het is dit alles wel mogelijk zoals ik het hier voorstel.

Het geeft geen zin om dit verder geïsoleerd te testen als ik zelfs niet weet of mijn poging wel volgens de normen is....
Als je direct wilt vergelijken met meerdere mogelijke waarden zou je in_array kunnen gebruiken met een statische array aan opties ;)
Dan zit je alleen nog met een warning wanneer de variabele helemaal niet bestaat. Dáár is isset voor.
isset() && in_array()

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op donderdag 12 juni 2014 @ 15:57:
[...]


Wel dat heb ik wel geprobeerd hoor en dan lukte het nog niet
Met isoleren bedoel ik dat je ook echt alleen dát probeert, zodat je niet het risico loopt dat het niet werkt om een andere reden.

Als je denkt: "goh, ik vraag me af of je die vergelijking ook zo kan doen", dan maak je gewoon een simpel scriptje:
PHP:
1
2
3
4
5
$a = "iets";
if ($a == ("iets" || "iets anders"))
    echo "het werkt";
else
    echo "het werkt niet";


Als je dat runt dan komt er "het werkt niet" uit en dan kun je weer verder
ik vroeg me gewoon af ben ik verplicht om 2x mijn $_POST['soortkeuring'] voluit te schrijven zoals dit:

$_POST['soortkeuring'] == 'kies' || $_POST['soortkeuring'] == 'choisi'
Ja. Of je moet iets doen met in_array($_POST["soortkeuring"], array("kies", "choisi")), maar heel duidelijker wordt het er niet van.
@NME ik begrijp volledig wat je wil bedoelen maar kan je niet een controle doen of $_POST['soortkeuring'] wel effectief een value heeft en tegelijk ook controleren of die values 'kies' of 'choisi' zijn. Hierom vraag ik het is dit alles wel mogelijk zoals ik het hier voorstel.
Probeer het voor jezelf logisch uit te denken.

Als 'soortkeuring' gezet is én { hij is gelijk aan "kies" of hij is gelijk aan "choisi" }, dan...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Bedankt Joolee, zover had ik nog niet gedacht en uw hulp heeft mij direct doen inzien hoe ik het wel hoef te doen. Nu kan ik verder aan de slag!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Verwijderd schreef op donderdag 12 juni 2014 @ 15:57:
[...]

@NME ik begrijp volledig wat je wil bedoelen maar kan je niet een controle doen of $_POST['soortkeuring'] wel effectief een value heeft en tegelijk ook controleren of die values 'kies' of 'choisi' zijn. Hierom vraag ik het is dit alles wel mogelijk zoals ik het hier voorstel.
Je kan allerlei controles doen. Wat jij wil doen kan, op de meest geaccepteerde manier, waarschijnlijk het beste zo:
PHP:
1
$typeelektr = (isset($_POST['soortkeuring']) && in_array($_POST['soortkeuring'], array('kies', 'choisi'))) ? 'NVT' : $_POST['soortkeuring'];

Korter zou het ook kunnen, maar dat is eigenlijk niet netjes:
PHP:
1
$typeelektr = (in_array(@$_POST['soortkeuring'], array('kies', 'choisi'))) ? 'NVT' : $_POST['soortkeuring'];

Zoals je ziet wordt het al snel een erg lange en onoverzichtelijke regel en dus zou ik gewoon een if gebruiken. :)
Het geeft geen zin om dit verder geïsoleerd te testen als ik zelfs niet weet of mijn poging wel volgens de normen is....
Maar je had al een vermoeden waar de fout zit? Dan ga je toch daarmee spelen? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Bedankt allen en in het vervolg zal ik eventueel toch meer de moeite doen om alles even te isoleren. Intussen hebben de kleine tips al wonderen gedaan. Ik ben intussen nog maar een jaar echt bezig met constant aan het programmeren als 2e job en nog ben ik niet gedaan met bijleren.

@NMe ik hoefde niet direct een uitgeschreven oplossing te hebben, al ben ik er zeer tevreden mee nu zie ik hoe ik het wel had kunnen doen. Ik werk jammer genoeg nog te weinig met arrays (behalve dan de $_POST of $_SESSION array en daarom stuur ik mijn logische gedachte veel de verkeerde kant op...

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Als je al een jaar bezig bent met programmeren en je nog steeds vrijwel nooit gebruik maakt van arrays (zeker in PHP) dan doe je er misschien goed aan om even goed in te lezen hoe ze werken. Arrays zijn een bijzonder belangrijk onderdeel van het programmeren en zijn bijvoorbeeld vrijwel altijd nodig om te voorkomen dat je jezelf herhaalt in je code. Als je dit soort basale dingen niet weet kun je beter even stoppen met programmeren, leren hoe het wel moet en dan pas verdergaan.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
NMe schreef op donderdag 12 juni 2014 @ 16:19:
Als je al een jaar bezig bent met programmeren en je nog steeds vrijwel nooit gebruik maakt van arrays (zeker in PHP) dan doe je er misschien goed aan om even goed in te lezen hoe ze werken. Arrays zijn een bijzonder belangrijk onderdeel van het programmeren en zijn bijvoorbeeld vrijwel altijd nodig om te voorkomen dat je jezelf herhaalt in je code. Als je dit soort basale dingen niet weet kun je beter even stoppen met programmeren, leren hoe het wel moet en dan pas verdergaan.
Jawel de kennis bezit ik toch voldoende maar voor mijn toepassingen (meestal HTML, CSS en beetje Javascript) heb ik die nog maar zelden moeten boven halen :) . Ik maak nu nog enkel maar websites voor kleine KMO's dus grote en lange lijnen PHP moet ik nooit maken.
Pagina: 1