iT邦幫忙

0

PHP IF條件問題

  • 分享至 

  • xImage

Dear 前輩大大...
php條件邏輯,想請問...
如果我什麼條件都不下,想讓他都不秀出來,是在哪一行程式碼要改呢...
因為其他IF都沒問題...麻煩大大指導ˊˋ

$result=mysql_query("SELECT * from permissions where userjobnumber = '$id'"); //設定為上一季
$row1 = mysql_fetch_row($result); 


if($row1[4]==49) //執行長_資訊_會計_管理
{
if($_POST['userjobnumber']=='' or $_POST['chinesename']=='' or $_POST['department']=='' or $_POST['season']=='')
{

if($_POST['userjobnumber']!='' or $_POST['chinesename']!='' or $_POST['department']!='' or $_POST['season']!='')
 {
 $userjobnumber=$_POST['userjobnumber'];
 $chinesename=$_POST['chinesename'];
 $department=$_POST['department'];
 $season=$_POST['season']; 
 $data=mysql_query("select * from approved where 
 userjobnumber like '%$userjobnumber%' and chinesename like '%$chinesename%' and department like '' and season like '%$season%' order by userjobnumber ASC"); 
 }


if($_POST['userjobnumber']!='' or $_POST['chinesename']!='' or $_POST['department']=='資訊課' or $_POST['season']!='')
 {
 $userjobnumber=$_POST['userjobnumber'];
 $chinesename=$_POST['chinesename'];
 $department=$_POST['department'];
 $season=$_POST['season']; 
 $data=mysql_query("select * from approved where 
 userjobnumber like '%$userjobnumber%' and chinesename like '%$chinesename%' and department like '資訊課' and season like '%$season%' order by userjobnumber ASC"); 
 }
 
if($_POST['userjobnumber']!='' or $_POST['chinesename']!='' or $_POST['department']=='管理課' or $_POST['season']!='')
 {
 $userjobnumber=$_POST['userjobnumber'];
 $chinesename=$_POST['chinesename'];
 $department=$_POST['department'];
 $season=$_POST['season']; 
 $data=mysql_query("select * from approved where 
 userjobnumber like '%$userjobnumber%' and chinesename like '%$chinesename%' and department like '管理課' and season like '%$season%' order by userjobnumber ASC"); 
 }
 
if($_POST['userjobnumber']!='' or $_POST['chinesename']!='' or $_POST['department']=='財會課' or $_POST['season']!='')
 {
 $userjobnumber=$_POST['userjobnumber'];
 $chinesename=$_POST['chinesename'];
 $department=$_POST['department'];
 $season=$_POST['season']; 
 $data=mysql_query("select * from approved where 
 userjobnumber like '%$userjobnumber%' and chinesename like '%$chinesename%' and department like '財會課' and season like '%$season%' order by userjobnumber ASC"); 
 }
 
 
if ($_POST['userjobnumber']!='' or $_POST['chinesename']!='' or $_POST['department']=='' or $_POST['season']!='')
 {
 $userjobnumber=$_POST['userjobnumber'];
 $chinesename=$_POST['chinesename'];
 $department=$_POST['department'];
 $season=$_POST['season']; 
 $data=mysql_query("select * from approved where 
 userjobnumber like '%$userjobnumber%' and chinesename like '%$chinesename%' and department IN ('資訊課','管理課','財會課') and season like '%$season%' order by userjobnumber ASC"); 
 }
 

 
}
}	

HTML部分

<html>
<body>
<title>績效考核系統(查詢)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<form name="reg" method="post" action="">
<!--<strong>績效考核表(一般職適用)</strong><br><br>-->
<CENTER>
<font size="5"><strong>績效考核表(查詢)</strong></font><br><br>


<SCRIPT type="text/javascript">
       <!-- 此check()函式在最後的「傳送」案鈕會用到 -->
        function check()
        {
			    
		
					if(confirm("確認要送出查詢嗎?")==true)
	
				    
				
					reg.submit();
				
	
				
         }

</SCRIPT >


<BR>


<form id="form1" name="form1" method="post" action="">
工號:
    <input name="userjobnumber" type="text" id="userjobnumber" value="<?php echo $userjobnumber?>" style="width:130px;height:20px;text-transform:capitalize;"maxlength="5"/>

  
中文姓名:
    <input name="chinesename" type="text" id="chinesename" value="<?php echo $chinesename?>" style="width:130px;height:20px;"maxlength="3"/>

<!--
部門:
    <input name="department" type="text" id="department" value="<?php echo $department?>" style="width:130px;height:20px;"/>
-->
	
部門:
<select name="department" type="text" id="department" value="<?php echo $department?>" style="width:130px;height:20px;"/>
  <option value="" selected="selected">請選擇部門</option>
  <optgroup label='管'>
 <option value="董事長室">董事長室</option>
  <option value="執行長室">執行長室</option>
 <option value="稽核室">稽核室</option>
 <option value="資訊課">資訊課</option>
  <option value="管理課">管理課</option>
 <option value="財會課">財會課</option>
  <optgroup label='銷'>
  <option value="行銷業務部" style="color:#FF0000;font-weight: bold;">行銷業務長</option>  
  <option value="行銷業務部">行銷業務部</option>
 <option value="業務一課">業務一課</option>
  <option value="業務二課">業務二課</option>
 <option value="業務行政課">業務行政課</option>
  <option value="行銷組">行銷組</option>    
 <option value="美國區">美國區</option>
  <option value="歐洲區">歐洲區</option>
 <option value="中國區">中國區</option>    
  <option value="日本區">日本區</option>
  <optgroup label='研'>
  <option value="研究發展部" style="color:#FF0000;font-weight: bold;">技術長</option>  
  <option value="研究發展部">研究發展部</option> 
  <option value="產品管理部">產品管理部</option>  
  <option value="PCB layout room">PCB layout room</option>    
 <option value="韌體1課">韌體1課</option>
  <option value="韌體2課">韌體2課</option>
 <option value="IC設計課">IC設計課</option>    
  <option value="硬體1課">硬體1課</option>
 <option value="硬體2課">硬體2課</option>
  <option value="機構課">機構課</option>
 <option value="設計驗證工程課">設計驗證工程課</option>    
  <option value="安規課">安規課</option>    
  <optgroup label='製'>
  <option value="供應鏈管理部" style="color:#FF0000;font-weight: bold;">營運長</option> 
  <option value="供應鏈管理部">供應鏈管理部</option> 
  <option value="採購課">採購課</option>    
 <option value="物流組">物流組</option>
  <option value="工程課">工程課</option>
 <option value="生產課">生產課</option>    
  <option value="品保課">品保課</option>
 <option value="生管課">生管課</option>

  
  
  

</select>
	
	
<!--
考核區間:
    <input name="season" type="text" id="season" value="<?php echo $season?>" style="width:130px;height:20px;"/>
-->
考核區間:
<select name="season" type="text" id="season" value="<?php echo $season?>" style="width:130px;height:20px;"/>
  <option value="" selected="selected">請選擇考核區間</option>
 <option value="2016Q4">2016Q4</option>
 <option value="2017Q1">2017Q1</option>
 <option value="2017Q2">2017Q2</option>
 <option value="2017Q3">2017Q3</option>
  <option value="2017Q4">2017Q4</option>
  <option value="2018Q1">2018Q1</option>
  <option value="2018Q2">2018Q2</option>
  <option value="2018Q3">2018Q3</option>
  <option value="2018Q4">2018Q4</option>
</select>
  
<BR><BR>
  

<p></p>
<table width="900" border="3">
   <tr>
    <td align="center">工號</td>
    <td align="center">部門</td>
    <td align="center">中文姓名</td>
    <td align="center">英文姓名</td>
    <td align="center">考核區間</td>
    <td align="center">工作態度</td>
    <td align="center">工作績效</td>
    <td align="center">工作品質</td>
    <td align="center">本職技能</td>
    <td align="center">總分</td>
	<td align="center">等第</td>
	<td align="center">表單</td>

	
  </tr>
<?php



  for($i=1;$i<=mysql_num_rows($data);$i++){
$rs=mysql_fetch_row($data);

?>

  <tr>
    <td align="center"><?php echo $rs[0]?></td>
    <td align="center"><?php echo $rs[1]?></td>
    <td align="center"><?php echo $rs[2]?></td>
    <td align="center"><?php echo $rs[3]?></td>
    <td align="center"><?php echo $rs[4]?></td>
    <td align="center"><?php echo $rs[5]?></td>
    <td align="center"><?php echo $rs[6]?></td>
    <td align="center"><?php echo $rs[7]?></td>
    <td align="center"><?php echo $rs[8]?></td>
    <td align="center"><?php echo $rs[9]?></td>
	<td align="center"><?php echo $rs[10]?></td>
	<td align="center"><?php echo '<input type="button" name="id" value="Form" onclick=window.open("detail.php?workno='.$rs[0].'&season='.$rs[1].'&cname='.$rs[2].'&ename='.$rs[3].'")>'?></td>
  </tr>



<?php
}



 
if($userjobnumber=='' and $chinesename=='' and $department=='' and $season=='')
	{echo "";}
  
elseif($rs=="")
{
	echo '<SCRIPT type="text/javascript">
         alert("查詢不到您要的資料!!!"); 		 
         </SCRIPT>'; 
}




?>
</table>
<p>&nbsp;</p>











<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<CENTER>









<input type="submit" name="submit" value="搜尋" onclick="1check()"/>&nbsp;&nbsp;&nbsp;
<!--<input type="button" name="button" value="送出" onclick="check()"  />&nbsp;&nbsp;&nbsp;-->
<input type="button" name="button1" value="取消" onclick="location.href='mainpage.php'" />
<!--<input type="reset" name="button1" value="清除" />-->
</CENTER>
</form>
<br><br>
</html>
小哈 iT邦新手 4 級 ‧ 2017-02-17 13:49:21 檢舉
大大,小弟已經找到自己的問題點...
少了一個and...
麻煩各位大大...
本來想回在這,結果code的語法這邊好像不解析,只好用回答的。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
做工仔人!
iT邦大師 1 級 ‧ 2017-02-17 13:51:28

改成這樣試試 !!

if($row1[4]==49) //執行長_資訊_會計_管理
{

if(not ($_POST['userjobnumber']=='' and $_POST['chinesename']=='' and $_POST['department']=='' and $_POST['season']==''))
{

0
king742171
iT邦新手 2 級 ‧ 2017-02-17 14:10:12

你好~
建議你SQL語法可以分開兩個變數存放
例如:

$sSQL = "SELECT * FROM TABLE";
$sWHERE = "";

//以下條件敘述請參考,調整成你需要的條件敘述
if ($_POST['userjobnumber']!=''){ //if userjobnumber 有條件進來就給予新增條件變數
    $sWHERE = $sWHERE . "AND userjobnumber like '%" . $_POST['userjobnumber'] . "%' "
}
if ($_POST['chinesename']!=''){ //if chinesename 有條件進來就給予新增條件變數
    $sWHERE = $sWHERE . "AND chinesename like '%" . $_POST['chinesename'] . "%' "
}
if ($_POST['department']!=''){ //if department 有條件進來就給予新增條件變數
    $sWHERE = $sWHERE . "AND department like '%" . $_POST['department'] . "%' "
}
if ($_POST['season']!=''){ //if season 有條件進來就給予新增條件變數
    $sWHERE = $sWHERE . "AND season like '%" . $_POST['season'] . "%' "
}
//以上的做法就可以不用侷限在全部條件一起判斷

//最後判斷是否要將sWHERE的條件敘述句加進sSQL中
if ($sWHERE != ""){ //if sWHERE 經過上面的敘述判斷後,結果有"任一"條件出現,則將sWHERE加進sSQL的敘述句中
    $sSQL = $sSQL . " WHERE " . $sWHERE . " ORDER BY userjobnumber ASC"
}

//執行sSQL語言
Execute($sSQL)

上面的做法請參考
以前我寫條件的寫法也跟你一樣
顯得冗長不好管理
最近學到這招
簡單很多又好管理
敘述條件的自由度也提升了
例如可以AND換成OR、LIKE換成其他比較子(=)
甚至是另外新增一個if來判斷時間(如果你的TABLE有時間欄位的話)

加下來剩下顯示的部分
就交給你發想~
我想..只要能夠成功將你要的結果查詢出來..
剩下的做法應該都一樣~

抱歉,我看錯欄位了,以為這是回答框…然後好像刪不掉。

1

像你這樣的多層次if寫法,當你要改需求時你就會發現需求很難改動了。
就以你最外層的判斷式吧!其實你大可包成一個判斷函式來做:
(老實說你的判斷式很有問題,第一層是判斷任何一個無值,第二層一開始卻是要判斷任何一個有值……)
我現在是先當你所有要判斷的欄位都不得為空

if(check_not_null(['userjobnumber','chinesename','department','season'])){
    //your code
}
function check_not_null($post_array){
    foreach($post_array as $value){
        if($value == ''){  
            return false;
        }
    }
    return true;
}

複雜的判斷式不要通通塞在一行來處理……你會很難判斷通過狀態。
再來你所有的code都有這個:

 $userjobnumber=$_POST['userjobnumber'];
 $chinesename=$_POST['chinesename'];
 $department=$_POST['department'];
 $season=$_POST['season']; 

重覆的程式碼應該要提取出來而不是不斷的重覆他。

你的code現在的結構很糟,你要想辦法改善他。

看更多先前的回應...收起先前的回應...

贊同!!!
他的code我怎麼看怎麼詭異
判斷的方式亂糟糟
日後再回來修改程式
或是再新增個職位
這一段的修改可能就會造成問題
甚至BUG

誠心建議harry789111大大
將這段修正~
參考我的回答或是Samと可樂快跑的回答
都是不錯的方式

或者說..
可以將我們倆的建議組合~(就fuction的部分)
例如:
function check_not_null($post_array){
$sSQL = "SELECT * FROM TABLE";
$sWHERE = "";
foreach($post_array as $key => $value){
//如果value有值就新增條件判斷
//如果沒有值就不新增(所以才沒有$value == ''的判斷)
if($value != ''){
$sWHERE = $sWHERE . "AND " . $key .
" like '%" . $value . "%' ";
}
}
//最後判斷是否要將sWHERE的條件敘述句加進sSQL中
//如果上面的判斷每次都是空值
//當然sWHERE就會維持原來的空值
if ($sWHERE != ""){
$sSQL = $sSQL . " WHERE " . $sWHERE .
" ORDER BY userjobnumber ASC"
}

//將sSQL值回傳
return $sSQL
//或是echo出來查看最後組出來的sSQL是不是你要的結果

}

@king742171 等等,你把sql語句放進來事情就複雜化了。
函式名稱定義的很清楚「確認不是空」。
也就是除了這件事之外不要包其他的事情進來做。
函式定什麼名稱,就只做那件事就好。
如果你是要把二件事併成一個功能,那也得先測試好這二件事都能
正確的運作才把他組合到另一個函式。

另外……sql組合技中,還是學習善用「陣列」跟「implode」
有值的就放進陣列。
最後先判斷陣列是不是大於0,是的話才啟動WHERE的行為。
然後就可以用implode高高興興的串AND了。

然後

$sSQL = $sSQL . " WHERE " . //後面我省略

其實這樣寫就好了:

$sSQL .= " WHERE " . //後面我繼續省略

總之字串組合技非常多,多練習一下就可以省下不少code。

小哈 iT邦新手 4 級 ‧ 2017-02-18 11:43:17 檢舉

感謝大大們回覆,我會開始修正我的程式碼...
第一次接到案子,所以只能一步一步慢慢學習...
感謝各位IT前輩...

喔喔!!!
又學到一招!!!!
(話說..".="的寫法我知道..只是為了說明讓提問者理解..謝謝提醒)
/images/emoticon/emoticon12.gif

小哈 iT邦新手 4 級 ‧ 2017-08-29 10:16:20 檢舉

各位IT大大,於之前的需求,因為USER有可能輸入四個都有值,或者是其中三個有值,或者是一個...等等
userjobnumber,chinesename,department,season
所以才會這樣下條件...

我要發表回答

立即登入回答