2016-02-07 2 views
2

Я обволакиваю свой сайт, но у меня проблема с нарушением если инструкция внутри инструкции foreach, Я хочу, чтобы студент попытался выбрать работу, чтобы он/она уже был выбран, if() не работает и прерывается из цикла WHOLE foreach(), это мой код, разрыв внутри if() только разрывает if(), а не весь foreach , пожалуйста, помогите мне. спасибоbreak a if in a foreach() loope

foreach($_POST['JobId'] AS $i){ 
    $sqlCheckingBeofrAdding ="SELECT * FROM JobsLists WHERE JobId = '".$i."' AND SSU = '".$SSU."' "; 
    $rs = mysqli_query($dbCIE ,$sqlCheckingBeofrAdding); 

    $row1 = mysqli_fetch_assoc($rs); 

    if($row1 > 0){ 
     echo "You Already Have this Job In your List"; 
     break; 
    } 

    //insert into junction table.. 
    $sqlUpdate = "UPDATE Jobs SET NoStudent=NoStudent-1 WHERE JobId = '" . $i . "'"; 
    $resultUpdate = mysqli_query($dbCIE,$sqlUpdate) or die(mysqli_error($dbCIE)); 

    $sqlInsert ="INSERT INTO JobsLists(`JobID` , `SSU`) VALUES(".$i.",'".$SSU."')"; 
    $MyQuery= mysqli_query($dbCIE, $sqlInsert) or die(mysqli_error($dbCIE)); 

} 

ответ

1

Если ваш запрос возвращает только одну запись студента, вы можете использовать return, и это не приведет к дальнейшему коду внутри цикла.

Если запрос возвращает несколько студентов записи, чем вы можете использовать continue

Для точки 1:

if($row1 > 0){ 
    echo "You Already Have this Job In your List"; 
    return; 
} 

Для точки 2:

if(condition){ 
    echo "You Already Have this Job In your List"; 
    continue; 
} 
+0

спасибо u sir, но у меня есть код после инструкции foreach и continue; разбить только IF() и разбить; не запускает код после foreach .. пожалуйста, любая другая помощь? – mas5643

+0

Чем вы не можете использовать continue, вы будете использовать return. @ mas5643 – devpro

+1

Спасибо, сэр, я думаю, что продолжение работает, его просто, что я проверял базу данных после foreach, и это было эхом, сообщение, я думал, что это внутри foreach, ур код работает .. :) thank u sir. . – mas5643

0

Вы можете использовать break; ИЛИ return; (если это функция.) Дайте мне знать, если вам нужен код.

+0

Я использовал break, и он только сломал оператор if. не весь foreach – mas5643

0

break statement in PHP принимает числовой аргумент.

Попробуйте изменить break; к break 2; или использовать return;

0

РНР руководство говорит:

перерыв заканчивается выполнением тока для, Еогеаспа, в то время, сделайте время или переключатель структуру.

Я не думаю, что ваш break вырывается из if. Я подозреваю, что с вашим кодом возникла другая проблема.

0

Break не сломано если. Так работает язык.

Убедитесь, что у вас есть строка отладки до и после, если вместо простых операций MySQL. Это похоже на проблему с кодом.

Например, добавьте некоторые эхо-строки до и после if, и у вас будет лучшая идея о том, что происходит.

У самого кода, похоже, много проблем: 1-Вам не нужно извлекать все поля (выберите *), чтобы узнать, существует ли хотя бы одна запись. Это неправильное использование уровня базы данных.

2-Если вам нужно проверить, существует ли одна запись, добавьте LIMIT 1 в ваш SQL-запрос. Это позволит избежать MySQL для сканирования всей таблицы, если запрос не использует какой-либо уникальный ключ, что очень вероятно.

3-mysqli_fetch_assoc возвращает ассоциативный массив, но затем вы сравниваете массив с «> 0». Не могли бы вы подтвердить, что Array()> 0?

4-Вы, кажется, используете переменные camelCased, но затем внезапно у вас есть $ MyQuery, когда он должен быть $ myQuery в соответствии с используемым вами соглашением.

5-Вы сохраняете результат запроса в переменной с именем $ MyQuery. Это плохая практика, поскольку имя переменной должно описывать, что она содержит. Поэтому вы захотите назвать это $ myResult или $ rs так же, как в первом запросе.

6-Ни одна из переменных, используемых в операторах SQL, не экранирована.

Дважды проверьте свой код с помощью rubber duck technique, и я уверен, что вы обнаружите, что проблема не связана с if/break; но что-то еще. Не обидеть, но этот код кажется очень незрелым.