【问题标题】:if row exists within foreach doesn't work [duplicate]如果foreach中存在行不起作用[重复]
【发布时间】:2018-10-01 21:45:08
【问题描述】:

我正在通过 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";
    }
}
}

我的数据库看起来像

【问题讨论】:

  • 就像一般的事情 - 你只需要准备一次语句,而不是每次循环。

标签: php mysql if-statement pdo foreach


【解决方案1】:

不要在查询中包含引号 '。您也可以在循环中直接使用$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')");

【讨论】:

  • 还有section_name :section_name是错的。
  • 是的,只是错过了。更正@u_mulder
  • @B.Desai。感谢你的关心。但它不起作用。尽管数据在数据库中,但仍然找不到回显部分。似乎问题出在我的数据库或输入表单中。请查看更新后的问题。
  • 检查更新@DipakOjha
  • @B.Desai。当我将数组添加到复选框时,现在它返回 null 并且插入语句也不起作用。在此之前,插入工作,仅当行存在条件不起作用时。我正在重新编码以找到我受苦的地方,所以稍后我回复了您的评论。请查看我的 ajax 代码一次。我认为问题从那里开始。感谢您一直以来的支持。
猜你喜欢
  • 2018-12-10
  • 1970-01-01
  • 2021-09-11
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
相关资源
最近更新 更多