Я очень стараюсь понять, как решить эту проблему. Пожалуйста, будьте осторожны, я все еще учусь!
Существует четыре рабочих места: B.Avf, R.Avf, Office и Production. Продукты проходят через рабочие места. Теперь я создаю скрипт, который может оповещать, если один и тот же продукт проходит одно и то же рабочее место дважды. Теперь это сложная часть: если продукт прошел "B.Avf", он не может передать "R.Avf" без предупреждения, то же самое, если продукт прошел "R.Avf", он не может пройти "B.Avf "whitout и alert. Но если продукт прошел для ex. "R.Avf" нормально пропускать "Office" без предупреждения.
Это то, что я получил до сих пор: (Это как пример № 5 =)
Maby должен ли я создавать вложенные операторы if
?
Этот код будет верным все время!
PHP
if($_SESSION['user']['usr_workplace'] == "R.Avf" ||
$_SESSION['user']['usr_workplace'] == "B.Avf" &&
strpos($history, "R.Avf") !== FALSE ||
strpos($history, "B.Avf") !== FALSE)
Условие if
должно быть:
//IF this session user workplace is "B.Avf" or "R.Avf"
//AND "B.Avf" or "R.Avf" excist in history, then alert!
if(($_SESSION['user']['usr_workplace'] == "R.Avf" || $_SESSION['user']['usr_workplace'] == "B.Avf") && (strpos($history, "R.Avf") !== FALSE || strpos($history, "B.Avf") !== FALSE))
if
заявление проверьте R.Avf
в сеансе , а также найти в ваших $history
или если B.Avf
в вашей сессии , а также найти в ваших $history
, чем true
в противном случае его false
.
Оператор if можно сделать намного проще, удалив одно условие и получив желаемый результат:
if(
($_SESSION['user']['usr_workplace'] == "R.Avf" || $_SESSION['user']['usr_workplace'] == "B.Avf")
&&
strpos($history, $_SESSION['user']['usr_workplace']) !== false
)
Обратите внимание на то, что вам не нужны две проверки strpos, так как первая часть оператора if будет разрешать запуск второй части, если это правда.
Было бы лучше извлечь это в метод или упростить его дальше, но за то, что вы просили, это будет делать :).
вам нужно просто проверить session value
на $history
чтобы избежать проверки two strpos()
где вы выполняете статическую проверку строки:
здесь вы проверяете статическую строку:
strpos($history, "R.Avf") !== FALSE ||
strpos($history, "B.Avf") !== FALSE)
сделайте его динамичным следующим образом:
if($_SESSION['user']['usr_workplace'] == "R.Avf" || $_SESSION['user']['usr_workplace'] == "B.Avf" && strpos($history, $_SESSION['user']['usr_workplace']) !== FALSE )
вы должны разбить это, если в 2 метода. нужно называть:
isUserSessionRBAvf($_SESSION['user']['usr_workplace'])
другой должен проверить strpos pos:
isHistoryAvf($history, "R.Avf")
и вы получите в итоге:
if(isUserSessionRBAvf(...) && isHistoryAvf(...))
таким образом у вас есть более читаемый код и легче отлаживать.
PS рассматривает другой метод именования
Это работает, оно имеет правильные фигурные скобки:
if($_SESSION['user']['usr_workplace'] == "R.Avf" || ($_SESSION['user']['usr_workplace'] == "B.Avf" && (strpos($history, "R.Avf") !== FALSE || strpos($history, "B.Avf") !== FALSE)))
Он сначала проверяет r.Avf, OR и затем проверяет все условия в фигурных скобках