?var=...

Status
Niet open voor verdere reacties.

Sleight

Gebruiker
Lid geworden
3 mrt 2009
Berichten
67
omdat dit nogal moeilijk op te zoeken is vraag ik het maar hier

ik heb dus een link met ....php?nr=4251461

hoe krijg ik dan dat nummer in een variabele?
 
Het zit al in een variabele, namelijk:
PHP:
$_GET['nr'];

Je kunt em eventueel wel gewoon kopieren naar een nieuwe variabele natuurlijk ;)

Houd er wel rekening mee dat als de gebruiker een andere URL gevolgd heeft, dat $_GET['nr'] misschien niet bestaat, dus het beste kun je hem altijd controleren en daarna kopieren, zodat hij altijd bestaat binnen je script:

PHP:
if ( isset ( $_GET['nr'] ) ) {
  // pak het nummer uit de url, maak er een getal van.
  // anders kan hij ook een tekst sturen, en het is maar de vraag of je script dat accepteerd...
  $nr = (int) $_GET['nr'];
}
else {
  // de gebruiker heeft een URL waar ?nr=... niet in voorkomt, gewoon op 0 zetten.
  $nr = 0;
}
 
Om nog even een aanvulling te geven op het script van Frats:

Om te controleren of een waarde een getal is kun je ook de functie:


PHP:
ctype_digit($waarde);

gebruiken.

Dan zou je het dus zo kunnen doen:

PHP:
if ( isset ( $_GET['nr'] ) ) {
  if ( ctype_digit ( $_GET['nr'] ) ) {
    // De meegegeven waarde is een getal.
    $nr = $_GET['nr'];
  } else {
    // De meegegeven waarde is geen getal.
    $nr = 0;
  }
} else {
  // de gebruiker heeft een URL waar ?nr=... niet in voorkomt, gewoon op 0 zetten.
  $nr = 0;
}

EDIT: Makkelijker zou misschien zijn:

PHP:
if ( isset ( $_GET['nr'] ) && ctype_digit ( $_GET['nr'] ) ) {
  // De meegegeven waarde is een getal.
  $nr = $_GET['nr'];
} else {
  // de gebruiker heeft een URL waar ?nr=... niet in voorkomt of niet een getal waarde heeft verstuurd, gewoon op 0 zetten.
  $nr = 0;
}

Maar ik denk eigenlijk dat ctype_digit($_GET['nr']) een error of warning geeft als ie niet bestaat.
 
Laatst bewerkt:
Dat is in het tweede script geen probleem, PHP gebruikt lazy evaluation... je kunt bijv. ook dit doen, omdat het tweede statement nooit aangeroepen wordt:
PHP:
if ( true || die ( 'dag script!' ) ) {
  echo 'je krijgt nooit een die =)';
}

omdat PHP na de true weet dat de conditie altijd waar is :)

Maar verder maakt het niet zoveel uit; als je iets cast naar een integer met (int) $var en het was een tekst, dan wordt die ook gewoon 0.
 
Klopt dat wel Frats?

Erik gebruikt && jij gebruikt ||.

Bij een || is het logisch dat als een van de evaluaties TRUE levert hij al bezig gaat.

Daarnaast werkt (int) alleen in PHP5 of niet?
ctype_digit() heeft al ondersteuning in PHP4.
 
Hmmm, of (int) pas in 5.0 is toegevoegd weet ik niet, dat zou kunnen :)

Maar het principe van lazy evaluation is, dat zodra PHP weet wat er uit een if-statement of boolean assign gaat komen, hij niet verder gaat.

PHP:
$bool = true || die ( 'bla' );

Zal dus geen die doen, omdat PHP bij het zien van 'true' al weet dat het antwoord true oplevert, dus hij stopt daar.

Hetzelfde geldt voor deze:
PHP:
$bool = false && die ( 'bla' );

Bij false weet hij al dat het antwoord false is, dus hij gaat niet verder. Dat is dus waarom het bij Erikboy's tweede voorbeeld niet uitmaakt: als $_GET['nr'] niet gezet is, dan levert isset () erop false op, dus hij zal nooit het type checken :)
 
Oke maar misschien is het vergelijken met die() niet zo'n goed voorbeeld.

Wanneer je dit namelijk doet
PHP:
$int = 6;

if($int > 5 || $int > 7) {
  echo 'Int is groter dan 5 of 7 <br />';
} else {
  echo 'Int is niet groter dan 5 of 7 <br />';
}

if($int > 5 && $int > 7) {
  echo 'Int is groter dan 5 en 7 <br />';
} else {
  echo 'Int is niet groter dan 5 en 7 <br />';
}
Krijg je als het goed is 2 verschillende antwoorden.
Ik ben niet helemaal zeker of de voorbeelden van jouw en mij gelijk zijn maar dat hoor ik wel :)

Ben altijd benieuwd naar andere gedachten ;)

NB: Deze discussie gaat redelijk offtopic maar zolang de TS niet reageert laat ik de berichten staan.
 
Lijkt me wel ja, dat je dan twee verschillende antwoorden krijgt ;)

PHP:
$int = 6; 
if($int > 5 || $int > 7) {
  echo 'Int is groter dan 5 of 7 <br />';
} else {
  echo 'Int is niet groter dan 5 of 7 <br />';
}

is gelijk aan:

PHP:
if ( true || false )

Dat betekend dat PHP de vergelijking $int > 7 niet uitvoert, omdat de eerste uitkomst true is.

PHP:
$int = 6; 
if($int > 5 && $int > 7) {
  echo 'Int is groter dan 5 en 7 <br />';
} else {
  echo 'Int is niet groter dan 5 en 7 <br />';
}

Wordt:

PHP:
if ( true && false ) {

Hier wordt de tweede vergelijking wel uitgevoerd, omdat je bij true && nog niet zeker bent van de uitkomst; het kan nog zowel true als false opleveren... dus hij doet de tweede vergelijking ook, en dán ziet hij pas dat de vergelijking false is, en gaat hij in het else statement.

Het levert dus idd correcte uitkomsten op.

Had je gedaan:
PHP:
$int = 6; 
if($int > 5 && $int > 7 && $int > 9 ) {
  echo 'Int is groter dan 5 en 7 en 9 <br />';
} else {
  echo 'Int is niet groter dan 5 en 7 en 9 <br />';
}

Dan zou hij het derde statement níet vergelijken; omdat hij na de tweede al wist dat de totale && vergelijking false zou gaan zijn.


De reden dat ik die('') gebruikte als voorbeeld is omdat het dan héel duidelijk is dat hij die vergelijking niet uitvoert, dan zou het script namelijk onmiddelijk stoppen... dat gebeurd echter niet, hij gaat gewoon door :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan