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> </p>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<CENTER>
<input type="submit" name="submit" value="搜尋" onclick="1check()"/>
<!--<input type="button" name="button" value="送出" onclick="check()" /> -->
<input type="button" name="button1" value="取消" onclick="location.href='mainpage.php'" />
<!--<input type="reset" name="button1" value="清除" />-->
</CENTER>
</form>
<br><br>
</html>
改成這樣試試 !!
if($row1[4]==49) //執行長_資訊_會計_管理
{
if(not ($_POST['userjobnumber']=='' and $_POST['chinesename']=='' and $_POST['department']=='' and $_POST['season']==''))
{
你好~
建議你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有時間欄位的話)
加下來剩下顯示的部分
就交給你發想~
我想..只要能夠成功將你要的結果查詢出來..
剩下的做法應該都一樣~
像你這樣的多層次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。