Gå til innhold

Spørsmål angående forms mot php, case sensitivity


Anbefalte innlegg

Hei!

 

Jobber med en skoleoppgave, der vi bl.a. skal jobbe med forms og php koding.

Lurer derfor på om noen her har tips til hvordan man kan gjøre formen hvor brukeren blir stilt spørsmål om han/hun er gift eller ikke til å ikke være case-sensitiv?

 

Kan jo såklart lage en else if med "ja/nei/Ja/Nei/JA/NEI", men hadde vært artig å få det til på en enklere måte. :)

 

Dette er en liten del av koden jeg bruker, om noen syntes det er enklere å legge til koding rett inn.

 


<?php
   $gift=$_POST["gift"];
   $barn=$_POST["barn"];

if ($gift == ja&&$barn == ja)
   {
   	print("Du er gift og har barn.<br/>");
   }

...
?>

 

Mvh. Niggorex. :)

Lenke til kommentar
Videoannonse
Annonse

Er nødt til å gjøre det med tekst felt, er et av kravene til oppgaven, men det var en genial løsning. Kommer garantert til å bruke den senere til lignende problemer! Tusen takk! :)

 

Leste også et sted at det kan lønne seg å tvinge formen til å bruke en bestemt "case" (upper/lower), men vet ikke hvordan det fungerer.

 

Er forresten håpløst at vi må bruke de tekst feltene. Radio buttons ville sett mye bedre ut, og ville jo utelukket tilnærmet ALLE mulige feil...

 

Takk for svar! :)

Lenke til kommentar

Høres sært ut.. Men uansett, jeg ville kjørt

 

$janei = $_POST["janei"];

$janei = preg_replace('/[^janei]/i', '', $janei);    //Fjerner alle tegn bortsett fra de som er i gyldige svar
$janei = strtolower($janei);   // Gjør alle bokstavene "små"


switch ($janei) {
   case 'ja':
       echo "Ja";
       break;
   case 'nei':
       echo "Nei";
       break;
   default:
       echo "Svar ja eller nei";
       break;
}


Ikke så elegant, men ikke så elegant å bruke tekstfelter i et sånt tilfelle uansett..

Med forbehold om feil.. ett år siden jeg skrev PHP :p

 

Edit: Regner med du er ukjent med regex, men du kommer sikkert borti det uansett.. Brukes til å søke etter (og eventuelt bytte ut) kombinasjoner av tegn i tekst. Krever at du bruker hodet :)

 

Legger ved et par nyttige sider:

 

http://regex.larsolavtorvik.com/ - Verktøy for å teste ut regex-uttrykk i sanntid

http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/ - Oversikt over bruk

 

Og manualen, for øvrig:

http://www.php.net/manual/en/manual.php

Endret av Garanti
Lenke til kommentar

// Testdata
$_POST = Array(
'uteligger' => ' ja ',
'gift' => ' jA',
'barn' => 'NeI ',
);

// Skit for å tolke strenger som boolske verdier
function strtobool($str, $str_y, $str_n) {
$tmp = preg_match("/{$str_y}|{$str_n}$/i", trim($str), $ret);
if(empty($ret) || count($ret) > 1) {
	throw new Exception("<b>Error:</b> Invalid data input <code>{$str}</code> for function " . __function__);
} else {
	return ($str_y == strtolower(end($ret))) ? true : false;
}
}

// Gyldige input-felt
$keys = Array(
'gift',
'barn',
'uteligger',
);

$keys_inv 	= array_flip($keys);
$data 		= array_intersect_key($_POST, $keys_inv);
$flags 		= 0;

foreach($data as $key => $val) {
try {	
	if(strtobool($val, 'ja', 'nei') == true) {
		$flags += pow(2, $keys_inv[$key]);
	}
}
catch(Exception $e) {
	exit($e->getMessage());
}
}

// Rask og skitten tekstrepresentasjon

$ret = 'Du ';

$msgs = Array(
1 => 'er %sgift',
2 => 'har %sbarn',
4 => 'er %suteligger',
);

foreach($msgs as $flag => $msg) {
$ret .= ((($flags & $flag) == $flag) ? sprintf($msg, "") : sprintf($msg, "ikke "))  . ' og ';
}

echo substr($ret, 0, -4);

// output : Du er gift og har ikke barn og er uteligger

 

Bitmask-ish løsning. Ble litt fascinert av problemet :(

Lenke til kommentar

Bitmask-ish løsning. Ble litt fascinert av problemet :(

 

Er ikke nødvendig å gjøre det så ballette. Holder med og legge til en funksjon i koden du har fra før. Eventuelt bruke metoden til Garanti, preg_match.

 

<?php

$gift = $_POST["gift"];
$barn = $_POST["barn"];

if(strtolower($gift) == 'ja' && strtolower($barn) == 'ja') {
	print("Du er gift og har barn.<br/>");
}

?>

Dette vil matche JA, Ja, jA, og ja.

Lenke til kommentar

Det var mest en spøk. :)

 

På det annen side er ikke en løsning av den typen dum når man sitter med et utall variabler og permutasjoner som skal dekkes, om det nå ikke var tilfelle her.

 

Synes forøvrig at stripos og liknende funksjoner er bedre å anbefale. Regexp er overkill til dette og nybegynnere skjønner gjerne lite av det.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...