如果在foreach()内部打破一个

时间:2016-02-07 04:58:12

标签: php mysql

我正在整理我的网站,但我遇到了破解的问题 如果声明在foreach声明中,  我希望当一个学生尝试选择他/她已经选择的工作时,if()失败并从WHOLE foreach()循环中断,这是我的代码,if()内部的中断只会打破if (),而不是整个foreach  请帮帮我。 谢谢

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));

}

5 个答案:

答案 0 :(得分: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;
} 

答案 1 :(得分:0)

您可以使用break;return;(如果这是一个功能。)如果您需要代码,请告诉我。

答案 2 :(得分:0)

break statement in PHP接受数字参数。

尝试将break;更改为break 2;或使用return;

答案 3 :(得分:0)

php手册说:

  

break结束当前for,foreach,while,do-while或switch结构的执行。

我认为您的break没有突破if。我怀疑你的代码存在不同的问题。

答案 4 :(得分:0)

休息不会打破ifs。这就是语言的工作方式。

确保在if之前和之后有一个调试行而不是简单的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无关;但对其他事情。不要冒犯,但这段代码似乎很不成熟。