[php] variabele is wel gezet, maar stiekum toch niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
sorry voor de vage topic-titel, maar kon niets beters bedenken.

Ik zit met het probleem dat ik een variabele probeer aan te spreken waarvan ik zeker weet dat ie gezet is, maar als ik 'm dan wil echoën begint PHP toch te zeuren dat ie niet gezet is.

PHP:
1
2
3
4
5
6
7
8
9
10
if (!isset($subp))
{
    echo "subp is niet gezet, maar wordt nu op 1 gezet<br>\n";
    $subp = 1;
}
else
{
    print_r($_POST);
    echo "\nsubp is wel gezet: ".$subp;
}


levert de volgende output op:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Array
(
    [p] => 2
    [subp] => <br />
<b>Notice</b>:  Undefined variable:  subp in <b>[knip]/page.2.php</b> on line <b>28</b><br />

    [nextsub] => 1
    [vraag_alt] => 51
    [maxsub] => 12
)

subp is wel gezet: <br />
<b>Notice</b>:  Undefined variable:  subp in <b>/[knip]/page.2.php</b> on line <b>28</b><br />


subp kan uit een GET of POST request komen. Vandaar dat ik ergens eerder in m'n code nog
PHP:
1
2
3
4
if (isset($_GET['subp']))
    $subp = $_GET['subp'];
elseif (isset($_POST['subp']))
    $subp = $_POST['subp'];

doe.

Voor de zekerheid heb ik het ook getest wat ie doet als ik dat weghaal, maar blijft hetzelfde rare verschijnsel geven.

ohjah en:
register_globals staat op off
error_reporting staat op E_ALL
PHP Version 4.3.2

Werk nu al ruim een jaar op die server, er is niets gewijzigd de afgelopen tijd en heb nog nooit zoiets vaags gehad.

Iemand enig idee waar dit aan kan liggen?

Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 15:59
Het lijkt er op dat op een of andere vage manier de inhoud van subp gezet wordt met die foutmelding. Hij is dus wel gezet, maar bevat de foutmelding. Verder wordt er verwezen naar regel 28 van page.2.php. Die heb je er niet bijgeleverd. Wat staat er op die regel/in die page?

Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:52
PHP:
1
2
3
4
5
$subp = "";
if(isset($_GET['subp']) && !empty($_GET['subp']))
    $subp = $_GET['subp'];
elseif(isset($_POST['subp']) && !empty($_POST['subp']))
    $subp = $_POST['subp'];


Wat komt er dan uit?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik denk dat je een scope probleem hebt. Staat het eerste stukje PHP code soms in een andere functie dan het tweede stukje?

'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.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
PHP:
1
2
3
4
if (isset($_GET['subp']))
    $subp = $_GET['subp'];
elseif (isset($_POST['subp']))
    $subp = $_POST['subp'];


=>

PHP:
1
$subp = ( empty($_REQUEST['subp']) ) ? $default_value : $_REQUEST['subp'];


edit:

Dit is overigens niet de oplossing voor het probleem. Die wordt al door mjax gegeven.

[ Voor 32% gewijzigd door Michali op 13-10-2004 19:09 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

offtopic:
De REQUEST array gebruiken is nog een stukje onveiliger dan alleen GET en POST. Ik zou het gewoon doen zoals TS het doet, alleen dan eerst checken op de POST array, en daarna pas op de GET array. :P

'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.


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
mjax schreef op 13 oktober 2004 @ 19:04:
Het lijkt er op dat op een of andere vage manier de inhoud van subp gezet wordt met die foutmelding. Hij is dus wel gezet, maar bevat de foutmelding. Verder wordt er verwezen naar regel 28 van page.2.php. Die heb je er niet bijgeleverd. Wat staat er op die regel/in die page?
toch wel. ik zei toch dat dat stukje code wat ik gaf de volgende output op leverde. Ik doe dus een print_r op de $_POST array en op het moment dat ie subp moet printen (die gepost wordt) krijg je er dus een foutmelding op. Dat is het vage juist.
Zelfde geldt voor die isset() constructie. Hij ziet 'm dus wel als gezet, maar als ie 'm dan moet weergeven komt ie met die foutmelding
Dennis schreef op 13 oktober 2004 @ 19:05:
PHP:
1
2
3
4
5
$subp = "";
if(isset($_GET['subp']) && !empty($_GET['subp']))
    $subp = $_GET['subp'];
elseif(isset($_POST['subp']) && !empty($_POST['subp']))
    $subp = $_POST['subp'];


Wat komt er dan uit?
Helpt niets. Zelfde resultaat

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
marty schreef op 13 oktober 2004 @ 19:45:
Ik doe dus een print_r op de $_POST array en op het moment dat ie subp moet printen (die gepost wordt) krijg je er dus een foutmelding op. Dat is het vage juist.
Dat is niet vaag. Je ziet daar een fout melding omdat de foutmelding de werkelijk de waarde is van die variabel, precies wat mjax zegt. Doe maar eens een var_dump() op die variabel. Of print de lengte van die string uit met strlen en ga met de hand na of dit klopt. Het is toch echt zo.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
NMe84 schreef op 13 oktober 2004 @ 19:24:
offtopic:
De REQUEST array gebruiken is nog een stukje onveiliger dan alleen GET en POST. Ik zou het gewoon doen zoals TS het doet, alleen dan eerst checken op de POST array, en daarna pas op de GET array. :P
Want?

edit:

Ik weet dat je niet zeker weet waar de waarde van komt, maar als je gewoon normale checks uitvoert en geen vreemde dingen gaat doen lijkt me dit absoluut geen probleem.

[ Voor 24% gewijzigd door Michali op 13-10-2004 19:57 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 15:59
Je ziet toch duidelijk dat de foutmelding IN de variabele $subp zit. Hij wordt dus niet gegenereed op het moment van uitvoeren van het print_r() statement. Tenminste, zo ziet het er voor mij nu uit. Ik zou toch wel eens de volledige code willen zien. Kan het soms zijn dat je ergens $$subp (met dubbele dollar) gebruikt? Dat zou nog wel e.e.a kunnen verklaren.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Michali schreef op 13 oktober 2004 @ 19:55:
[...]


Want?

edit:

Ik weet dat je niet zeker weet waar de waarde van komt, maar als je gewoon normale checks uitvoert en geen vreemde dingen gaat doen lijkt me dit absoluut geen probleem.
het enige wat je er extra mee krijgt is dat de var ook nog een cookie kan wezen :)

Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 15:59
Ik gok dat je een pagina hebt met een <INPUT> veld waarin je een waarde zet als volgt (of een soortgelijke constructie):
code:
1
<input type="hidden" name="subp" value="<?=$subp?>">

Die HTML pagina wordt gepost naar het script, waarvan jij hierboven een gedeelte hebt neergezet. Als op die eerste pagina $subp geen waarde heeft, krijg je de verschijnselen die je nu ziet.

Wat er hier gebeurt is dat het HTML <input> element gevuld wordt met de waarde van de foutmelding. Als je die dus post naar een ander script, krijgt variable $subp daar de waarde van die foutmelding. Snappie?

[ Voor 40% gewijzigd door mjax op 13-10-2004 20:13 ]


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
mjax schreef op 13 oktober 2004 @ 20:10:
Ik gok dat je een pagina hebt met een <INPUT> veld waarin je een waarde zet als volgt (of een soortgelijke constructie):
code:
1
<input type="hidden" name="subp" value="<?=$subp?>">

Die HTML pagina wordt gepost naar het script, waarvan jij hierboven een gedeelte hebt neergezet. Als op die eerste pagina $subp geen waarde heeft, krijg je de verschijnselen die je nu ziet.

Wat er hier gebeurt is dat het HTML <input> element gevuld wordt met de waarde van de foutmelding. Als je die dus post naar een ander script, krijgt variable $subp daar de waarde van die foutmelding. Snappie?
jij bent ook niet dom hè mjax :)

sjees...ik zie nu pas dat ie die foutmelding twee keer op dezelfde regel geeft, terwijl het op een verschillend regelnummer zou moeten zijn. Nu dat ik de pagina opnieuw opvraag heb ik dus ook geen foutmelding meer.

Ik denk dus dat je goed gegokt heb :)
thnx
Pagina: 1