foreach循环更新每条记录的问题,而不是在复选框中选择的记录


Issue with foreach loop updating every record, rather than the ones just selected in a checkbox

我有一个页面,顶部有一个从数据库填充的下拉框,当我从下拉框中选择一个项目时,它会给出一个结果列表,每行末尾有一个复选框,我希望能够选择,使用每个复选框,任何数量的结果,并提交一个值回数据库中的字段为每个选择的结果。

我让这个工作,但它提交值到数据库中的每个字段,而不仅仅是那些选择

<?php
require_once("models/config.php");
if (!securePage($_SERVER['PHP_SELF'])){die();}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="favicon.ico">
<title>Stock Items</title>
<!-- Bootstrap CSS -->    
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- bootstrap theme -->
<link href="css/bootstrap-theme.css" rel="stylesheet">
<!--external css-->
<!-- font icon -->
<link href="css/elegant-icons-style.css" rel="stylesheet" />
<link href="css/font-awesome.min.css" rel="stylesheet" />    
<!-- full calendar css-->
<link href="assets/fullcalendar/fullcalendar/bootstrap-fullcalendar.css"     rel="stylesheet" />
<link href="assets/fullcalendar/fullcalendar/fullcalendar.css" rel="stylesheet" />
<!-- easy pie chart-->
<link href="assets/jquery-easy-pie-chart/jquery.easy-pie-chart.css" rel="stylesheet" type="text/css" media="screen"/>
<!-- owl carousel -->
<link rel="stylesheet" href="css/owl.carousel.css" type="text/css">
<link href="css/jquery-jvectormap-1.2.2.css" rel="stylesheet">
<!-- Custom styles -->
<link rel="stylesheet" href="css/fullcalendar.css">
<link href="css/widgets.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<link href="css/style-responsive.css" rel="stylesheet" />
<link href="css/xcharts.min.css" rel=" stylesheet"> 
<link href="css/jquery-ui-1.10.4.min.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 -->
<!--[if lt IE 9]>
  <script src="js/html5shiv.js"></script>
  <script src="js/respond.min.js"></script>
  <script src="js/lte-ie7.js"></script>
<![endif]-->
</head>
<body>
<!-- container section start -->
<section id="container" class="">
<?php include("navigation.php"); ?>
  <!--main content start-->
  <section id="main-content">
      <section class="wrapper">            
          <!--overview start-->
          <div class="row">
            <div class="col-lg-12">
                <h3 class="page-header"><i class="fa fa-lightbulb-o">    </i>Stock</h3>
                <ol class="breadcrumb">
                    <li><i class="fa fa-home"></i><a href="/">Home</a></li>
                    <li><i class="fa fa-lightbulb-o"></i>Stock</li>                         
                </ol>
            </div>
          </div>
                      <div class="row">
              <div class="col-lg-12">
                  <section class="panel">
                      <header class="panel-heading">
                          All Stock
                      </header>
                      <div class="panel-body">
                      <form class="form-horizontal" method="post" action="">
                      <div class="form-group">
                        <div class="col-lg-8">                      
                                          <select name="search" class="form-control" required >
                                            <?php
                                                 // connect to the database 
                                                require_once('models/db-settings.php');
                                                    $conn = mysql_connect($db_host, $db_user, $db_pass, $db_name) or die("Error " .mysql_error($conn)); 
                                                    mysql_select_db($db_name);
                                                $query = "SELECT `id`, `description` FROM `stock_templates`";
                                                $stock_templates = mysql_query($query);
                                                    echo "<option value=''>Select Stock Template</option>";
                                                while ($description=mysql_fetch_assoc($stock_templates)) {
                                                    echo "<option value='" . $description['id'] . "'>" . $description['description'] . "</option>";
                                                }
                                                ?>
                                          </select>
                        </div>
                        <div class="col-lg-1"> 
                            <input type="submit" name="filter" value="Search" class="btn btn-success" />
                        </div>
                      </div>
                    </form><br><br>                 
                    <?php
if(isset($_POST['formSubmit'])) 
{
    $aDoor = $_POST['check_list'];      
    if(empty($aDoor)) 
    {
        echo("<p>You didn't select any items to add to lease.</p>'n");
    } 
    else 
    {
        $N = count($aDoor);
        echo("<p>You selected $N item(s) to add to lease: ");
        for($i=0; $i < $N; $i++)
        {
            echo($aDoor[$i] . " ");
        }
        echo("</p>");
    }        
}
function IsChecked($chkname,$value)
{
    if(!empty($_POST[$chkname]))
    {
        foreach($_POST[$chkname] as $chkval)
        {
            if($chkval == $value)
            {
                return true;
            }
        }
    }
    return false;
}
?>
<?php
ob_start( );    
if(!empty($_POST['check_list'])) {
foreach($_POST['check_list'] as $check) {
       $query = mysql_query("UPDATE stock SET lease_id = $lease_id");
       $result2 = mysql_query($query);
// check if sent    
if ($result2) {
?>
<div class="alert alert-success fade in">
                              <button data-dismiss="alert" class="close close-sm" type="button">
                                  <i class="icon-remove"></i>
                              </button>
                                  <strong>Well done!</strong> Your lease items have been successfully saved.
                          </div> 
<?php
} else {
?>
<div class="alert alert-block alert-danger fade in">
                              <button data-dismiss="alert" class="close close-sm" type="button">
                                  <i class="icon-remove"></i>
                              </button>
                              <strong>Oh snap!</strong> We could not save your lease items.
                          </div> 
<?php
}
}
}       
?>                  
<?php
// connect to the database  
require_once('models/db-settings.php');
$conn = mysql_connect($db_host, $db_user, $db_pass, $db_name) or die("Error " .mysql_error($conn)); 
mysql_select_db($db_name);
// Extract filter information
$count = 0;
$search = mysql_escape_string(@$_POST['search']);

// select data from the database
$query2 = "SELECT * FROM `stock_templates` ORDER BY `stock_templates`.`id` DESC LIMIT 0";
// Perform Logic
if (array_key_exists("filter", $_POST)) { 
// query based on search term
$query2 = "SELECT * FROM `stock` WHERE $search=stocktemplate_id AND lease_id=0";
}
$result2 = mysql_query($query2);    
// Result
if (mysql_num_rows($result2) < 1) {
echo "<div align='center'><h2>Please select a stock template above and click search</h2></div>";
}
?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" class="form-horizontal" name="check_list[]">                                          
                                    <div class="form-group">
                                        <label class="control-label col-lg-1" for="lease_id">Lease Number *</label>
                                        <div class="col-lg-10"> 
                                          <select name="lease_id" class="form-control">
                                            <?php
                                                // connect to the database  
                                                require_once('models/db-settings.php');
                                                    $conn = mysql_connect($db_host, $db_user, $db_pass, $db_name) or die("Error " .mysql_error($conn)); 
                                                      mysql_select_db($db_name);
                                                $query = "SELECT `id`, `leasenumber` FROM `lease`";
                                                $leases = mysql_query($query);
                                                    echo "<option value=''>Select Lease..........</option>";
                                                while ($lease=mysql_fetch_assoc($leases)) {
                                                    echo "<option value='" . $lease['id'] . "'>" . $lease['leasenumber'] . "</option>";
                                                }
                                                ?>
                                          </select>
                                        </div>
                                      </div>
                                       <table class="table table-hover">
                          <thead>
                          <tr>
                              <th>Item ID</th>
                              <th>Description</th>
                              <th>Barcode</th>
                              <th>Serial</th>
                              <th>Add To Lease</th>
                          </tr>
                          </thead>
<?php
while ($row = mysql_fetch_array($result2))
{
$id = $row["id"];
$lease_id = $row["lease_id"];
$barcode = $row["barcode"];
$serial = $row["serial"];
$stocktemplate_id = $row["stocktemplate_id"];
$qa = 0;
?>
                          <tbody>
                          <tr>
                              <td><?php print $id ?></td>
                              <td><?php $q = mysql_query("SELECT description FROM stock_templates WHERE id = '$stocktemplate_id'"); while ($row = mysql_fetch_array($q)){$qa = $row["description"];} print $qa ?></td>
                              <td><?php print $barcode ?></td>                        
                              <td><?php print $serial ?></td>
                              <td><input type="checkbox" name="check_list[]" value="<?php print $id ?>" /></td>
                              <td></td>
                 </td>
                          </tr>
                          </tbody>
<?php
}
?>
                      </table>
                       <input class="btn btn-danger" type="submit" name="formSubmit" value="Add Selected To Lease" />
                      </div>
                      </form>
                  </section>
              </div>
          </div>          
      </section>
  </section>
  <!--main content end-->
  </section>
  <!-- container section end -->
  <!-- javascripts -->
   <script src="js/jquery.js"></script>
  <script src="js/bootstrap.min.js"></script>
  <!-- nice scroll -->
    <script src="js/jquery.scrollTo.min.js"></script>
    <script src="js/jquery.nicescroll.js" type="text/javascript"></script>
   <!-- jquery ui -->
   <script src="js/jquery-ui-1.9.2.custom.min.js"></script>
   <!--custom checkbox & radio-->
   <script type="text/javascript" src="js/ga.js"></script>
   <!--custom switch-->
   <script src="js/bootstrap-switch.js"></script>
   <!--custom tagsinput-->
   <script src="js/jquery.tagsinput.js"></script>
   <!-- colorpicker -->
   <!-- bootstrap-wysiwyg -->
   <script src="js/jquery.hotkeys.js"></script>
   <script src="js/bootstrap-wysiwyg.js"></script>
   <script src="js/bootstrap-wysiwyg-custom.js"></script>
   <!-- ck editor -->
   <script type="text/javascript" src="assets/ckeditor/ckeditor.js">    </script>
<!-- custom form component script for this page-->
<script src="js/form-component.js"></script>
<!-- custome script for all page -->
<script src="js/scripts.js"></script>
</body>
</html>

别担心。只需将插入查询的代码放入foreach()循环中。这样的:

foreach($_POST['check_list'] as $item)
{
    $sql="INSERT/UPDATE Query";
    //for example
    $sql = "INSERT INTO table_demo (field_1, TARGET_FIELD, field_2, field_3) VALUES (val_1, $item, val_2, val_3)";
    $insert = mysqli_query($connection,$sql);
}
//next code of your choice

试一试真的很容易。

看,这和你想要的一样。

在这个链接中,Sean Valsh的第一个答案是你的解决方案。

将数组作为每个复选框的名称将在提交时只给你数组中已选中的选项的id。

https://stackoverflow.com/a/4997271/6834980

询问是否还有问题。乐意效劳