Permalänk

Litet PHP-problem

if (strstr($referer, 'google')) { echo 'found'; } else { echo 'not found'; }

Den här koden kollar om ordet "google" finns i URLen jag fiskar upp, men om jag vill kolla efter fler ord, hur gör jag då?

Permalänk

Ett enkelt sätt är väl att skapa en array med alla dina ord och sen stega genom den så som du gör ovan...

Visa signatur

Q6600 @ 3.2GHz | 2*4 Corsair XMS2 5-5-5-12 @ 1003 | Club3D HD4850 | Asus P5Q Pro

Permalänk

Tack för ditt svar.
Varför fungerar inte detta?

$refererarray = array( "google", "bing", "search.msn", "search.live", "cuil", "aolsearch.aol", "search.aol", "my.aol", "search.yahoo", "search.naver", "search.myway", "search.mywebsearch", "search.netscape", "int.ask", "search.rr", "ask.", "search.bt", "search.earthlink", "search.yahoo", "verden.abcsok", ".myspace" ); foreach ($refererarray as $value) { echo “$value <br>“; };

Jag får:
Parse error: parse error, expecting `','' or `';'' in E:\Program\WAMP\www\****\landing.php on line 38

Rad 38 är: echo “$value <br>“;

Men det sitter ju ";" där det ska eller inte ska? Jag har testat att ändra fram och tillbaka men får det inte att funka.

Permalänk

Kan det vara de lustiga “sneda“ citationsteckena?
Prova byta ut mot vanliga "raka".

Permalänk

Ja tack! Jag såg det inte! Så kan det gå när man kopierar gammal kod.

Permalänk

Det sista ";" kan du ta bort.

För att få strstr att fungera med en array så kan du köra. Betydligt smidigare om du ska använda det fler gånger och ser snyggare ut i koden.

$found = false; $referarray = array('google','bing','etc'); //Alla de du vill ha i arrayen så klart foreach($referarray as $ref){ if (strstr($referer, $ref)) { $found = true; } } echo ($found) ? 'found' : 'not found';

Du skulle också kunna göra en funktion av det och göra såhär

function strstrArr($subject, $keys){ if(!is_array($keys) return false; foreach($keys as $ref){ if (strstr($subject, $ref)) return true; } return false; } $referarray = array('google','bing','etc'); //Alla de du vill ha i arrayen så klart echo ($strstrArr($referer, $referarray) ? 'found' : 'not found';

Visa signatur

[i7 2600k @ 5GHz| NH-D14, fläktar utbyta mot ljudlösa 120mm SySS 800| Asus P8P67| HD6870 DirectCU| Corsair 4x8GB (32GB) 1600MHz DDR3| Moddat Corsair 550VX | Mac Pro / G5 Chassi| 2x120GB raid0 Intel 520 sys+ 2x3TB slask & home (riktig lagring på 12TB ZRAID NAS som även home backuppas/rsyncas till) ] - Helt ljudlös om man inte lägger örat intill chassit
[ MacBook Pro Retina 13 | 16GB ram | 256GB PCIe SSD | OS X(main), Arch ]

Permalänk
Testpilot

Som det står på php.net så ska man inte använda strstr om man bara ska kolla efter om en sträng förekommer i en annan då strstr returnerar slutet av strängen som hittades. Man bör istället använda strpos som returnerar positionen då den är snabbare och drar mindre minne. Gör kanske ingen märkbar skillnad men det är väl lika bra att lära sig "rätt" från början

Man måste dock tänka på att strpos kan returnera 0 om strängen hittas precis i början så man skiljer det från false som returneras om strängen inte hittas alls.

if(strpos($subject, $ref) !== false){ echo 'strängen hittades'; }

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]