[php] string gebruiken voordat het is gedefinieerd?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Topicstarter
sorry voor de brakke titel maar ik kon het anders niet omschrijven
ik heb het volgende stuk code

PHP:
1
2
3
$array[test] = "mijn naam is $naam";
$naam = "McLatey";
echo $array[test];


als output krijg ik dan:
mijn naam is McLatey

maar hoe is dit in hemelsnaam mogelijk? zoals ik php heb geleerd zou dat eigenlijk niet moeten kunnen

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

PHP:
1
2
3
4
$array['test'] = 'mijn naam is $naam';
$naam = "McLatey";
$array['test'] = str_replace('$naam',$naam,$array['test']);
echo $array['test'];



edit:
alleen zo is het wat handiger te lezen vind ik zelf, zeker als je perongeluk dubbele quotes " gebruikt :)
PHP:
1
2
3
4
$array['test'] = 'mijn naam is {naam}';
$naam = "McLatey";
$array['test'] = str_replace('{naam}',$naam,$array['test']);
echo $array['test'];

[ Voor 75% gewijzigd door Erkens op 12-01-2004 22:15 ]


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

  • Welke versie van php gebruik je, dit is geen correct gedrag, en op mijn versieverzameling (4.0.1, 4.2.?, 4.3, 5.0b) is het niet te reproduceren.
  • Waarom quote je je arrayindex niet? ($array['test'] of $array["test"])
  • Waarom heb je error_reporting(E_ALL) niet aan staan?
Zoveel vragen, zo weinig antwoorden...

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
ik krijg gewoon een doos fouten omdat je code fout is, maar ook
Notice: Use of undefined constant test - assumed 'test' in c:\webroot\_dev\classes\0.php on line 2

Notice: Undefined variable: naam in c:\webroot\_dev\classes\0.php on line 2

Notice: Use of undefined constant test - assumed 'test' in c:\webroot\_dev\classes\0.php on line 4
mijn naam is
PHP 4.3.3 Win32

Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Topicstarter
kvdveer schreef op 12 januari 2004 @ 22:14:
  • Welke versie van php gebruik je, dit is geen correct gedrag, en op mijn versieverzameling (4.0.1, 4.2.?, 4.3, 5.0b) is het niet te reproduceren.
  • Waarom quote je je arrayindex niet? ($array['test'] of $array["test"])
  • Waarom heb je error_reporting(E_ALL) niet aan staan?
Zoveel vragen, zo weinig antwoorden...
ik weet het niet precies heb hosting gekocht bij priorweb.be

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Lees de post nog eens... ;)

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
McLatey schreef op 12 januari 2004 @ 22:16:
[...]


ik weet het niet precies heb hosting gekocht bij priorweb.be
maak es een bestandje
PHP:
1
phpinfo();

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

McLatey schreef op 12 januari 2004 @ 22:16:
[...]


ik weet het niet precies heb hosting gekocht bij priorweb.be
Dat is een antwoord op vraag 1, (het juiste antwoord luidt trouwens Apache/1.3.27 (Unix) PHP/4.3.1, volgens netcraft)

Vraag 2 en 3 gaan in op (structurele) fouten in je programmeerstijl)

[ Voor 22% gewijzigd door kvdveer op 12-01-2004 22:19 . Reden: netcraft toegevoegd ]

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Topicstarter
preciese uitleg:

ik heb een bestand.php
daarin staat

$text[bla] = "bla";
$text[blaat] = "tekst enzo";
$text[welkom] = "hallo $username";

vervolgens ga ik naar een_ander_bestand.php
daarin doe ik

include "bestand.php";
$username = "test";
echo $text[welkom];

hij geeft keurig als output:
hallo test

geen errors!

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Skaah schreef op 12 januari 2004 @ 22:17:
[...]

Lees de post nog eens... ;)
heb ik gelezen, en wat maakt mijn post dan offtopic ;)
als je het niet eens bent met een post ofzo, dan doe je dat via SM/TR/EMAIL/ICQ/SMS maar niet door offtopic te blaten.
Ik poste mijn post enkel om andere te helpen, want dit soort "fouten" krijg je juist door zo fout te proggen en dus geef ik een voorbeeld hoe het wel moet, niet zozeer voor de TS alswel voor andere die toevallig dit topic lezen...

Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Topicstarter

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

McLatey schreef op 12 januari 2004 @ 22:18:
preciese uitleg:

ik heb een bestand.php
daarin staat

$text[bla] = "bla";
$text[blaat] = "tekst enzo";
$text[welkom] = "hallo $username";

vervolgens ga ik naar een_ander_bestand.php
daarin doe ik

include "bestand.php";
$username = "test";
echo $text[welkom];

hij geeft keurig als output:
hallo test

geen errors!
Daar geloof ik geen snars van. Je noemt hier niet de volledige php-bestanden.

zet eens error_reporting(E_ALL) bovenaan je code.

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Topicstarter
Erkens schreef op 12 januari 2004 @ 22:20:
[...]

heb ik gelezen, en wat maakt mijn post dan offtopic ;)
als je het niet eens bent met een post ofzo, dan doe je dat via SM/TR/EMAIL/ICQ/SMS maar niet door offtopic te blaten.
Ik poste mijn post enkel om andere te helpen, want dit soort "fouten" krijg je juist door zo fout te proggen en dus geef ik een voorbeeld hoe het wel moet, niet zozeer voor de TS alswel voor andere die toevallig dit topic lezen...
1. ik prog goed hoor
2. ik ben haastig en daarom typ ik hier zonder " (sorry)

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Topicstarter
kvdveer schreef op 12 januari 2004 @ 22:21:
[...]


Daar geloof ik geen snars van. Je noemt hier niet de volledige php-bestanden.

zet eens error_reporting(E_ALL) bovenaan je code.
gedaan geeft niets
en je mag het niet geloven hoor maar hij doet het wel ik stond er zelf ook behooorlijk van te kijken

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Titel aangepast.

Wat jij (TS) nu wilt doen is iets gebruiken voordat het gedefinieerd is.

Voorbeeldje deze formule : a = 5 * b;

Geef jij het antwoord, dan geef ik daarna aan wat b moet zijn. kijken of jouw antwoord klopt ( ik gok van niet :+ )

De manier op dit op te lossen is dus met een template-achtig iets te gaan werken.

Ik heb hier trouwens lokaal een oudere php draaien en daar werkt het dus niet op. ( resultaat: "mijn naam is" )

[ Voor 106% gewijzigd door dusty op 12-01-2004 22:33 ]

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

McLatey schreef op 12 januari 2004 @ 22:22:
[...]


gedaan geeft niets
en je mag het niet geloven hoor maar hij doet het wel ik stond er zelf ook behooorlijk van te kijken
Je code bevat fouten (het niet quoten van je array indexen bijvoorbeeld, maar ook het referen aan $username voordat 'ie is ingevuld), dus die error_reporting zou een fout moeten geven.
Weet je zeker dat wat je ons laat zien ook op de server staat?

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Topicstarter
kvdveer schreef op 12 januari 2004 @ 22:26:
[...]

Je code bevat fouten (het niet quoten van je array indexen bijvoorbeeld, maar ook het referen aan $username voordat 'ie is ingevuld), dus die error_reporting zou een fout moeten geven.
Weet je zeker dat wat je ons laat zien ook op de server staat?
1. dat weet ik honderd procent zeker
2. hij geeft geen fouten
3. hoe is het in hemelsnaam te verklaren dat hij een gewone output weergeeft?

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

Topicstarter
dusty schreef op 12 januari 2004 @ 22:26:
Titel aangepast.

Wat jij (TS) nu wilt doen is iets gebruiken voordat het gedefinieerd is.

Voorbeeldje deze formule : a = 5 * b;

Geef jij het antwoord, dan geef ik daarna aan wat b moet zijn. kijken of jouw antwoord klopt ( ik gok van niet :+ )

De manier op dit op te lossen is dus met een template-achtig iets te gaan werken.
ja maar wat ik nu duidelijk probeer te maken is

1. ik begrijp dat dit niet werkt (of iig niet hoort te werken)
2. op mijn server werkt het om de een of andere vage reden wel
3. ik snap niet hoe dat kan?

Hoeder van het Noord-Meierijse dialect


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

McLatey schreef op 12 januari 2004 @ 22:30:
[...]
ja maar wat ik nu duidelijk probeer te maken is

1. ik begrijp dat dit niet werkt (of iig niet hoort te werken)
2. op mijn server werkt het om de een of andere vage reden wel
3. ik snap niet hoe dat kan?
Kan je een test bestandje maken? Met minimale code, dus bv.:
PHP:
1
2
3
4
5
$array['test'] = "mijn naam is $naam"; 
$naam = "McLatey"; 
echo $array['test'];
echo "<HR>";
show_source(__FILE__);


Dan moet je een resultaat krijgen dat ongeveer gelijk is aan http://www.lucard.to/got/test.php

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Bluestorm
  • Registratie: Januari 2000
  • Laatst online: 20-08-2022
En $username bestaat niet toevallig toch al doordat je bijvoorbeeld mijnfile.php?username=test aanroept? (Of met de POST variant...)

Maar om te testen of er echt wat raar gebeurd of dat je gewoon wat over het hoofd gezien hebt moet je natuurlijk weten wat er je array in gaat. Wat levert het echo 'en van $naam helemaal bovenaan de pagina bijvoorbeeld op.

[ Voor 46% gewijzigd door Bluestorm op 13-01-2004 00:06 ]

Tenminste... dat [ denk / zie / weet ] ik... | Javascript obfuscator | foto's en video's uploaden


Acties:
  • 0 Henk 'm!

Verwijderd

Je eigenlijke vraag is waarom het op jouw server wel lukt om een nog-niet-gedefinieerde var te gebruiken in een andere var (welliswaar een array).

Ik denk dat je voor jezelf een aantal dingetjes moet testen om daar achter te komen, en de dingen zijn stuk voor stuk genoemd in de reacties:

- Zet helemaal bovenaan je script een echo van $naam
- Controleer voordat je $array['test'] echo't of $naam bepaald is
- Gebruik juist geprogrammeerde code

Als je deze dingetjes test weet ik zeker dat je tegen je fout aanloopt. Zoniet dan zal er wel van alles mis zijn met je PHP / localhost instellingen, maar daar heb ik geen verstand van.. :)

Als ik jou was zou ik de code die LuCarD gepost heeft in een testbestandje zetten (test.php) en deze aanroepen. En dan 'schoon' aanroepen, zonder includes of dergelijke etc. Dus puur dat bestandje: www.jouwserver.com/test.php.

Ik ben er dan van overtuigd dat je de reden cq oorzaak vindt waardoor dit 'rare gedrag van PHP' veroorzaakt wordt..!

Acties:
  • 0 Henk 'm!

  • creative8500
  • Registratie: September 2001
  • Laatst online: 01-02 14:14

creative8500

freedom.

* creative8500 jaloers is op sablotron-support :'( :P

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
McLatey schreef op 12 januari 2004 @ 22:10:
sorry voor de brakke titel maar ik kon het anders niet omschrijven
ik heb het volgende stuk code

PHP:
1
2
3
$array[test] = "mijn naam is $naam";
$naam = "McLatey";
echo $array[test];


als output krijg ik dan:
mijn naam is McLatey

maar hoe is dit in hemelsnaam mogelijk? zoals ik php heb geleerd zou dat eigenlijk niet moeten kunnen
Zoals reeds opgemerkt, zet je error reporting eens op E_ALL.

fout 1: geen quotes om array keys
fout 2: $naam is niet geinitialiseerd

Omdat $naam niet geinitialiseerd is en de PHP compiler dus maar moet gissen wat je bedoeld zal deze de niet geinitialiseerde $naam op regel 1 waarschijnlijk interpreterenen als een reference naar $naam (regel 2).

Blijkbaar doet php compileren dus in 2 stappen waarbij de 2e stap dient om programmeer fouten op te lossen.

Dus m.a.w., onvoorspelbaarheid van het script is inherent aan slordig programmeren.
Pagina: 1