hallo,

ik ben bezig aan een bepaald script, en ik wilde graag weten of iemand weer hoe je het voor elkaar krijgt om van een string met nummers de voorste nummer de valideren en te redirecten naar een bepaalde page. ik zal even een voorbeeld geven:

er zijn 2 nummers die toewijzen naar een 2 pages. nummer 1 forward naar page1 en nummer 2 naar page2, ik wil dus als iemand in een input zet: 12398235927392 mijn form weet dat het naar page1 moet en ook alleen het begin nummer valideerd en niet heel de string gaat controleren op nummer 1 of te redirecten hopelijk is het een beetje duidelijk wat ik wil. gewoon alles wat begin met 1 gaat naar p1 en alles wat begint met 2 naar p2.

alvast bedankt. :)
- Ariën - op 18/08/2019 17:23:35
Anyway, het is altijd leuk om te zien hoeveel wegen er naar Rome leiden. De ene is weer net wat langer dan de andere ;-)

Mja, maar jouw weg komt niet eens aan in Rome maar eindigt halverwege mogelijk in het moeras. In jouw code peuter je simpelweg het eerste karakter eraf zonder te controleren of de string inhoud bevat, maar er wordt nog steeds niks gecontroleerd. Dit is dus een halve geen oplossing.

Los van de kosten van operaties zou je ook moeten kijken naar de lengte van code (en je zou ook gewoon moeten blijven analyseren wat je aan het doen bent...) want dat is in zekere zin ook "complexiteit" voor de programmeur. Dit kost ook (ontwikkel)tijd om de draad weer op te pakken als hier wijzigingen in aangebracht moeten worden. Er spelen meerdere afwegingen dan enkel performance.

Als je puur eendimensionaal redeneert en verder alles behalve performance buiten beschouwing laat heb je gelijk. Maar zo moet je geen code schrijven natuurlijk.

In zekere zin is de opzet van @Rob een goede aanzet maar nog steeds niet helemaal in overeenstemming met de spec. Om alles in 1x plat te slaan:
<?php
$input = '32345'; // alleen geldig als dit begint met '1' of '2'
if (preg_match('#^([12])#', $input, $match) == 1) {
    // redirect naar $match[1]
} else {
    // foutafhandeling voor als de invoer niet geldig is
}
?>

Natuurlijk roept dit ook vragen op. Die pagina's '1' en '2' neigen sterk naar "magische constanten" dus de vraag is sowieso of met deze aanpak in beginsel wel de goede weg ingeslagen is...
Mijn weg komt niet in het moeras uit, en is precies de juiste. Je moet het probleem niet te groot bekijken, maar kleiner.

Uiteraard moet je controleren of het bestaat, en of het een getal is, en daar zijn isset() en is_numeric() prima functies voor, maar dat zie ik als een volgende stap die ik in alle vroegte vandaag al getypt heb :-)

Ik hoop trouwens dat we het niet te complex voor de topicstarter maken. In simpele lijnen kan het als volgt. Uiteindelijk ben ik ook wel benieuwd naar de beweegredenen van de topicstarter waarom hij naar de eerste tekens wilt kijken.

<?php
 
//Voorbeeld:
$string = "012345678";

//Pak het eerste teken... Dus een 1.
// Controleer of het eerste teken bestaat, en of deze een getal is
if (isset($string[0]) && isset($string) && is_numeric($string[0])) {
// Toon het eerste teken.
echo $string[0];
} else {
    echo "Mispoes!";
}
?>
- Ariën - op 18/08/2019 19:28:23
$firstCharacter = $string[0];
if (isset($firstCharacter)

En zelfs met deze simpele code ga je de mist in. isset() geeft ten onrechte true terug, ook al is de string leeg...
Werkte wel, maar de code liep niet goed op de juiste wijze door.
Fixed and tested.
oke iedereen ik ga het straks allemaal testen ik ga jullie laten weten wat goed werkte :) alvast bedankt voor alle reacties

Reageren