[PHP] Code lijkt niet te werken zoals het hoort

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Arcane Apex
  • Registratie: Juni 2003
  • Laatst online: 30-01 15:19
De volgende code moet een afbeelding tonen wanneer men ingelogd is, echter wanneer men uitgelogd is moet een andere afbeelding getoond worden. Het vreemde is dat deze code niet lijkt te werken, echter heb ik geen idee waarom. Wanneer men de variabele $loggedin op true zet, dan worden beide afbeeldingen gerenderd op de webpagina. Wanneer men de variabele $loggedin op false zet, dan worden beide ook afbeeldingen gerenderd op de webpagina. Iemand enig idee wat het probleem is, want een if/else statement lijkt me toch vrij duidelijk voor de parser, het ene of het andere, waarom is de output dan toch dat beide afbeeldingen gerenderd worden?

-

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div id="layout">
<?
    if ($loggedin) {
    ?>
        <img src="/images/layout_015_06.png" width="82" height="21" alt="" />
    <?
    }
    else {
    ?>
        <img src="/images/layout_015_06_login.png" width="82" height="21" alt="" />
    <?
    }
?>  
</div>

Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Ik denk dat het handig is als je meer van je code laat zien. Wat staat er in de $loggedin en hoe word dit erin gezet bijvoorbeeld.

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

Verwijderd

En wat gebeurt er als je de plaatjes ook laat printen door PHP, dus niet zoals nu via HTML?

Acties:
  • 0 Henk 'm!

  • Guidance
  • Registratie: Augustus 2003
  • Laatst online: 29-08-2019
Tja. Je zegt als $loggedin bestaat, dan is het goed.

Probeer het volgende om problemen te voorkomen:
if($loggedin == true){ // of een andere waarde die je hebt toegekend. Hij gaat hier alleen naar Else als empty($loggedin).
print "<img src=\"/images/layout_015_06.png\" width=\"82\" height=\"21\" />";
}
else
{
print "<img src=\"/images/layout_015_06_login.png\" width=\"82\" height=\"21\" alt=\"\" />";
}

Bovendien moet je er rekening mee houden dat als $loggedin een variabele is die je via GET wilt overhalen, dit alleen werkt bij oudere PHP-versies.

[ Voor 9% gewijzigd door Guidance op 06-11-2007 15:41 ]


Acties:
  • 0 Henk 'm!

  • Arcane Apex
  • Registratie: Juni 2003
  • Laatst online: 30-01 15:19
$loggedin is een variable welke door een login script op true of false wordt gezet. De definitie van de variabele gaat alsvolgt:

code:
1
$loggedin=false;

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Wat is de waarde van $loggedin? Print die eens dmv var_dump:

code:
1
var_dump($loggedin);

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Marc3l
  • Registratie: December 2005
  • Laatst online: 22-09 15:53
Dan werkt je script dus wel goed.
Je variabele bestaat immers. Zoals al is neergezet moet je kijken of hij true of false is.

Acties:
  • 0 Henk 'm!

  • Arcane Apex
  • Registratie: Juni 2003
  • Laatst online: 30-01 15:19
Guidance schreef op dinsdag 06 november 2007 @ 15:39:
Tja. Je zegt als $loggedin bestaat, dan is het goed.

Probeer het volgende om problemen te voorkomen:
if($loggedin == true){ // of een andere waarde die je hebt toegekend. Hij gaat hier alleen naar Else als empty($loggedin).
print "<img src=\"/images/layout_015_06.png\" width=\"82\" height=\"21\" />";
}
else
{
print "<img src=\"/images/layout_015_06_login.png\" width=\"82\" height=\"21\" alt=\"\" />";
}

Bovendien moet je er rekening mee houden dat als $loggedin een variabele is die je via GET wilt overhalen, dit alleen werkt bij oudere PHP-versies.
Is niet if($loggedin==true ) hetzelfde als if($loggedin) waar de laatste alleen een verkorte vorm is ?
Ik heb overigens ook de eerste geprobeerd, echter gaf dat als resultaat dat helemaal geen afbeelding getoond werd.

[ Voor 9% gewijzigd door Arcane Apex op 06-11-2007 15:44 ]


Acties:
  • 0 Henk 'm!

  • Guidance
  • Registratie: Augustus 2003
  • Laatst online: 29-08-2019
Dus even een debug: print $loggedin; vlak voor het uitvoeren. Overigens denk ik dat je het met Print <html> al hebt opgelost.

Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Laatst online: 21:47
En als je gebruikt:
PHP:
1
if(isset($loggedin))

Werkt ie dan wel, kijk eens waar je $loggedin op true/false zet. Wss zit deze ook om een if constructie en wellicht komt ie daar nooit op true/false? :)

Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Als beiden getoond worden lijkt PHP niet te werken. De if ... then ... else lijkt mij gezond dus doemen er andere vragen op:

1. is de extentie wel php?
2. doe eens een echo/printf voor de if conditie ?

edit:
Gevonden:

3. Klopt je php tag wel? <? ... ?> voor <?php .. ?>

[ Voor 16% gewijzigd door hamsteg op 06-11-2007 15:46 ]

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • Guidance
  • Registratie: Augustus 2003
  • Laatst online: 29-08-2019
ID-College schreef op dinsdag 06 november 2007 @ 15:43:
En als je gebruikt:
PHP:
1
if(isset($loggedin))

Werkt ie dan wel, kijk eens waar je $loggedin op true/false zet. Wss zit deze ook om een if constructie en wellicht komt ie daar nooit op true/false? :)
als je de variabele binnen die if/then pas aanmaakt, is dat inderdaad een probleem. Daarom even debuggen.

Heb je het al geprobeerd met print ""?

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
de waarde van $loggedin zou natuurlijk niet moeten boeien... die reacties zijn ook weinig nuttig... het is een if...then...else constructie, dus OF het een OF het ander moet worden uitgevoerd, niet beiden... ongeacht de waarde van $loggedin...
ik denk dat er in de code die we niet zien iets gebeurd dat dit veroorzaakt... een loopje, of whatever... of idd wat hamsteg zegt...

[ Voor 3% gewijzigd door P.O. Box op 06-11-2007 15:46 ]


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Arcane Apex schreef op dinsdag 06 november 2007 @ 15:42:
[...]


Is niet if($loggedin==true ) hetzelfde als if($loggedin) waar de laatste alleen een verkorte vorm is ?
Ik heb overigens ook de eerste geprobeerd, echter gaf dat als resultaat dat helemaal geen afbeelding getoond werd.
PHP doet standaard niet aan type-matching (of hoe dat heet), waarbij zowel een string, een getal als true allemaal zorgen dat de eerste if wordt uitgevoerd. Je eerste voorbeeld klopt overgens niet, wanneer je matched met === (let op: 3 is-tekens), dan wordt er wél op type gematched, en zal alleen de eerste if uitgevoerd worden wanneer $loggedin exht true is, en niet bij een string of iets.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Zerotorescue
  • Registratie: November 2006
  • Laatst online: 09-09 11:01
Omdat ze allebei worden weergegeven denk ik dat het komt doordat je PHP code niet wordt uitgevoerd, misschien staat short tags uit?

Probeer dit eens:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<div id="layout">
<?php
if($loggedin) {
?>
<img src="/images/layout_015_06.png" width="82" height="21" alt="" />
<?php
} else {
?>
<img src="/images/layout_015_06_login.png" width="82" height="21" alt="" />
<?php
}
?>    
</div>


Het is natuurlijk beter als je "echo" gebruikt dan de PHP sluit en weer heropent.

Acties:
  • 0 Henk 'm!

  • Palomar
  • Registratie: Februari 2000
  • Niet online
Volgens mij kijkt:

if ($loggedin)

alleen of de string $loggedin uberhaupt een waarde heeft. En zowel 'true' als 'false' zijn een waarde, en dus is ie altijd juist. Je kunt beter checken met 'if ($loggedin == "true")' denk ik. Of '$loggedin' ook echt leeg laten als ie false moet zijn.

[ Voor 8% gewijzigd door Palomar op 06-11-2007 15:50 ]


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Palomar schreef op dinsdag 06 november 2007 @ 15:48:
alleen of de string $loggedin uberhaupt een waarde heeft. En zowel 'true' als 'false' zijn een waarde, en dus is ie altijd juist. Je kunt beter checken met 'isset' denk ik. Of '$loggedin' ook echt leeg laten als ie false moet zijn.
Nee. Kijk even wat php doet met dit soort dingen voor gewoonweg wat te posten :)

Kan de TS nu nog meer code neerzetten of moet iedereen hier blijven gokken wat je mischien aan het doen bent?

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

ZeRoDeaD schreef op dinsdag 06 november 2007 @ 15:47:
Het is natuurlijk beter als je "echo" gebruikt dan de PHP sluit en weer heropent.
Dat is een eeuwige discussie waar ik een andere mening over heb. Zoals het hier staat is het makkelijker op deze manier te onderhouden. Zou het uit een dBase komen dan ben ik het met je eens.

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Shorttags staan uit.

Spuit 11...

[ Voor 38% gewijzigd door CodeCaster op 06-11-2007 15:51 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Zerotorescue
  • Registratie: November 2006
  • Laatst online: 09-09 11:01
Palomar schreef op dinsdag 06 november 2007 @ 15:48:
Volgens mij kijkt:

if ($loggedin)

alleen of de string $loggedin uberhaupt een waarde heeft. En zowel 'true' als 'false' zijn een waarde, en dus is ie altijd juist. Je kunt beter checken met 'isset' denk ik. Of '$loggedin' ook echt leeg laten als ie false moet zijn.
if($loggedin) kijkt of de waarde niet false is. Al het andere is true. Dus, dit is allemaal true:

$loggedin = 1;
$loggedin = "1";
$loggedin = true;
$loggedin = TRUE;

Maar dit is false:

$loggedin = false;
$loggedin = FALSE;
$loggedin = FaLsE;
unset($loggedin);

Acties:
  • 0 Henk 'm!

  • Mad Marty
  • Registratie: Juni 2003
  • Laatst online: 00:03

Mad Marty

Je bent slimmer als je denkt!

Als je "$loggedin = false" doet is $loggedin ook geset, dus dan zou een 'isset' net zo goed true teruggeven, toch? Waarom gebruik je niet 'if $loggedin == true' en '$loggedin == false'?

Rail Away!


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

ALLEN:

Even lezen; ongeacht de waarde van de variabele worden beide condities afgedrukt. Zou dit door PHP geprocessed worden dan kan dat niet. De if constructie is correct dus blijkbaar staat PHP buitenspel!

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

hamsteg schreef op dinsdag 06 november 2007 @ 15:56:
ALLEN:

Even lezen; ongeacht de waarde van de variabele worden beide condities afgedrukt. Zou dit door PHP geprocessed worden dan kan dat niet. De if constructie is correct dus blijkbaar staat PHP buitenspel!
True. ;)

Maar imho is dit toch een typisch gevalletje slecht/niet debuggen, gewoon op GoT posten, nofi.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

hamsteg schreef op dinsdag 06 november 2007 @ 15:56:
Even lezen; ongeacht de waarde van de variabele worden beide condities afgedrukt. Zou dit door PHP geprocessed worden dan kan dat niet. De if constructie is correct dus blijkbaar staat PHP buitenspel!
^^

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • Palomar
  • Registratie: Februari 2000
  • Niet online
disjfa schreef op dinsdag 06 november 2007 @ 15:50:
[...]

Nee. Kijk even wat php doet met dit soort dingen voor gewoonweg wat te posten :)

Kan de TS nu nog meer code neerzetten of moet iedereen hier blijven gokken wat je mischien aan het doen bent?
Was even in de war gebracht omdat iemand 'if(isset...) had gepost en ik in de veronderstelling was dat dat van de ts was (dan gaat mijn verhaaltje wel op)...... excuses..

Verder weet ik niet of het uitmaakt, maar ik gebruik altijd <?php ipv. <? om php-code te starten. Je zou het kunnen proberen...

Verder vraag ik me ook af of zn server wel PHP ondersteunt of dat het bestand wel eindigt op .php... Lijkt wel alsof ie als een gewoon html-bestand wordt geopend. Werkt andere php-code in dat bestand op die plaats wel??

[ Voor 14% gewijzigd door Palomar op 06-11-2007 16:10 ]


Acties:
  • 0 Henk 'm!

  • Mint
  • Registratie: Mei 2005
  • Laatst online: 22:11
Kun je niks met isset doen, of dat je een session aanmaakt? Dat zou wel gewoon moeten werken :)

Acties:
  • 0 Henk 'm!

  • Arcane Apex
  • Registratie: Juni 2003
  • Laatst online: 30-01 15:19
Een moment of shame is hier wel op zijn plaats denk ik. Iemand waarmee ik samenwerk heeft het probleem gevonden. Na dagen proberen uit te zoeken wat het probleem kon zijn bleek het bestand waarin de code zich bevond niet een .php bestand, maar een .html bestand. Waardoor natuurlijk alle html-code zowiezo gewoon uitgevoerd werd en er niet eens naar $loggedin of een if/else statement gekeken werd. Sorry heren. Mea Culpa.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Arcane Apex schreef op dinsdag 06 november 2007 @ 16:12:
Een moment of shame is hier wel op zijn plaats denk ik. Iemand waarmee ik samenwerk heeft het probleem gevonden. Na dagen proberen uit te zoeken wat het probleem kon zijn bleek het bestand waarin de code zich bevond niet een .php bestand, maar een .html bestand. Waardoor natuurlijk alle html-code zowiezo gewoon uitgevoerd werd en er niet eens naar $loggedin of een if/else statement gekeken werd. Sorry heren. Mea Culpa.
Dan moet je toch ook in "view source" in je browser de "PHP satetements" hebben gezien :? En ging er toen geen lichtje branden?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Het antwoord stond hier al 7 minuten na je post ... debuggen betekent ook even logisch nadenken ! Een if ... then ... else kan nooit beide takken processen.

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Arcane Apex schreef op dinsdag 06 november 2007 @ 16:12:
Een moment of shame is hier wel op zijn plaats denk ik. Iemand waarmee ik samenwerk heeft het probleem gevonden. Na dagen proberen uit te zoeken wat het probleem kon zijn bleek het bestand waarin de code zich bevond niet een .php bestand, maar een .html bestand. Waardoor natuurlijk alle html-code zowiezo gewoon uitgevoerd werd en er niet eens naar $loggedin of een if/else statement gekeken werd. Sorry heren. Mea Culpa.
goed dat je nog even publiekelijk de schaamte in ontvangst komt nemen :)
maar je hebt wel feilloos bloot gelegd hoe goed mensen lezen en hoe onnadenkend er antwoord gegeven wordt :)

Acties:
  • 0 Henk 'm!

Verwijderd

laat maar..... ;)

[ Voor 97% gewijzigd door Verwijderd op 06-11-2007 19:21 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Kijk even in de source van je output, staat daar doodleuk je If-statement bij dan werkt je PHP om de een of andere rede niet. Verder geen probleem qua code, die is prima zo :).

Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

Arcane Apex schreef op dinsdag 06 november 2007 @ 15:42:
[...]


Is niet if($loggedin==true ) hetzelfde als if($loggedin) waar de laatste alleen een verkorte vorm is ?
Ik heb overigens ook de eerste geprobeerd, echter gaf dat als resultaat dat helemaal geen afbeelding getoond werd.
Nope. Op deze manier controleer je of $loggedin een waarde heeft. Als de waarde null of false is dan krijg je de else voor je kiezen.

PHP:
1
2
3
4
5
6
7
8
9
10
$Foo = 'abc';

if($Foo)
{
    echo 'ja!';
} else
{
    echo 'nee..';
}
// output: ja!
Pagina: 1