2013-03-27 102 views
0

我已經轉換到MySQL Access數據庫。我有一個表,聯繫人,字段爲'EmailAddress','HideEmailAddress','FaxNumber','HideFaxNumber','PhoneNumber'和'HidePhoneNumber'。隱藏字段都是複選框,因此值爲1或0,其中1爲真。比較值給予不同的輸出

無論是在我的MySQL Select語句還是在我的PHP查詢中,我都需要能夠在隱藏字段的值爲1時不顯示信息。另外,三個字段中只有一個字段被標記爲隱藏,所以我不能做一條毯子「如果其中任何一個都隱藏了所有這些」。我需要將查詢輸出到網頁,並根據每列的隱藏字段的值顯示或隱藏上面的三個字段。我的SELECT語句檢索所有六個值,PHP將它變成一個數組,但我不認爲與陣列相比任何事情都會在這裏幫助。

我只是不知道我應該在這裏做。我一直在尋找一對夫婦現在天並沒有什麼的似乎來接近我所需要的。我有一個非常臨時的if-elseif的,否則在我的PHP循環中運行,以得到它在截止日期前完成,但是這需要9條或12個不同的語句,我敢肯定有一個更好的方式來做到這一點。

這裏是我的代碼。我已經把它折了很多從原來的查詢,但該查詢沒有工作,所以如果這裏有錯別字,它來自於砍伐。我只是不知道如何根據另一個字段的值來抑制字段。這也是爲什麼我在SELECT語句中有兩個AS語句 - 在原始查詢中,有來自五個不同表的信息,並且在它們中都有「FaxNumber」和「EmailAddress」。爲了萬一它改變了事情,我離開了AS。

<?php 

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Error connecting to MySQL server.'); 

$query = 'SELECT Contact.CompanyID, Contact.WebContact, Contact.FirstName, Contact.LastName, Contact.WorkPhone, Contact.HidePhoneNumber, Contact.FaxNumber AS ConFaxNumber, Contact.HideFaxNumber, Contact.EmailAddress AS ConEmailAddress, Contact.HideEmailAddress FROM Contact WHERE TDAT_Contact.WebContact = "1"'; 

mysqli_query($dbc, $query);  

if($r = mysqli_query($dbc, $query)) { 
    while ($row = mysqli_fetch_array($r)) { 
     if(($row['HidePhoneNumber'] == 1) && ($row['HideFaxNumber'] == 1)) { 
    echo '<hr><div align="query"><span class="strong">Contact:</span> ' . $row['FirstName'] . ' ' . $row['LastName'] . '<br /><br /><span class="strong">Direct Email Address: </span>' . $row['ConEmailAddress'] . '</div>';  
     } elseif($row['HidePhoneNumber'] == 0) && ($row['HideFaxNumber'] == 0) { 
    echo '<hr><div align="query"><span class="strong">Contact:</span> ' . $row['FirstName'] . ' ' . $row['LastName'] . '<br /><span class="strong">Direct Telephone: </span>' . $row['WorkPhone'] . '<br /><span class="strong">Direct Fax: </span>' . $row['ConFaxNumber'] . '<br /><span class="strong">Direct Email Address: </span>' . $row['ConEmailAddress'] . '</div>';} 
} 
    ...       
    else { // Query didn't run. 
      echo '<p style="color: red;">Could not retrieve the data because:<br />' . mysqli_error($dbc) . '.</p><p>The query being run was: ' . $query . '</p>'; 
       } 
      }} 

    mysqli_close($dbc); // Close the connection. 

?> 
+0

有一個解析的錯誤(第11行)如果你的問題不是這裏提供的,我們不能幫你解決問題 – MichaelRushton 2013-03-27 18:50:11

+0

看起來像我放棄了該行中的括號。謝謝你的收穫。 – user2216934 2013-03-27 18:56:37

回答

1
<?php 

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Error connecting to MySQL server.'); 

$query = 'SELECT Contact.CompanyID, Contact.WebContact, Contact.FirstName, Contact.LastName, Contact.WorkPhone, Contact.HidePhoneNumber, Contact.FaxNumber AS ConFaxNumber, Contact.HideFaxNumber, Contact.EmailAddress AS ConEmailAddress, Contact.HideEmailAddress FROM Contact WHERE TDAT_Contact.WebContact = "1"'; 

mysqli_query($dbc, $query);  

if($r = mysqli_query($dbc, $query)) { 
    while ($row = mysqli_fetch_array($r)) { 
     echo '<hr><div align="query"><span class="strong">Contact:</span> ' . $row['FirstName'] . ' ' . $row['LastName'] . '<br />'; 
     if ($row['HidePhoneNumber'] == 0) { 
      echo '<span class="strong">Direct Telephone: </span>' . $row['WorkPhone'] . '<br />'; 
     } 
     if ($row['HideEmailAddress'] == 0) { 
      echo '<span class="strong">Direct Email Address: </span>' . $row['ConEmailAddress'] . '<br />'; 
     } 
     if ($row['HideFaxNumber'] == 0) { 
      echo '<span class="strong">Direct Fax: </span>' . $row['ConFaxNumber']; 
     } 
     echo '</div>'; 
    } 
} else { // Query didn't run. 
    echo '<p style="color: red;">Could not retrieve the data because:<br />' . mysqli_error($dbc) . '.</p><p>The query being run was: ' . $query . '</p>'; 
} 

mysqli_close($dbc); // Close the connection. 
+0

謝謝!這很好地解決了它 - 即使我意識到我必須以不同的方式顯示數據才能適應佈局。 :) 再次感謝。 – user2216934 2013-03-29 00:06:09

1

你可以做到這一點在MySQL和避免額外的PHP編碼

像這樣假設的隱藏字段是布爾

$query = 'SELECT Contact.CompanyID, Contact.WebContact, Contact.FirstName,Contact.LastName, 
case when Contact.HidePhoneNumber then '' else Contact.WorkPhone end as WorkPhone, 
case when Contact.HideFaxNumber then '' else Contact.FaxNumber end AS ConFaxNumber, 
case when Contact.HideEmailAddress then '' else Contact.EmailAddress and AS ConEmailAddress FROM Contact WHERE TDAT_Contact.WebContact = "1"'; 

然後在PHP你只是

if($r = mysqli_query($dbc, $query)) { 
    while ($row = mysqli_fetch_array($r)) { 
     echo '<hr><div align="query"><span class="strong">Contact:</span> ' . $row['FirstName'] . ' ' . $row['LastName'] . '<br /><span class="strong">Direct Telephone: </span>' . $row['WorkPhone'] . '<br /><span class="strong">Direct Fax: </span>' . $row['ConFaxNumber'] . '<br /><span class="strong">Direct Email Address: </span>' . $row['ConEmailAddress'] . '</div>'; 
    } 
} 
+0

謝謝!這有點超出了我的理解範圍(看起來我的帖子失去了解釋我對PHP很陌生的一行),但是我稍後會用它來看看我是否可以完成這項工作並理解案例。 – user2216934 2013-03-29 01:38:02

0

打破你的HTMLØ輸出小塊,觀察常見模式,並將其分解爲以下功能:

function hide($field, $label, $row){ 
    if ($row['Hide'.$field] == 0) 
     echo '<span class="strong">'.$label.'</span>'.$row[$field].'<br/>'; 
} 

$hiddenfields = array ('EmailAddress' => 'Email Address', 'PhoneNumber' => 'Direct Telephone' /* etc. */); 

foreach($hiddenfields as $field => $label) 
    hide($field,$label,$row); 

這應該讓你開始。

0

您正在使用AND運算符(($行[ 'HidePhoneNumber'] == 1)& &($行[ 'HideFaxNumber'] == 1),這意味着這兩個條件必須是真實的執行條件code.To解決你的問題,你可以用你的while循環中「嵌套循環」,並檢查表達式例如:

$conditions=array("0"=>"phonenumber","1"=>"fax","2"=>"email") //associative array 
    for($i=0;$i<count($conditions);$i++){ 
    if($row[$conditions[$i]]==1){ 
    echo $row.[$conditions[$i]]; 
    } 
    else{ 
    echo "user doesn't want to share this information"; 
    } 
    } 

,如果狀態恢復1將回聲關聯數組成員

+0

你可以相應地改變表達式// if($ row [$ conditions [$ i]] == 1)「1或者0 – 2013-03-27 20:13:17

+0

是的 - 我能想到滿足所有條件的唯一方法是比較並查看是否有/所有這三個值都需要隱藏起來,但是我開始使用的其他語句......好吧,它工作得很好,但它不是很好:)謝謝你的回覆 - 我要檢查你的答案看看它是否可以幫助我處理另一個循環,我也遇到了麻煩。 – user2216934 2013-03-29 01:40:37