2013-03-27 105 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