Является ли «переключатель» лучше всего использовать в следующем сценарии?

У меня есть длинный код в php, может ли он быть сокращен любым другим методом, используя switch или иным образом? У меня есть таблица ставок заработной платы, и разные штаты имеют разные ставки одного и того же назначения. Я хочу вставить array значений в таблице, где есть конкретное обозначение (desg) а также state который затем рассчитывает скорость соответственно.

Таблица:

id  desgn      rate   state
1   MAZDOOR    6600   MN
2   SKD-I      10890  MN
3   SKD-I      11400  MZ
4   SKD-II     9270   MN
5   SKD-II     9300   MZ

Мой сценарий до сих пор:

if(!empty($_POST['u'])) {
foreach ($_POST['u'] as $uid) {
$sql=mysql_query("select * from cpl_pay_temp where id='$uid' ");

while ($cal = mysql_fetch_array($sql)) {

$ticket=$cal['ticketno'];
// $month_yr=$_POST['month'];
$desgn=$cal['desg'];
$empname=$cal['name'];
$empdesg=$cal['desg'];
$cat=$cal['sex'];
$father=$cal['fathersname'];
$present=$cal['day_present'];
$state=$cal['state'];

if(($desgn=='MAZDOOR')&& ($state=='MZ')) {
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='MAZDOOR' and state='MZ'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='MAZDOOR')&& ($state=='MN')) {
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='MAZDOOR' and state='MN'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='SKD-I') && ($state=='MZ')){
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-I' and state='MZ'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='SKD-I') && ($state=='MN')) {
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-I' and state='MN'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='SKD-I') && ($state=='MZ')){
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-I' and state='MZ'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='SKD-II') && ($state=='MN')) {
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-II' and state='MN'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='SKD-II') && ($state=='MZ')) {
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-II' and state='MZ'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='SKD-III') && ($state=='MN')) {
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-III' and state='MN'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='SKD-III') && ($state=='MZ')) {
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='SKD-III' and state='MZ'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='HSKD') && ($state=='MN')){
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='HSKD' and state='MN'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

if(($desgn=='HSKD') && ($state=='MZ')){
$sql_rate=mysql_query("select * from cpl_rate_mast where desg='HSKD' and state='MZ'");
$rate=mysql_result($sql_rate,$i,'rate') ;
$pay=round($present*($rate/$days));
}

mysql_query("insert into  cpl_pay(billno,ticketno,name,desg,sex,fathersname,day_present,total_wages,from_date,to_date,status,state) values('$vrno','$ticket','$empname','$desgn','$cat','$father','$present','$pay','$fdate1','$tdate2','Y','$state' )  ") or die(mysql_error());

1

Решение

Вот краткая демонстрация моего комментария, которая состоит в том, чтобы переработать ваш сценарий, если вы обнаружите, что копируете и вставляете один и тот же код по всей странице. Кажется, в вашем фрагменте не все переменные, поэтому я не могу гарантировать, что он будет работать как есть. Примечание, вам нужно переключиться на PDO или же mysqli_ для подключения к вашей базе данных:

<?php
function FetchCPL($array = false)
{
$rate   =   0;
$design =   (!empty($array['design']))? mysql_real_escape_string($array['design']) : false;
$state  =   (!empty($array['state']))? mysql_real_escape_string($array['state']) : false;
$count  =   (!empty($array['count']) && is_numeric($array['count']))? $array['count'] : 1;

if($design && $state) {
$sql_rate   =   mysql_query("select * from `cpl_rate_mast` where `desg` = '".$design."' and `state` = '".$state."'");
$rate       =   mysql_result($sql_rate,$i,'rate') ;
}

return $rate;
}

if(!empty($_POST['u'])) {
foreach ($_POST['u'] as $uid) {
$sql    =   mysql_query("select * from `cpl_pay_temp` where `id` = '".mysql_real_escape_string($uid)."'");

while ($cal = mysql_fetch_array($sql)) {
$empdesg    =   $cal['desg'];
$pay        =   round($present*(FetchCPL(array("design"=>$cal['desg'],"state"=>$cal['state'], "count"=>$i))/$days));
mysql_query("insert into  `cpl_pay`
(`billno`,`ticketno`,`name`,`desg`,`sex`,`fathersname`,`day_present`,`total_wages`,`from_date`,`to_date`,`status`,`state`)
values('$vrno','".$cal['ticketno']."','".$cal['name']."','".$cal['desg']."','".$cal['sex']."','".$cal['fathersname']."','".$cal['day_present']."','$pay','$fdate1','$tdate2','Y','".$cal['state']."' )  ") or die(mysql_error());
}
}
}
?>
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]