[PHP] !isset probleempje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik probeer een soort van webbased ftp-tooltje te klussen waarbij ik gebruik maak van een volgend stukje script:

PHP:
1
2
3
4
5
6
7
8
9
10
<?
if (!isset($dir_store)) $dir_store = "./";


echo "De huidige directory is:&nbsp;$dir_store";


echo "<br><a href=\"?dir_store=test\"><strong>test</strong></a>";

?>


Maar op de een of andere manier wil de huidige dir niet veranderen in test. Ik heb van alles geprobeerd maar ben mij volgens mij aan het blindstaren op iets heel kleins en onbenulligs. Ziet iemand wat er verkeerd gaat? (Ja, ik weet dat dit basis PHP is, ik zie het gewoon niet meer...)

Thanx!!!

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 18-09 21:53

Tux

Je moet $_GET['dir_store'] gebruiken in plaats van $dir_store.

Zie ook: http://nl2.php.net/manual....variables.predefined.php

[ Voor 43% gewijzigd door Tux op 16-01-2005 20:22 ]

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Tux schreef op zondag 16 januari 2005 @ 20:21:
Je moet $_GET['dir_store'] gebruiken in plaats van $dir_store.

Zie ook: http://nl2.php.net/manual....variables.predefined.php
Nu blijft de variable leeg...

"De huidige dir is: "

Acties:
  • 0 Henk 'm!

  • LinuX-TUX
  • Registratie: December 2003
  • Laatst online: 17-09 13:27
Verwijderd schreef op zondag 16 januari 2005 @ 20:23:
[...]

Nu blijft de variable leeg...

"De huidige dir is: "
Wil je dan de huidige code posten, schiet niet op zo :+
Ik vermoed dat je $_GET['dir_store'] probeerd te echo'en? Ja, als deze niet gezet is, dan zie je niets nee :+
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
if (!isset($_GET['dir_store'])) $dir_store = "./";
if(isset($_GET['dir_store'])) $dir_store=$_GET['dir_store'];


echo "De huidige directory is:&nbsp;$dir_store";


echo "<br><a href=\"?dir_store=test\"><strong>test</strong></a>";

?>

[ Voor 31% gewijzigd door LinuX-TUX op 16-01-2005 20:28 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De gehele code wordt een beetje een probleem aangezien deze erg lang is... Daarom heb ik de delen die noodzakelijk zijn er uitgevist...

Acties:
  • 0 Henk 'm!

Verwijderd

Ik ben zelf nogal tegen het gebruik van echo, maar als je het toch wilt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<? 
if (!isset($_GET['dir_store'])) {
  $dir_store = "./"; 
} else {
  $dir_store = $_GET['dir_store'];
}

echo "De huidige directory is:&nbsp;${dir_store}"; 


echo "<br><a href=\"?dir_store=test\"><strong>test</strong></a>"; 

?>


PHP zou zich in de naam van de variabele kunnen vergissen als je niet ${dir_store} gebruikt in een doublequoted string, bovendien zou $_GET['dir_store'] nooit toegekend worden aan $dir_store in jouw stukje PHP code.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
LinuX-TUX schreef op zondag 16 januari 2005 @ 20:25:
[...]

Wil je dan de huidige code posten, schiet niet op zo :+
Ik vermoed dat je $_GET['dir_store'] probeerd te echo'en? Ja, als deze niet gezet is, dan zie je niets nee :+
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
if (!isset($_GET['dir_store'])) $dir_store = "./";
if(isset($_GET['dir_store'])) $dir_store=$_GET['dir_store'];


echo "De huidige directory is:&nbsp;$dir_store";


echo "<br><a href=\"?dir_store=test\"><strong>test</strong></a>";

?>
Nu werkt het!!!! Thanx!!!!

Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
PHP:
1
2
if (!isSet($_GET['dir_store']) || empty($_GET['dir_store'])) { $dir_store = "./"; }
else { $dir_store = $_GET['dir_store']; }

Icons are overrated


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

LinuX-TUX schreef op zondag 16 januari 2005 @ 20:25:
Wil je dan de huidige code posten, schiet niet op zo :+
Ik vermoed dat je $_GET['dir_store'] probeerd te echo'en? Ja, als deze niet gezet is, dan zie je niets nee :+
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
if (!isset($_GET['dir_store'])) $dir_store = "./";
if(isset($_GET['dir_store'])) $dir_store=$_GET['dir_store'];


echo "De huidige directory is:&nbsp;$dir_store";


echo "<br><a href=\"?dir_store=test\"><strong>test</strong></a>";

?>
Weet jij niet dat er zoiets als "else" bestaat? ;) Zelf geef ik hier de voorkeur aan, ter vervanging van je eerste 2 regels:
PHP:
1
$dir_store = isset($_GET['dir_store']) ? $_GET['dir_store'] : './';


Overigens denk ik dat dit een register_globals probleem is. Daar weet Google meer over. ;)

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

  • LinuX-TUX
  • Registratie: December 2003
  • Laatst online: 17-09 13:27
-NMe- schreef op zondag 16 januari 2005 @ 20:30:
[...]

Weet jij niet dat er zoiets als "else" bestaat? ;) Zelf geef ik hier de voorkeur aan, ter vervanging van je eerste 2 regels:
PHP:
1
$dir_store = isset($_GET['dir_store']) ? $_GET['dir_store'] : './';


Overigens denk ik dat dit een register_globals probleem is. Daar weet Google meer over. ;)
Gaat het niet om, tis zondagavond, moet ook nog leren ;) Ik weet ook dat er een nettere manier is, zoals een paar hierboven, waarop hij ook nog controleerd op inhoud. Ging me even om hem werkend te krijgen :Y)

Acties:
  • 0 Henk 'm!

  • grolle
  • Registratie: Oktober 2001
  • Laatst online: 15-09 10:26
-NMe- schreef op zondag 16 januari 2005 @ 20:30:
[...]

Weet jij niet dat er zoiets als "else" bestaat? ;) Zelf geef ik hier de voorkeur aan, ter vervanging van je eerste 2 regels:
PHP:
1
$dir_store = isset($_GET['dir_store']) ? $_GET['dir_store'] : './';
off-topic:
Zo heb ik het nog niet eerder geschreven gezien
Begrijk ik hem zo goed
PHP:
1
$test = isset(test) ? true : false;


Weer wat geleerd ;)

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

grolle schreef op maandag 17 januari 2005 @ 00:05:
off-topic:
Zo heb ik het nog niet eerder geschreven gezien
Begrijk ik hem zo goed
PHP:
1
$test = isset(test) ? true : false;


Weer wat geleerd ;)
Het is een soort van korte manier om een if-else statement te schrijven. Als je het met mate gebruikt is het best bruikbaar, en voor zoiets als dit vind ik het zelf ideaal. :)

Zie de volgende twee alternatieven om het te schrijven:
PHP:
1
2
3
4
5
if (isset($_GET['dir_store'])) {
  $dir_store = $_GET['dir_store'];
} else {
  $dir_store = './';
}

PHP:
1
$dir_store = isset($_GET['dir_store']) ? $_GET['dir_store'] : './';

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

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
nog een alternatief, niet dat het erg nuttig is :P
PHP:
1
2
3
4
5
<?
$get = array("food" => "bar");
if(!$foo = @$get['foo']) $foo = "baz";
echo $foo;
?>

Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
grolle schreef op maandag 17 januari 2005 @ 00:05:
[...]


off-topic:
Zo heb ik het nog niet eerder geschreven gezien
Begrijk ik hem zo goed
PHP:
1
$test = isset(test) ? true : false;


Weer wat geleerd ;)
Je begrijpt hem bijna goed :)

code:
1
2
3
4
$var = test ? true : false;

//Voorbeeld:
$result = $x > 4 ? $x*5 : $x*10;


Als $x groter is dan 4, dan $result = $x maal 4, anders $result = $x maal 5 :)

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Genoil schreef op maandag 17 januari 2005 @ 02:04:
nog een alternatief, niet dat het erg nuttig is :P
PHP:
1
2
3
4
5
<?
$get = array("food" => "bar");
if(!$foo = @$get['foo']) $foo = "baz";
echo $foo;
?>
Ik snap niet eens wat je daar doet. :P Wat ik wel snap, is dat je een @ gebruikt, en die mijd ik liever uit mijn scripts. ;)

[ Voor 53% gewijzigd door NMe op 17-01-2005 02:20 ]

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

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
-NMe- schreef op maandag 17 januari 2005 @ 02:19:
[...]

Ik snap niet eens wat je daar doet. :P Wat ik wel snap, is dat je een @ gebruikt, en die mijd ik liever uit mijn scripts. ;)
het gaat natuurlijk alleen om regel 3. errst stel je $foo gelijk aan $_GET['foo']. als dat niet lukt omdat 'foo' een undefined index is (@ om de Notice te onderdrukken), dan wordt $foo ="baz";

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Je checkt niets op regel 3, je doet een toekenning. ;) Verklaart meteen waarom ik hem niet snapte. :P

En notices onderdrukken moet niet nodig zijn, een live server heeft notices toch meestal (liefst altijd) uit staan. En anders doe je het zelf:
PHP:
1
error_reporting(E_ALL ^ E_NOTICE);

[ Voor 49% gewijzigd door NMe op 17-01-2005 02:29 ]

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

  • Wokkels
  • Registratie: Juli 2000
  • Laatst online: 29-10-2024

Wokkels

Het lekkerste zoutje

Sn3akz schreef op maandag 17 januari 2005 @ 02:16:
[...]


Je begrijpt hem bijna goed :)

code:
1
2
3
4
$var = test ? true : false;

//Voorbeeld:
$result = $x > 4 ? $x*5 : $x*10;


Als $x groter is dan 4, dan $result = $x maal 4, anders $result = $x maal 5 :)
Sorrie als ik insecten verkracht, maar bedoel je niet "Als $x groter is dan 4, dan $result = $x maal 5, anders $result = $x maal 10"?

Permanent wintericon!


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
-NMe- schreef op maandag 17 januari 2005 @ 02:28:
Je checkt niets op regel 3, je doet een toekenning. ;) Verklaart meteen waarom ik hem niet snapte. :P

En notices onderdrukken moet niet nodig zijn, een live server heeft notices toch meestal (liefst altijd) uit staan. En anders doe je het zelf:
PHP:
1
error_reporting(E_ALL ^ E_NOTICE);
ja het is ook niet dat ik dit gebruik ofzo, meer om een beetje aan te klooien :).
ik heb net getest en is 2 keer zo traag als de conditional statement als $_GET['foo'] gezet is, en 4 keer zo traag als $_GET['foo'] niet gezet is. compleet nutteloos dus B)

maar stel nou dat het wel sneller was, dan zou onderdrukken met een @ beter zijn dan globaal alle Notices te onderdrukken. je wilt andere Notices immers niet missen.

[ Voor 16% gewijzigd door Genoil op 17-01-2005 02:40 ]


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Genoil schreef op maandag 17 januari 2005 @ 02:36:
maar stel nou dat het wel sneller was, dan zou onderdrukken met een @ beter zijn dan globaal alle Notices te onderdrukken. je wilt andere Notices immers niet missen.
Eigenlijk wil je dat wel, op een live server. Het enige dat ik wil zien als mijn site draait, dat zijn echte errors, en eventueel warnings. Notices geven vaak info terug waar je niet op zit te wachten als de site eenmaal draait, en een hacker kan dat in het ergste geval uitbuiten.

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

Verwijderd

-NMe- schreef op maandag 17 januari 2005 @ 02:46:
[...]

Eigenlijk wil je dat wel, op een live server. Het enige dat ik wil zien als mijn site draait, dat zijn echte errors, en eventueel warnings. Notices geven vaak info terug waar je niet op zit te wachten als de site eenmaal draait, en een hacker kan dat in het ergste geval uitbuiten.
Notices zijn vaak een indicatie van slordig(er) programmeren. Variabelen dienen liefst vooraf gedefinieerd te worden, ook in PHP. Als het script met alle mogelijke meldingopties geen meldingen teruggeeft, dan heb je een begin van foutloos programmeren.

Foutmeldingen kunnen ook omzeild worden met een correcte error-afhandeling, dat is ook een vorm van nette scripting.

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Het punt is dat je dergelijke fouten er al uit hoort te hebben voordat je je site op een liveserver zet, waardoor het showen van notices onnodig is. Natuurlijk draai ik een testserver die zo strict mogelijke berichten laat zien, maar op mijn liveserver krijg ik alleen errors en warnings, mocht er iets mis gaan (door bijvoorbeeld een upgrade van PHP of iets dergelijks).

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

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 07:32
Verwijderd schreef op maandag 17 januari 2005 @ 03:16:
[...]

Notices zijn vaak een indicatie van slordig(er) programmeren. Variabelen dienen liefst vooraf gedefinieerd te worden, ook in PHP. Als het script met alle mogelijke meldingopties geen meldingen teruggeeft, dan heb je een begin van foutloos programmeren.
Dat bestaat natuurlijk niet he.. foutloos programmeren is onmogelijk ;).

Vooraf declareren van variabellen is eigenlijk altijd een must, alleen in PHP wordt dat jammer genoeg niet afgedwongen. Vooraf declareren voorkomt een boel rare 'fouten' en dicht ook een boel exploits.

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
-NMe- schreef op maandag 17 januari 2005 @ 03:24:
Het punt is dat je dergelijke fouten er al uit hoort te hebben voordat je je site op een liveserver zet, waardoor het showen van notices onnodig is. Natuurlijk draai ik een testserver die zo strict mogelijke berichten laat zien, maar op mijn liveserver krijg ik alleen errors en warnings, mocht er iets mis gaan (door bijvoorbeeld een upgrade van PHP of iets dergelijks).
Op een liveserver moet je natuurlijk ook geen errors en warnings laten zien. Gewoon alles incl. Notices loggen naar file ipv screen...

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Verwijderd schreef op zondag 16 januari 2005 @ 20:29:
Ik ben zelf nogal tegen het gebruik van echo, maar als je het toch wilt:
Wat wil je dan gebruiken? Print? Verschil met echo is nihil.
Steeds uit de php-omgeving springen? Nogal irritant als je veel variabelen wilt uitspugen.
PHP zou zich in de naam van de variabele kunnen vergissen als je niet ${dir_store} gebruikt in een doublequoted string, bovendien zou $_GET['dir_store'] nooit toegekend worden aan $dir_store in jouw stukje PHP code.
Onzin. En gebruik dan {$dir_store} ipv ${dir_store}. De eerste is een indicatie van "dit hier is een variabele" (waar je dus ook gewoon $array["blaa"] in kan gebruiken, zelfs als je " als string-begin hebt) en ${...} is een andere vorm van variabelen schrijven, imho een beetje een vieze omdat ie nogal uitnodigd tot dynamische variabelen en andere wazige dingen, zoals ${"variabele"} ...
Pagina: 1