[php] Variabele houd zijn waarde niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Ik ben bezig met een admin site voor WAP telefoons voor een product van mij. Gaat allemaal prima eignelijk, behalve dat op het crusiaal punt, het kijken of je al dan niet een geldige gebruiker bent en daarmee actie ondernemen.

De variabele $geldig is 'ja' of 'nee' Als het 'ja' is heb je toestemming op deze site te komen, is het 'nee' moet je van de site af.

Op regel 86 vind de controle plaats, maar wat blijkt...
Of $geldig nu 'ja' of 'nee' is, altijd wordt regel 88 uitgevoerd.

Als ik regel 88 er uit haal, en dan uitvoor, laat hij op regel 100 'ja' zien als ik regel 88 er in laat wordt op de 'verboden' pagina een 'nee' getoond. Als ik regel 86 de if statement aanpas in bijvb 1 == 2 dan wordt op de 'verboden' pagina een 'ja' getoond.

Dus het lijkt er op dat regel 86 geen vergelijking doet maar waardes overdraat. Maar als ik regel 88 niet laat uitvoeren dan is de output op regel 100 wel steeds juist...

Ik snap het niet meer :'(

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?
// verbinding met mysql server

// wml wap header
ini_set("arg_seperator.output", "/");  // nodig om te zorgen dat parameters goed gaan
header("Content-Type: text/vnd.wap.wml");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");    
header("Cache-Control: no-cache, must-revalidate");    
header("Pragma: no-cache");

// haal gegevens op van site die bekeken wenst te worden
list($wie) = explode("/", substr($PATH_INFO,1));

// handle user
$sql = "select id, host, db, dbuser, paswd from xime_users where usernaam = '".$wie."'";
$res = mysql_query($sql);
$row_user = mysql_fetch_array($res);

// switch server
mysql_close();
@mysql_connect($row_user[host], $row_user[dbuser], $row_user[paswd]);
@mysql_select_db($row_user[db]);

$sql = "select * from xime_setup where user_id = $row_user[id]";
$res = mysql_query($sql);
$row_setup = mysql_fetch_array($res);
if ($row_setup[lijsttype] <> 0) // login nodig
{
    if (!isset($PHP_AUTH_USER))  // show popup van htaccess
    {
        Header("WWW-Authenticate: Basic realm=\"XiMe Login\"");
        Header("HTTP/1.0 401 Unauthorized");
    }
    if ( (isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW)) ) // ingelogd
    {
        // ga naar hoofd server
        mysql_close();
        // verbinding met mysql server      
        
        // zoek de gebruiker op
        $sql = "select id, host, dbuser, paswd, db from xime_users where usernaam = '".$PHP_AUTH_USER."' and wachtwoord = '".$PHP_AUTH_PW."'";
        $res = mysql_query($sql);
        
        if (mysql_num_rows($res)>0)
        {
            $row_login = mysql_fetch_array($res);
            $geldig = "ja"; // geldige gebruiker
            // haal mailbox info op
            mysql_close();
            @mysql_connect($row_login[host], $row_login[dbuser], $row_login[paswd]);
            @mysql_select_db($row_login[db]);
            
            $sql = "select bericht_count from xime_setup where user_id = $row_login[id]";
            $res = mysql_query($sql);
            $row = mysql_fetch_array($res);
            $berichten = $row[bericht_count];
        } else $geldig = "nee";
        // ga naar server van de te bekijken profiel
        mysql_close();
        @mysql_connect($row_user[host], $row_user[dbuser], $row_user[paswd]);
        @mysql_select_db($row_user[db]);
    } else $geldig = "nee";
    
    if ($geldig == "ja")
    {
        if ($row_setup[lijsttype] == 1) // blocked
        {
            $sql = "select * from xime_blocked where user_id = $row_user[id] and user_id_blocked = $row_login[id]";
            $res = mysql_query($sql);
            if (mysql_num_rows($res) == 0) $geldig = "ja"; else $geldig = "nee";
        }
        if ($row_setup[lijsttype] == 2) // blocked
        {
            $sql = "select * from xime_allowed where user_id = $row_user[id] and user_id_allowed = $row_login[id]";
            $res = mysql_query($sql);
            if (mysql_num_rows($res) == 0) $geldig = "nee"; else $geldig = "ja";
        }
    }
    
    $gotinfo = "ja";
}
// eigen profiel altijd zichtbaar
if (strtoupper($wie) == strtoupper($PHP_AUTH_USER)) $geldig = "ja";

if ($geldig == "nee")
{
    Header("Location: ../verboden/".$geldig."");
}
// start document build
echo "<?xml version=\"1.0\"?>\n";
?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> 
<wml> 
<template>
</template>
<card id="show" title="Overzicht">
<p>
<?
echo $geldig
?>
</p>
</card>
</wml>
<?
mysql_close();
?>

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Acties:
  • 0 Henk 'm!

Verwijderd

Heb je al eens geprobeerd te debuggen door tussentijds een aantal afdrukken te maken van de waarde van $geldig?

Acties:
  • 0 Henk 'm!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
gaat moeilijk met wap... het werkt namelijk wel goed op de site.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Acties:
  • 0 Henk 'm!

  • samo
  • Registratie: Juni 2003
  • Laatst online: 13:34

samo

yo/wassup

wap en php gaan al moeilijk samen geloof ik.
ik zal eens kijken of ik daar iets over kan vinden....
(denk...)

kijk dit eens door...
het is dus wel mogelijk...

[ Voor 30% gewijzigd door samo op 20-08-2003 15:31 ]

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana


Acties:
  • 0 Henk 'm!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Het is zeker wel mogelijk, maar dat de variabele van waarde veranderd of juist zijn waarde pas na een 'tijdje' aanneemt, dat is vreemd

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Acties:
  • 0 Henk 'm!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Is er iemand die weet hoe een toestel via WAP een pagina op vraagt? Want als ik het als een gewone webpage opbouw, dus niet WAP header mee sturen werkt het op en top. Zet ik de WAP header erbij... dan krijgen we rare dignen

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Exit achter je header call zetten, waarschijnlijk?

Je mag sowieso de FAQ/QuickStart wel even lezen, je code inkorten tot een behapbaar formaat en een meer specifieke beschrijving van je ervaringen geven...

Acties:
  • 0 Henk 'm!

Verwijderd

op regel 28 staat een fout. je mot wel array['index'] schrijven. ik weet niet of het in dit geval uitmaakt maar goed.

Acties:
  • 0 Henk 'm!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Als een exit achter me header zet dan breakt hij het script af na het vehruizen van de pagina, maar dan gaat hij toch nog altijd met de verkeerde waarde van 'geldig' werken....

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Acties:
  • 0 Henk 'm!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Duidelijkere omschrijving van het probleem.

Het gaat om een WAP pagina (XML uitvoer dus) gemaakt door een PHP script.

Als ik deze pagina opvraag als een XML pagina met een normale PC browser gaat het goed. Als ik de WAP header toevoeg en deze pagina via de GSM wil ophalen. Toont deze een vreemd gedrag.

In eerste instantie dacht ik : cache probleem.
Om dit te omzeilen heb ik de no cache headers toegevoegd en zijn dit me headers:
PHP:
1
2
3
4
5
header("Content-Type: text/vnd.wap.wml");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");    
header("Cache-Control: no-cache, must-revalidate");    
header("Pragma: no-cache");


Omdat ik de pagina wil beveiligen wordt er gekeken of er al eens via htaccess is ingelog...
PHP:
1
2
3
4
5
if (!isset($PHP_AUTH_USER))  // show popup van htaccess
{
    Header("WWW-Authenticate: Basic realm=\"XiMe Login\"");
    Header("HTTP/1.0 401 Unauthorized");
}


Hier komt het eerste 'probleem' al. Niet altijd lijkt dit te werken op de GSM. Ik moest bijvoorbeeld 3 keer proberen voor ik het kreeg.

Als er eenmaal in ingelogd worden er wat controles uitgevoerd, zoals is deze gebruiker geldig. Is deze gebruiker niet geblockeerd. Bekijkt deze gebruiker zijn eigen pagina of die van een ander.

Het wel of niet doorgaan hangt af wat de waarde van '$geldig' is na de controles.

Nu komt het probleem...
PHP:
1
2
3
4
if ($geldig == "nee")
{
    Header("Location: ../verboden/".$geldig."");
}


Dit stukje code stuurt wat de waarde van '$geldig' ook is de gebruiker door naar de pagian 'verboden/nee'. Logisch...? Ja misschien wel want hij heeft de vergelijking als true geaccepteerd.

Echter.... Haal ik de regel 'Header(".......");' weg dan gaat hij door en als ik dan meteen de waarde van '$geldig' opvraag krijg ik'ja' op me GSM te zien.

Alsof de waarde van '$geldig' pas wordt gezet op het moment dat hij wordt geoutput en niet op het moment dat je hem met een '=' gelijk steld aan een waarde.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Acties:
  • 0 Henk 'm!

Verwijderd

als je niet weet wat $geldig bevat, doe dan een var_dump voor de:
if ($geldig == "nee")

comment die header uit en zet erna ook een dump.
ik gok dat ze nogsteeds hetzelfde zijn dan hoor :) maar goed, you never know.
als je zeker wilt zijn dat ie geen gekkie dingen gaat chachen stuur dan een random parameter mee aan de location replace. pagina.php?1209834

Acties:
  • 0 Henk 'm!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Een var_dump laat netjes zien dat het 'string(2) "ja"' is op de plek waar ik hem output. De waarde van '$geldig' is dan op dat moment ook 'ja'. Als ik het zo maar dat ik voor de 'if....nee")' een var_dump kan doen dan krijg ik netjes 'string(2) "ja"' te zien als output en voert hij wat bij de 'if' hoort niet uit, haal ik het weg, voort hij weer uit wat bij de 'if' hoort.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Acties:
  • 0 Henk 'm!

Verwijderd

Parcye schreef op 26 August 2003 @ 11:48:
Een var_dump laat netjes zien dat het 'string(2) "ja"' is op de plek waar ik hem output. De waarde van '$geldig' is dan op dat moment ook 'ja'. Als ik het zo maar dat ik voor de 'if....nee")' een var_dump kan doen dan krijg ik netjes 'string(2) "ja"' te zien als output en voert hij wat bij de 'if' hoort niet uit, haal ik het weg, voort hij weer uit wat bij de 'if' hoort.
als je verder niks anders aan het script doet dan die var_dump voor en na de if en je hebt het verschil dat hij daardoor verschillende dingen doet... dan ligt het denk ik toch aan chachen :)

probeer die truck eens met extra parameter/variable mee te geven aan je url?

Acties:
  • 0 Henk 'm!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
'echo $geldig ' output : ja
'($geldig == "nee")' output : false
'echo $geldig' output : ja

of

'($geldig == "nee")' output : true
'echo $geldig' output : ja

dat zijn de uitkomsten

Als ik aan 'Header("Lo.......");' veranderd zodat er een andere parameter wordt mee gestuurd gaat dat goed en wordt die gewoon getoond.

Het lijkt er op dat de waarde van '$geldig' gewoon op een later moment pas echt wordt 'geset'

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Acties:
  • 0 Henk 'm!

Verwijderd

hmm gezellig, toch geloof ik t nog nie helemaal.... maar oke... misschien een bug :)

wat is je php versie enzow?
denk trouwens niet dat $geldig later wordt 'geset' hoor.... geloof niet dat php variable set dmv ze op te delen in threads ofzo....
zou beetje lullig zijn als je ze in lusjes gebruikt enzo ;)

Acties:
  • 0 Henk 'm!

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Nou het leuke is dat als ik het als webpage gebruik zonder WAP header het helemaal goed gaat.

Btw... PHP Version 4.2.2

[ Voor 14% gewijzigd door Parcye op 26-08-2003 12:12 ]

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Acties:
  • 0 Henk 'm!

Verwijderd

Parcye schreef op 26 August 2003 @ 12:09:
Nou het leuke is dat als ik het als webpage gebruik zonder WAP header het helemaal goed gaat.

Btw... PHP Version 4.2.2
of er ja of nee in $geldig staat heeft werkelijk niks te maken met een header die ergens geset wordt.... :)

maar goed.... next step in debugging.
gooi al je zooi code eruit en doe simpel dat if statement (ook met die header en zonder header enzo)

kijk wat daar het resultaat van is....
Pagina: 1