php - 如果 foreach 中存在行则不起作用

标签 php mysql if-statement pdo foreach

我正在通过ajax提交html数据数组。我的表单如下所示:

<form id="myForm">
    <label for="sel1">Select Class:</label>
    <select class="form-control" name="class_id" id="class_id">
        <?php
            $query=$con->query("SELECT * FROM class ORDER BY id ASC") or die($con->error);
            while($row=$query->fetch(PDO::FETCH_ASSOC)){?>
            <option value="<?php echo $row['id']?>"><?php echo $row['class_name']?></option>
        <?php } ?>
    </select>
    <br />
    <label>Add Section: </label>
    <label class="checkbox-inline"><input type="checkbox" name="section_name" value="A">A</label>
    <label class="checkbox-inline"><input type="checkbox" name="section_name" value="B">B</label>
    <label class="checkbox-inline"><input type="checkbox" name="section_name" value="C">C</label>
    <br />
</form>

数组和输入已按以下方式传递给 php

<script>
    $("#submit").click(function(){
        var class_id = $("#class_id").val();
        var section_name = [];
        $("input[name='section_name']:checked").each(function(){
            section_name.push(this.value);
        });
        $.ajax({
                url: 'insert_section.php',
                type: 'post',
                data: {class_id:class_id,section_name:section_name},
                success: function(data){
                    alert(data);
                    $('#myForm')[0].reset();
                }
            });
    }); 
</script>

我正在尝试在行存在或不存在的情况下回显消息。但这不起作用。下面的代码有什么错误。也许 foreach 子句引起了问题。请帮忙

if(isset($_POST["section_name"])){
foreach ($_POST["section_name"] AS $key => $item) {               
$query =$con->prepare("SELECT class_id, section_name FROM section WHERE class_id= ':class_id' && section_name ':section_name')");
$query->bindParam(':section_name',$_POST["section_name"][$key]);
$query->bindParam(':class_id', $_POST["class_id"]);
$query->execute();
$count = $query->fetchColumn();
    if ($count === 1)
    {
        echo "Section found";
    }
    else 
    {
        echo "Section is not found";
    }
}
}

我的数据库看起来像

enter image description here

最佳答案

不要在查询中包含引号 '。您也可以在循环中直接使用 $item 变量而不是 $_POST["section_name"][$key] 。更改您的代码如下:

if(isset($_POST["section_name"])){
foreach ($_POST["section_name"] AS $key => $item) {               
$query =$con->prepare("SELECT class_id, section_name FROM section WHERE class_id= :class_id && section_name = :section_name)");
$query->bindParam(':section_name',$item);
$query->bindParam(':class_id', $_POST["class_id"]);
$query->execute();
$count = $query->fetchColumn();
    if ($count === 1)
    {
        echo "Section found";
    }
    else 
    {
        echo "Section is not found";
    }
}
}

因为你必须计算你的结果。更改您的查询如下:

$query =$con->prepare("SELECT COUNT(class_id) as total_ids FROM section WHERE class_id= ':class_id' && section_name ':section_name')");

关于php - 如果 foreach 中存在行则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49954098/

相关文章:

mysql - 在 MySQL 中使用 UNION 而不是 OR?

java - 为掷硬币投注游戏实现 Java 代码

linux - 两种情况哪个更快?

r - 为什么 R 的 ifelse 语句不能返回向量?

PHP MySQLi 在插入时将文件重命名为行 ID

php - php 的 file_put_contents 对于 Nginx 的并发读取是否安全?

php - 如何确定文件是否仍在通过 ftp 传输

PHP 数据库删除函数只适用于数据库的第一行?

php - 那么检查一行是否存在的最佳方法是什么? EXISTS、COUNT 或 num_rows?

php - 添加 http ://prefix to URL when missing