2011-10-04 54 views
0

我想根據問題參數回顯$ q2和$ q3,但它始終給我相同的值,而不管參數的值如何。我做錯了什麼?

$q1 = $_GET['question']; 
if ($q1 == "domaina.com"||".domaina.com"||"domaina.co") 
{ 
    $q2 = 'domaina'; 
    $q3 = 'DomainA'; 
} 
elseif ($q1 == "domainb.com"||".domainb.com"||"domainb.co") 
{ 
    $q2 = 'domainb'; 
    $q3 = 'DomainB'; 
} 
elseif ($q1 == "domainc.com"||".domainc.com"||"domainc.co") 
{ 
    $q2 = 'domainc'; 
    $q3 = 'DomainC'; 
} 
else { 
    $q2 = 'noquestions'; 
    $q3 = 'NoQuestions'; 
} 

回答

4

任何非空字符串的計算結果爲true,因此您的第一個「或」語句總是計算爲true。

做正確的是:

if ($q1 == "domaina.com"||$q1 == ".domaina.com"||$q1 == "domaina.co") 

,而不是

if ($q1 == "domaina.com"||".domaina.com"||"domaina.co") 
+0

+1第一名。 –

+7

也許是第一個地方,但最初帶着一個沒有解決問題的佔位符答案。 [FGITW](http://meta.stackexchange.com/questions/9731/fastest-gun-in-the-west-problem)活得很好。 –

+0

@Wesley Murch:我「un-ignored」這個[php]標籤,儘管最近PHP的問題匆匆一瞥......嗯,我首先忽略了標籤的原因之一。 – BoltClock

0

您需要格式化它像這樣:

if ($q1 == "domaina.com" || $q1 == ".domaina.com" || $q1 == "domaina.co") 

什麼你在做解釋爲:

if ($q1 == ("domaina.com" || ".domaina.com" || "domaina.co")) 
// interpreted as: 
if ($q1 == (((bool)"domaina.com" || (bool)".domaina.com" || (bool)"domaina.co")) 
// interpreted as: 
if ($q1 == ((true || true || true)) 
// interpreted as: 
if ($q1 == true) 
// interpreted as: 
if ((bool)$q1 == true)) 

請注意,如果您使用===運算符,您的最後一個條件應該始終爲true,而不是第一個條件,因爲您將比較字符串和布爾操作的結果。

0

您的==聲明中有錯誤。

應該是這樣的:

$q1 = $_GET['question']; 
if ($q1 == "domaina.com"|| $q1 == ".domaina.com"|| $q1 == "domaina.co") 
{ 
    $q2 = 'domaina'; 
    $q3 = 'DomainA'; 
} 
elseif ($q1 == "domainb.com"|| $q1 == ".domainb.com"||$q1 == "domainb.co") 
{ 
    $q2 = 'domainb'; 
    $q3 = 'DomainB'; 
} 
elseif ($q1 == "domainc.com"||$q1 == ".domainc.com"||$q1 == "domainc.co") 
{$q2 = 'domainc'; 
$q3 = 'DomainC'; 
} 
    else {$q2 = 'noquestions'; 
    $q3 = 'NoQuestions'; 
} 

您還可以使用in_array

$q1 = $_GET['question']; 
if(in_array("$q1", array("domaina.com",".domaina.com",""domaina.co""))) 
{ 
    $q2 = 'domaina'; 
    $q3 = 'DomainA'; 
} 
    //... 
0

下面將始終爲true。

if ($q1 == "domaina.com"||".domaina.com"||"domaina.co") 

你大概的意思是:

if ($q1 == "domaina.com"||$q1 == ".domaina.com"||$q1 == "domaina.co") 
+0

我太慢了。 –

0

您在IFS條件語句是錯誤的。先嚐試修復那些。

if ($q1 == "domaina.com"||$q1 == ".domaina.com"||$q1 == "domaina.co") 
{ 
    ... 
} 
4

tooooo重複。

$q1 = $_GET['question']; 
$q2 = 'noquestions'; 
$q3 = 'NoQuestions'; 
if (preg_match('~^.?domain([a-c])\.com?$~',$q1,$m)) { 
    $q2 = 'domain'.$m[1]; 
    $q3 = 'Domain'.strtoupper($m[1]); 
} 

順便問一下,讓你知道,你寫的代碼,沒有縮進或空格的方式,是可怕的。

0

你可以簡化你的if語句使用對strpos函數是這樣的:

$q1 = $_GET['question']; 
if (strpos($q1, "domaina") === true) { 
    $q2 = "domaina"; 
    $q3 = "DomainA"; 
} elseif (strpos($q1, "domainb") === true) { 
    $q2 = "domainb"; 
    $q3 = "DomainB"; 
} elseif (strpos($q1, "domainc") === true) { 
    $q2 = "domainc"; 
    $q3 = "DomainC"; 
} else { 
    $q2 = "noquestions"; 
    $q3 = "NoQuestion"; 
} 
0

我認爲你可以簡化你的代碼位:

<?php 

$q1 = $_GET['question']; 
$q2 = getDomain($q1); 
$q3 = ucfirst(substr($q2, 0, -1)) + strtoupper(substr($q2, -1)); 

function getDomain($url){ 
    $arrA = array('domaina.com', '.domaina.com', 'domaina.co'); 
    $arrB = array('domaina.com', '.domaina.com', 'domaina.co'); 
    $arrC = array('domaina.com', '.domaina.com', 'domaina.co'); 

    $q1 = strtolower($url); 
    if(in_array($q1, $arrA)) 
     return "domaina"; 
    if(in_array($q1, $arrB)) 
     return "domainb"; 
    if(in_array($q1, $arrC)) 
     return "domainc"; 

    return ''; 
} 
?>