Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP] Beginnersfouten (https://forum.scholieren.com/showthread.php?t=904912)

Krekker 20-07-2004 00:03

[webserver] PHP geeft fout bij gebruik van variabelen
 
Ik heb vandaag een beetje zitten experimenteren met het installeren en gebruiken van een webserver (apache 2.0.39) en php (laatste versie 4 geloof ik).
Ik heb hier voor mn neus ook een beginnershandleiding php liggen met de volgende twee scripts:

HTML- formulier
Code:

<html>
<head>
<title>HTML-formulier</title>
</head>

<body>
<form action="HandleForm.php" method=post>
Voornaam <input type=text name="Voornaam" size=20></br>
Achernaam <input type=text name="Achternaam" size=40></br>
E-mailadres <input type=text name="Email" size=60></br>
Commentaar <textarea name="Commentaar" rows=5 cols=40></textarea></br>
<input type=submit name="submit" value="Verzenden!">
</form>
</body>
</html>

HandleForm.php (uiteraard met nog wat html codes eromheen)
PHP-code:

print ("Uw voornaam is $Voornaam.</br>\n");
print (
"Uw achternaam is $Achternaam.</br>\n");
print (
"Uw e-mailadres is $Email.</br>\n");
print (
"U had dit te zeggen:</br>\n $Commentaar</br>\n");
?> 

Als ik het formulier invul en verstuur krijg ik echter dit:

Notice: Undefined variable: Voornaam in C:\Apache2\htdocs\HandleForm.php on line 8
Uw voornaam is .

Notice: Undefined variable: Achternaam in C:\Apache2\htdocs\HandleForm.php on line 9
Uw achternaam is .

Notice: Undefined variable: Email in C:\Apache2\htdocs\HandleForm.php on line 10
Uw e-mailadres is .

Notice: Undefined variable: Commentaar in C:\Apache2\htdocs\HandleForm.php on line 11
U had dit te zeggen:

Ik denk dat het iets te maken heeft met mn php configuratie, maar ik kan niet bedenken wat het zou kunnen zijn. Kan iemand mij helpen aub. Want voor zover ik weet hoef je in php variabelen niet de definiiëren.

dafelix 20-07-2004 05:36

Citaat:

Krekker schreef op 20-07-2004 @ 01:03 :

PHP-code:

print ("Uw voornaam is $_POST['Voornaam'].</br>\n");
print (
"Uw achternaam is $_POST['Achternaam'].</br>\n");
print (
"Uw e-mailadres is $_POST['Email'].</br>\n");
print (
"U had dit te zeggen:</br>\n $_POST['Commentaar']</br>\n");
?> 



Lethalis 20-07-2004 07:42

Bij nieuwere versies van PHP staat auto_globals uit..

Enlightenment 20-07-2004 07:52

Citaat:

******** schreef op 20-07-2004 @ 08:42 :
Bij nieuwere versies van PHP staat auto_globals uit..

Triloxigen 20-07-2004 09:27

Bedoel je niet register_globals? :p

Krekker 20-07-2004 10:07

Kan ik dat ook gewoon aanzetten?

Edit:
Dit werkt trouwens niet:
Citaat:

dafelix schreef op 20-07-2004 @ 06:36 :

PHP-code:

print ("Uw voornaam is $_POST['Voornaam'].</br>\n");
print (
"Uw achternaam is $_POST['Achternaam'].</br>\n");
print (
"Uw e-mailadres is $_POST['Email'].</br>\n");
print (
"U had dit te zeggen:</br>\n $_POST['Commentaar']</br>\n");
?> 


Dit darentegen wel:
PHP-code:

print ("Uw voornaam is $_POST[Voornaam].</br>\n");
print (
"Uw achternaam is $_POST[Achternaam].</br>\n");
print (
"Uw e-mailadres is $_POST[Email].</br>\n");
print (
"U had dit te zeggen:</br>\n $_POST[Commentaar]</br>\n");
?> 


Triloxigen 20-07-2004 10:11

Citaat:

Krekker schreef op 20-07-2004 @ 11:07 :
Kan ik dat ook gewoon aanzetten?

Edit:

ja, staat in de php.ini

Krekker 20-07-2004 10:27

Bedankt allemaal, nu werkt dat in ieder geval wel, maar er zijn nog twee problemen.

Het eerste is dat als ik meerdere regels typ in de textarea, dit wordt weergegeven op één regel. Kan daar iets aan gedaan worden?

Het tweede is dat het volgende script:
PHP-code:

if ($waarde) {
        print (
"$waarde");
              }
?> 

de volgende foutmelding geeft als er niks voor $waarde wordt opgegeven:

Notice: Undefined variable: waarde in C:\Apache2\htdocs\test2.php on line 2

Is dit ook weer een irritante wijziging in php? En kan ik dit ook weer terugzetten naar de oude instellingen?

Triloxigen 20-07-2004 11:02

In een textarea zijn de enters dus een \n,
een enter in html is <br />

nl2br() will do the trick..

Krekker 20-07-2004 11:11

Citaat:

********** schreef op 20-07-2004 @ 12:02 :
In een textarea zijn de enters dus een \n,
een enter in html is <br />

nl2br() will do the trick..

En tussen de haakjes moet de variabele neem ik aan.

Edit: Ja, ik heb het al uitgevogeld. Nu dat tweede probleem nog.

Pff, wat kunnen dit soort dingen toch irritant zijn af en toe!

Fade of Light 20-07-2004 11:30

Citaat:

Krekker schreef op 20-07-2004 @ 11:27 :
Bedankt allemaal, nu werkt dat in ieder geval wel, maar er zijn nog twee problemen.

Het eerste is dat als ik meerdere regels typ in de textarea, dit wordt weergegeven op één regel. Kan daar iets aan gedaan worden?

Het tweede is dat het volgende script:
PHP-code:

if ($waarde) {
        print (
"$waarde");
              }
?> 

de volgende foutmelding geeft als er niks voor $waarde wordt opgegeven:

Notice: Undefined variable: waarde in C:\Apache2\htdocs\test2.php on line 2

Is dit ook weer een irritante wijziging in php? En kan ik dit ook weer terugzetten naar de oude instellingen?

PHP-code:


if (isset($waarde)) { .... } 


Krekker 20-07-2004 11:42

Citaat:

Fade of Light schreef op 20-07-2004 @ 12:30 :
PHP-code:


if (isset($waarde)) { .... } 


Is het niet zo dat isset juist false geeft als de variabele is toegewezen? (zo staat het tenminste in het boek dat ik voor mn neus heb liggen, miscchien is het een goed idee om dat ding maar uit het raam te flikkeren :D)

Edit: het werkt op die manier idd wel.

*boek uit het raam gooit*

Enlightenment 20-07-2004 11:56

http://nl3.php.net/manual/en/function.isset.php

Returns TRUE if var exists; FALSE otherwise.

Jouw manier zal FALSE teruggeven als de waarde 0 is, of boolean FALSE, dit terwijl de waarde wel toegewezen is, de variabele bestaat. Daarom kun je beter isset gebruiken.

Enlightenment 20-07-2004 11:59

PHP-code:

function viewarray($arr)
{
 echo(
'<table cellpadding="0" cellspacing="0" border="1">');
 foreach ((array)
$arr as $key1 => $elem1)
 {
  echo(
'<tr>');
  echo(
'<td>'.$key1.'&nbsp;</td>');
  if (
is_array($elem1))
   
extarray($elem1);
  else
   echo(
'<td>'.$elem1.'&nbsp;</td>');
  echo(
'</tr>');
 }
 echo(
'</table>');
}

function 
extarray($arr)
{
 echo(
'<td>');
 echo(
'<table cellpadding="0" cellspacing="0" border="1">');
 foreach (
$arr as $key => $elem)
 {
  echo(
'<tr>');
  echo(
'<td>'.$key.'&nbsp;</td>');
  if (
is_array($elem))
   
extArray($elem);
  else
   echo(
'<td>'.htmlspecialchars($elem).'&nbsp;</td>');
  echo(
'</tr>');
 }
 echo(
'</table>');
 echo(
'</td>');


Include deze functie eens, en doe dan viewarray($_POST);

Krekker 20-07-2004 11:59

Dan wil ik hierbij "PHP voor het world wide web" van Larry Ullman aan iedereen afraden.

Enlightenment 20-07-2004 12:00

Citaat:

Krekker schreef op 20-07-2004 @ 12:59 :
Dan wil ik hierbij "PHP voor het world wide web" van Larry Ullman aan iedereen afraden.
Wat staat er dan letterlijk?

Staat er niet !isset() ?
Het uitroepteken geldt als een NOT operator, dus die draait het zaakje om.

Krekker 20-07-2004 12:06

Citaat:

Enlightenment schreef op 20-07-2004 @ 13:00 :
Wat staat er dan letterlijk?

Staat er niet !isset() ?
Het uitroepteken geldt als een NOT operator, dus die draait het zaakje om.

Oeps, ik heb gewoon verkeerd gelezen. Er staat het volgende:
Citaat:

U kun ook met de functie isset() bepalen of een variabele al dan niet bestaat. Deze functie zal, anders dan wanneer u gewoon op naam aan een variabele zou refereren, zoals we dat hier tot dusver gedaan hebben, TRUE leveren als de variabele gelijk is aan nul. Bijvoorbeeld:
PHP-code:

$aantal 0
   
if ($aantal) { ... // FALSE
   
if (isset($aantal)) { ... // TRUE 



Krekker 20-07-2004 12:11

Citaat:

Enlightenment schreef op 20-07-2004 @ 12:59 :
PHP-code:

function viewarray($arr)
{
 echo(
'<table cellpadding="0" cellspacing="0" border="1">');
 foreach ((array)
$arr as $key1 => $elem1)
 {
  echo(
'<tr>');
  echo(
'<td>'.$key1.'&nbsp;</td>');
  if (
is_array($elem1))
   
extarray($elem1);
  else
   echo(
'<td>'.$elem1.'&nbsp;</td>');
  echo(
'</tr>');
 }
 echo(
'</table>');
}

function 
extarray($arr)
{
 echo(
'<td>');
 echo(
'<table cellpadding="0" cellspacing="0" border="1">');
 foreach (
$arr as $key => $elem)
 {
  echo(
'<tr>');
  echo(
'<td>'.$key.'&nbsp;</td>');
  if (
is_array($elem))
   
extArray($elem);
  else
   echo(
'<td>'.htmlspecialchars($elem).'&nbsp;</td>');
  echo(
'</tr>');
 }
 echo(
'</table>');
 echo(
'</td>');


Include deze functie eens, en doe dan viewarray($_POST);

Leuk en aardig, maar ik moet ook nog begrijpen wat ik doe. En bovendien heb ik niet een doel met mijn code, meer met mijn codeerwerk. (leren php te schrijven)

Enlightenment 20-07-2004 12:12

Ja dat is dus correct. Daarom dien je eigenlijk altijd isset te gebruiken, of $var === true in het geval van een boolean-check.

Enlightenment 20-07-2004 12:13

Citaat:

Krekker schreef op 20-07-2004 @ 13:11 :
Leuk en aardig, maar ik moet ook nog begrijpen wat ik doe. En bovendien heb ik niet een doel met mijn code, meer met mijn codeerwerk. (leren php te schrijven)
ViewArray is een functie uit de reakties op php.net. Het laat zien wat er in de $_POST array zit. Zeer handig voor debuggen. [blah] moet je namelijk nooit gebruiken als array element, altijd ['blah'].

Krekker 20-07-2004 12:34

Het is waarschijnlijk een gigantische noob vraag, maar wat is een boolean-check?

Fade of Light 20-07-2004 16:08

Citaat:

Krekker schreef op 20-07-2004 @ 13:34 :
Het is waarschijnlijk een gigantische noob vraag, maar wat is een boolean-check?
Kijken of een boolean variabele (een variabele met als type boolean (boolean is een type dat alleen de waarde true of false aannemen)) true of false is.

Lethalis 20-07-2004 18:09

Citaat:

********** schreef op 20-07-2004 @ 10:27 :
Bedoel je niet register_globals? :p
Ja :o

Het wordt trouwens afgeraden deze aan te zetten. Ten eerste omdat het gewoon slordig programmeren is en ten tweede omdat je code hierdoor dus niet meer overal werkt, aangezien hosting providers het ook steeds vaker uitzetten.

Zelf gebruik ik altijd de $HTTP_POST_VARS array. En als ik wil controleren of een waarde bestaat, gebruik ik de array_key_exists() functie.

Vinnie Paz 20-07-2004 20:06

Citaat:

******** schreef op 20-07-2004 @ 19:09 :

Zelf gebruik ik altijd de $HTTP_POST_VARS array. En als ik wil controleren of een waarde bestaat, gebruik ik de array_key_exists() functie.

is isset() dan niet makkelijker :) of heb jij het ergens anders over, want k ken die functie helemaal niet :| :)

SE 20-07-2004 21:23

Citaat:

******** schreef op 20-07-2004 @ 19:09 :
Ja :o

Het wordt trouwens afgeraden deze aan te zetten. Ten eerste omdat het gewoon slordig programmeren is en ten tweede omdat je code hierdoor dus niet meer overal werkt, aangezien hosting providers het ook steeds vaker uitzetten.

Zelf gebruik ik altijd de $HTTP_POST_VARS array. En als ik wil controleren of een waarde bestaat, gebruik ik de array_key_exists() functie.

hmm slordig.. ik vind het zelf wel meevallen.. maja ;) wie ben ik ;).. een php-eitje.. die net de doorsnee array en de functie doorheeft ;)..

op naar de classes ;)

Lethalis 21-07-2004 08:19

Citaat:

Vinnie Paz schreef op 20-07-2004 @ 21:06 :
is isset() dan niet makkelijker :) of heb jij het ergens anders over, want k ken die functie helemaal niet :| :)
Het resultaat van isset() is hetzelfde en isset($array[$key]) zal ook werken, maar je doet in feite nog steeds iets dat niet mag: je refereert naar een element in een array dat niet bestaat. De ontwikkelaars van PHP hebben het je gewoon makkelijker gemaakt door die foutmelding te onderdrukken, maar het blijft niet netjes.

Citaat:

SE schreef op 20-07-2004 @ 22:23 :
hmm slordig.. ik vind het zelf wel meevallen..
Onder programmeurs gezegd, is het "Quick 'n' Dirty" :)

Chimera 21-07-2004 12:00

Citaat:

******** schreef op 21-07-2004 @ 09:19 :
De ontwikkelaars van PHP hebben het je gewoon makkelijker gemaakt door die foutmelding te onderdrukken, maar het blijft niet netjes.

Nee hoor, het is gewoon zo gedefinieerd. Isset($array[key]) is niet fout, en bovendien een stuk minder omslachtig.

Wat betreft regiter_globals aanzetten heb je wel gelijk. Het is gewoon fout, en je leert jezelf de verkeerde dingen aan.

eddie 21-07-2004 12:17

Citaat:

Chimera schreef op 21-07-2004 @ 13:00 :
Nee hoor, het is gewoon zo gedefinieerd. Isset($array[key]) is niet fout, en bovendien een stuk minder omslachtig.

Ik ben het met ******** eensch.
Wanneer je wilt weten of een array key bestaat, moet je array_key_exists() gebruiken; niet isset. De eerste is leesbaarder voor jezelf en anderen. Verder denk ik dat array_key_exists ook sneller is dan isset, maar dat is een gok van mijn kant.

Manuzhai 21-07-2004 13:04

Er is wel wat voor te zeggen dat array_key_exists() correcter is, maar het is echt teveel typewerk om het ook daadwerklijk te gebruiken, IMHO. Het zou trouwens wel best kunnen dat array_key_exists() iets sneller is, hoewel isset() waarschijnlijk vrij hard geoptimaliseerd is.

eddie 21-07-2004 14:18

teveel typewerk is een n00b argument; een beetje texteditor heeft shortcuts en code completion etc.

Verder vind ik de functie isset kompleet overbodig; waarom zou je moeten controleren of een variabele bestaat? Ga je conditioneel variabelen aanmaken ofzo :| Dit is, zoals ******** al zei, Quick-n-Dirty...

Chimera 21-07-2004 14:41

Citaat:

eddie schreef op 21-07-2004 @ 13:17 :
Ik ben het met ******** eensch.
Wanneer je wilt weten of een array key bestaat, moet je array_key_exists() gebruiken; niet isset. De eerste is leesbaarder voor jezelf en anderen. Verder denk ik dat array_key_exists ook sneller is dan isset, maar dat is een gok van mijn kant.

Wel een hele wilde gok.

Het is een kwestie van voorkeuren, "is gezet" of "bestaat" maakt niks uit, voordeel is dat je isset() consequent kan gebruiken, en array_key_exists natuurlijk alleen op arrays werkt.

Chimera 21-07-2004 14:43

Citaat:

eddie schreef op 21-07-2004 @ 15:18 :
Verder vind ik de functie isset kompleet overbodig; waarom zou je moeten controleren of een variabele bestaat?
Je wil weten of een variabele toegewezen is, niet of 'ie bestaat. Het is exact hetzelfde als een if(foo != null) in strongly typed talen.

eddie 21-07-2004 14:53

Citaat:

Chimera schreef op 21-07-2004 @ 15:43 :
Je wil weten of een variabele toegewezen is, niet of 'ie bestaat. Het is exact hetzelfde als een if(foo != null) in strongly typed talen.
Helaas; de omschrijving op nl.php.net zegt:
Citaat:

isset -- Controleer of een variabele bestaat
Dus niet of deze is toegewezen (dat je hem daarvoor kunt gebruiken is een bijkomstigheid). Dat PHP on-the-fly variabelen aanmaakt, is naar mijn idee een fout van PHP.
Voor jou controle heb je is_null() :) (en consorten)

eddie 21-07-2004 14:58

Citaat:

Chimera schreef op 21-07-2004 @ 15:41 :
Wel een hele wilde gok.

Correct :) Ik heb het even getest met PHP 5.0 met de volgende code:

PHP-code:

<?php
// Array gejat van php.net voorbeeldje
$vHost = array(
   
'yilan' => 'yilan.index.php',
   
'yl' => 'http://oo8h.com',
   
'ice' => 'http://oo8h.com/about.php',
   
'ise' => 'nce.index.php',
);

$totaalissset 0;
$totaalarraykey 0;

for( 
$i 0$i 10000$i++)
{
    
$begin microtime();
    
$a = isset( $vHost'yilan' ] );
    
$eind microtime();
    
$totaalissset += $eind $begin;
};

for( 
$i 0$i 10000$i++)
{
    
$begin microtime();
    
$a array_key_exists('yilan'$vHost ) ;
    
$eind microtime();
    
$totaalarraykey += $eind $begin;
};

echo 
'isset   : ' $totaalissset "\n";
echo 
'arraykey: ' $totaalarraykey "\n";
echo 
'diff        : ' abs$totaalissset $totaalarraykey ) . "\n";
;
?>

(soms krijg ik een negatief getal :confused: )
isset is iets sneller dan array_key_existst. Op mijn computer dan.
Citaat:

Chimera schreef op 21-07-2004 @ 15:41 :

Het is een kwestie van voorkeuren, "is gezet" of "bestaat" maakt niks uit, voordeel is dat je isset() consequent kan gebruiken, en array_key_exists natuurlijk alleen op arrays werkt.

isset moet je helemaal niet willen gebruiken... dat is sloppy programming :)

Fade of Light 21-07-2004 15:05

Citaat:

eddie schreef op 21-07-2004 @ 15:53 :
[B]Helaas; de omschrijving op nl.php.net zegt:
Aangezien je in php niet hoeft te declareren, kun je dat als hetzelfde opvatten?

Chimera 21-07-2004 15:25

Citaat:

eddie schreef op 21-07-2004 @ 15:53 :
Helaas; de omschrijving op nl.php.net zegt:

Wat de omschrijving zegt boeit me weinig, de nederlandse vertaling is echt bar en bar slecht.

Citaat:

eddie schreef op 21-07-2004 @ 15:53 :

Dus niet of deze is toegewezen (dat je hem daarvoor kunt gebruiken is een bijkomstigheid). Dat PHP on-the-fly variabelen aanmaakt, is naar mijn idee een fout van PHP.

Zal wel, dan moet je geen PHP maar C# ofzo gebruiken. Isset staat gewoon letterlijk voor "is gezet", lijkt me erg duidelijk waar die functie voor is.

Citaat:

eddie schreef op 21-07-2004 @ 15:58 :
isset moet je helemaal niet willen gebruiken... dat is sloppy programming :)
Is dat zo...

dafelix 21-07-2004 15:54

laten we ophouden met de discussie of we isset() nou wel of niet moeten gebruiken, en weer ontopic gaan :)

eddie 21-07-2004 16:11

Citaat:

dafelix schreef op 21-07-2004 @ 16:54 :
laten we ophouden met de discussie of we isset() nou wel of niet moeten gebruiken, en weer ontopic gaan :)
mwah... het antwoord is al gegeven en TS heeft het volgens mij al opgelost :)

Enlightenment 21-07-2004 16:23

Wat mij betreft mogen jullie semi-offtopic gaan, ik ben daar niet zo heel strict in.

Voorwaarden:
  • De topicstarter moet enigszins al antwoord hebben, offtopic-chat mag hem of haar niet storen in het antwoord krijgen op zijn/haar vraag of probleem.
  • De semi-offtopic discussie moet niveau hebben, geen onzin-chat (humor/grapje mag natuurlijk wel)
  • De semi-offtopic discussie moet een vriendelijk karakter hebben; flamewars zijn hier niet welkom
Maar misschien denken mijn collegae (Manuz en ekki) er anders over, dus onder voorbehoud.

eddie 21-07-2004 16:37

Citaat:

Chimera schreef op 21-07-2004 @ 16:25 :
Wat de omschrijving zegt boeit me weinig, de nederlandse vertaling is echt bar en bar slecht.

Ok, dan van de engelse site:
Citaat:

Returns TRUE if var exists; FALSE otherwise.
exists --> bestaat

Citaat:

Chimera schreef op 21-07-2004 @ 16:25 :

Zal wel, dan moet je geen PHP maar C# ofzo gebruiken. Isset staat gewoon letterlijk voor "is gezet", lijkt me erg duidelijk waar die functie voor is.

Zie hierboven. De functie is duidelijk bedoeld om te controleren of een variabele bestaat (dat het niet zo werkt daar kan ik niks aan doen).

Citaat:

Chimera schreef op 21-07-2004 @ 16:25 :
Is dat zo...
:D :p

eddie 21-07-2004 16:41

Citaat:

Fade of Light schreef op 21-07-2004 @ 16:05 :
Aangezien je in php niet hoeft te declareren, kun je dat als hetzelfde opvatten?
Je moet òf alle variabelen initialiseren (declareren) zodat je in de rest van het script niet meer hoeft te controleren of de variabele bestaat, òf je moet overàl controleren of de variabele bestaat.

(vind ik dan)

Manuzhai 21-07-2004 16:46

Citaat:

eddie schreef op 21-07-2004 @ 17:37 :
Zie hierboven. De functie is duidelijk bedoeld om te controleren of een variabele bestaat (dat het niet zo werkt daar kan ik niks aan doen).
Het werkt dus wel zo. :P

Citaat:

eddie schreef op 21-07-2004 @ 15:53 :
Dat PHP on-the-fly variabelen aanmaakt, is naar mijn idee een fout van PHP.
Dat is dus onzin. PHP is daar juist op gebouwd, dit maakt de taal zo prettig in het gebruik voor beginners.

Ik heb sterk het idee dat isset() in feite precies hetzelfde doet als is_null()... Zie hier wat null inhoudt in PHP.

Overigens ben ik het wat betreft het offtopic-gaan met Enlightenment eensch.

Manuzhai 21-07-2004 16:49

Citaat:

eddie schreef op 21-07-2004 @ 17:41 :
Je moet òf alle variabelen initialiseren (declareren) zodat je in de rest van het script niet meer hoeft te controleren of de variabele bestaat, òf je moet overàl controleren of de variabele bestaat.

(vind ik dan)

En waarom is dat goed? Als ik mijn script goed ken kan ik heus zelf wel bedenken of ik op een bepaalde plek moet checken of een var bestaat of niet. En initialiseren is echt een enorm inhoudsloze bezigheid, alleen maar de naampjes van je variabelen op een rij zetten zonder inhoud omdat je die nog niet weet.

eddie 21-07-2004 17:08

Citaat:

Manuzhai schreef op 21-07-2004 @ 17:46 :
Dat is dus onzin. PHP is daar juist op gebouwd, dit maakt de taal zo prettig in het gebruik voor beginners.

En dat maakt het dus makkelijker om bagger code te maken...
Citaat:

Manuzhai schreef op 21-07-2004 @ 17:46 :

Ik heb sterk het idee dat isset() in feite precies hetzelfde doet als is_null()... Zie hier wat null inhoudt in PHP.

PHP geeft bij is_null() een fout indien de variabele niet bestaat; bij isset() niet.

Vinnie Paz 21-07-2004 17:14

Citaat:

eddie schreef op 21-07-2004 @ 15:53 :
Helaas; de omschrijving op nl.php.net zegt:

Dus niet of deze is toegewezen (dat je hem daarvoor kunt gebruiken is een bijkomstigheid). Dat PHP on-the-fly variabelen aanmaakt, is naar mijn idee een fout van PHP.
Voor jou controle heb je is_null() :) (en consorten)

php.net zegt:
Citaat:

isset -- Determine whether a variable is set
het controleert dus of een variable een toegekende waarde heeft(een 0 telt dus ook). En aangezien variable on the fly worden gemaakt komt het precies op hetzelfe neer. Nu weet ik alleen niet wat array_key_exists() oplevert als je een element uit een array eerst set en dan unset. unset() in bv C++(bestaat wel niet voor zover ik weet maar effe in gedachte) zou de gereserveerde geheugen van een variable moeten behouden, maar gewoon de waarde NULL toekennen.
Ik ga trouwens ervan uit dat unset doet wat het zegt, dus toegekende waarde weghalen.

Nu weet ik niet of PHP zo is gemaakt dat op het moment dat unset wordt uitgevoerd de variable als het ware wordt vrijgegeven of dat alleen de waarde naar NULL word gezet.

Als het 2de gebeurd kan je isset() en array_key_exist() gewoon allebei gebruiken zonder dat je het mag uitschelden voor quick 'n dirty, imo.

Maar echt zou heel de variable verwijderd worden dan zou isset() een verkeerde uitkomst geven.

eddie 21-07-2004 17:15

Citaat:

Manuzhai schreef op 21-07-2004 @ 17:49 :
En waarom is dat goed? Als ik mijn script goed ken kan ik heus zelf wel bedenken of ik op een bepaalde plek moet checken of een var bestaat of niet. En initialiseren is echt een enorm inhoudsloze bezigheid, alleen maar de naampjes van je variabelen op een rij zetten zonder inhoud omdat je die nog niet weet.
Als jij goed code, dat breng je gedeeltes onder in verschillende functie of zelfs verschillende bestanden. Het is hierdoor (bijna) onmogelijk om met global variabele te werken.

Zolang je er actief mee bezig bent weet je idd welke variabelen er zijn en wanneer. Stop je er een maand mee, dan weet je dat niet meer; net zomin een ander jouw code nog kan volgen.

Dat PHP geen constructies kent zoals
Code:

my ( $var1, $var2, $var3 ) = 0;
(let niet op de naamgeving van de variabelen; het is maar een voorbeeld)
om in één keer een rij variabelen te zetten... tja...

Wanneer jij niet weet van welk type je variabelen moeten worden, klopt je script opbouw niet. Je kunt naar mijn idee altijd een waarde toewijzen aan een variabele -- een waarde die hoogts waarschijnlijk niet voorkomt tijdens het uitvoeren van het script zodat je hierop kunt controleren, ipv het gebruik van isset().

eXo 21-07-2004 17:18

Zo een NERD INSIDE ben je niet :p

Vinnie Paz 21-07-2004 17:20

Citaat:

eddie schreef op 21-07-2004 @ 18:15 :
Wanneer jij niet weet van welk type je variabelen moeten worden, klopt je script opbouw niet. Je kunt naar mijn idee altijd een waarde toewijzen aan een variabele -- een waarde die hoogts waarschijnlijk niet voorkomt tijdens het uitvoeren van het script zodat je hierop kunt controleren, ipv het gebruik van isset().
how dit laatste volg ik niet, mar k het het wel met de rest eens. Ik heb het namelijk zelf ook een aantal keer ondervonden. Als je ook maar 2 weken helemaal kapt met een project en je probeert daarna de draad op te pakken dan valt dat niet tegen zonder goede commentaar, duidelijke namen voor je variable

eddie 21-07-2004 17:26

Citaat:

Vinnie Paz schreef op 21-07-2004 @ 18:14 :
het controleert dus of een variable een toegekende waarde heeft(een 0 telt dus ook). En aangezien variable on the fly worden gemaakt komt het precies op hetzelfe neer. Nu weet ik alleen niet wat array_key_exists() oplevert als je een element uit een array eerst set en dan unset. unset() in bv C++(bestaat wel niet voor zover ik weet maar effe in gedachte) zou de gereserveerde geheugen van een variable moeten behouden, maar gewoon de waarde NULL toekennen.
Ik ga trouwens ervan uit dat unset doet wat het zegt, dus toegekende waarde weghalen.

PHP-code:

<?php
error_reporting
E_ALL );
$vHost = array(
   
'yilan' => 'yilan.index.php',
   
'yl' => 'http://oo8h.com',
   
'ice' => 'http://oo8h.com/about.php',
   
'ise' => 'nce.index.php',
);
var_dump( isset( $vHost'yilan' ] ) ); // true
var_dump($vHost'yilan' ] ); // yilan.index.php
unset( $vHost'yilan' ] ) ;
var_dump( isset( $vHost'yilan' ] ) ); // false
var_dump$vHost'yilan' ] ); // Notice: undefined index // NULL
?>

Het complete array-element wordt verwijderd met unset (undefined index).

Citaat:

Vinnie Paz schreef op 21-07-2004 @ 18:14 :

Nu weet ik niet of PHP zo is gemaakt dat op het moment dat unset wordt uitgevoerd de variable als het ware wordt vrijgegeven of dat alleen de waarde naar NULL word gezet.

Als het 2de gebeurd kan je isset() en array_key_exist() gewoon allebei gebruiken zonder dat je het mag uitschelden voor quick 'n dirty, imo.

Maar echt zou heel de variable verwijderd worden dan zou isset() een verkeerde uitkomst geven.

PHP-code:

<?php
error_reporting
E_ALL );
$a null;
var_dump( isset( $a ) ); // false
var_dump$a ); // null
unset( $a ); 
var_dump( isset( $a ) ); // false
var_dump$a ); // Notice: undefined variable // NULL
?>

De variabele wordt weggegooid met unset.

Vinnie Paz 21-07-2004 17:30

Citaat:

eddie schreef op 21-07-2004 @ 18:26 :
De variabele wordt weggegooid met unset.
dan heb jij gelijk dat isset() quick 'n dirty is :)


Alle tijden zijn GMT +1. Het is nu 10:11.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.