【问题标题】:How to change Single row Array Variable inside While Loop and use new result to Update Database Table如何在 While 循环中更改单行数组变量并使用新结果更新数据库表
【发布时间】:2018-02-14 08:26:45
【问题描述】:

END 处的 HTML TABLE 结果图片

下面的完整代码 - 按顺序排列。注意 - 我可以轻松更改所有 ROWS 并在 HTML TABLE 中显示。至少对我来说,诀窍是只将一行更改为新值。

  <?php
  session_start();

  $db = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

  $stmt = $db->prepare("SELECT id_ai, name, age, agender, $flex,hsp_plan,hcs_plan FROM quotes ");
  $stmt->execute();
  $stmt->bind_result($id_ai, $name, $age, $agender, $flex,$hsp_plan,$hcs_plan);
  $stmt->store_result();

  echo 
  "<div class='table-responsive'>
  <table id='myTable' class='table table-striped table-bordered'>
  <p><font color='#4169e1'></font></p>
  <thead>
  <tr>
  <th>ID</th>
  <th>Name</th>
  <th>Age</th>
  <th>Gender</th>
  <th>Flex</th>
  <th>HSP</th>
  <th>HCS</th>
  </tr>
  </thead>
  <tbody>";

我在回显表标题后开始我的 while 循环,因此它只打印一次。 然后我开始我的循环

  while ($stmt->fetch()){

     $_SESSION['id_ai'] = $id_ai;
     $_SESSION['name']= $name;
     $_SESSION['age']= $age;
     $_SESSION['agender']= $agender;
     $_SESSION['flex']= $flex;
     $_SESSION['hsp_plan']= $hsp_plan;
     $_SESSION['hcs_plan']= $hcs_plan;

   $id_ai    = $_SESSION['id_ai'];
   $name     = $_SESSION['name'];
   $age      = $_SESSION['age'];
   $agender  = $_SESSION['agender'];
   $flex     = $_SESSION['flex'];
   $hsp_plan = $_SESSION['hsp_plan'];
   $hcs_plan = $_SESSION['hcs_plan'];

  $hsp_plan = mysqli_real_escape_string($db, $_SESSION['hsp_plan']);
  $hcs_plan = mysqli_real_escape_string($db, $_SESSION['hcs_plan']);
  $age      = mysqli_real_escape_string($db, $_SESSION['age']);
  $agender  = mysqli_real_escape_string($db, $_SESSION['agender']);

我使用变量来查询数据库表。完美运行。结果,我在定价 97.09 97.09 上得到了重复 - FOREACH 纠正了这个问题。

  $hsp_query = mysqli_query($db,"Select sum($agender * 1 ) FROM $hsp_plan WHERE age = $age ");         
     $hsp = mysqli_fetch_array($hsp_query, MYSQLI_BOTH);                

    foreach($hsp as $key => $value)
        {
            $hsp_a = explode(' ', trim($value));
                $hsp_b[$hsp_a[1]] = $hsp_a[0];                
            $hsp_price = implode(' ', $hsp_b);
        }  

我用新结果插入/更新表。

  $sql = "INSERT INTO quotes (id_ai, id, name, age, agender, flex,hsp,hcs,bal, hsp_plan, hcs_plan) VALUES ('$id_ai', '$id_ai', '$name', '$age','$agender','$flex', '$hsp_price', '$hcs_price', '$hsp_plan','$hcs_plan')
        ON DUPLICATE KEY UPDATE `id_ai`='$id_ai', `id`='$id_ai', `name`='$name', `age`='$age', `agender`='$agender', `flex`='$flex', `hsp`='$hsp_price', `hcs`='$hcs_price', `hsp_plan`='$hsp_plan', `hcs_plan`='$hcs_plan' ";
      if (mysqli_query($db, $sql)) {
                    echo "";
               } else {
                        echo "Error: " . $sql . " " . mysqli_error($db);
               }

这是我显示结果的地方,并且工作正常,直到我尝试更新。见下文。

  echo 
   "<tr>
   <td>$id_ai</td>
   <td>$name</td>  
   <td>$age</td>
   <td>$agender</td>
   <td><font size=2 color='#DAA520'><b><u>$flex</u></b></font></td>        
   <td align=center><font size=2 color='green'>$hsp_price<br /><a    href=#>$hsp_plan</a></font>

   <form action='hsp.php' method='POST' >
    <select onchange='this.form.submit()'' name='hs' class='form-control'>
        <option name='hs' value='hsp0'>chg</option>
        <option name='hs' value='hsp0'>x</option>
        <option name='hs' value='hsp5012'>5012</option>
        <option name='hs' value='hsp5013'>5013</option>
        <option name='hs' value='hsp5021'>5021</option>
        <option name='hs' value='hsp5022'>5022</option>
        <option name='hs' value='hsp5023'>5023</option>
        <option name='hs' value='hsp5031'>5031</option>
        <option name='hs' value='hsp5032'>5032</option>
        <option name='hs' value='hsp5033'>5033</option>
    </select>
  </form>
 </td>

   </tr>";
  }

  echo "</tbody></table></div>"; 


  /* close statement*/
  $stmt->close();   

  }
  ?>

这是 HSP.PHP 的瓶颈 - 注意上面的 Form action='hsp.php ... 下面是代码。只更新循环中的最后一条记录。

hsp.php

  <?php
  session_start();

 $db = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

  $_SESSION['hs'] = $_POST['hs'];
  $_SESSION['id_ai'];

  $hs = $_SESSION['hs'];
  $id_ai = $_SESSION['id_ai'];

  $hs = mysqli_real_escape_string($db, $_SESSION['hs']);
  $id_ai = mysqli_real_escape_string($db, $_SESSION['id_ai']);

  $sql = "UPDATE quotes SET hsp_plan='$hs' where id_ai = '$id_ai' ";
               if ($db->query($sql) === TRUE) {
          header("Location: index.php");
  }
  else {
     echo "Error updating record: " . $db->error;
   }         
 ?>

【问题讨论】:

  • 为什么要在同一个循环中设置$_SESSION['id_ai'] = $id_ai;$id_ai = $_SESSION['id_ai'];
  • 'id_ai' 在你的桌子上有什么相关性?它是您要更新的行所独有的吗?我很难理解你的代码或你的意图。
  • 我只是在排除故障。 id_ai 是主键自动增量.. id 只是我用来测试的非索引主键

标签: php mysql arrays loops foreach


【解决方案1】:

编辑: 如果我理解正确,您的表的每一行都是同名的表单,每个表单都有一个具有相同输入名称的输入,并且您想要进行更改并仅更新与用户更改的行相对应的数据库行,你可以尝试使用&lt;input type='hidden' name='row_id' value='$row_id'&gt;

原文: 你有几个问题。我注意到的主要问题是您的表单提交到 hsp.php 但 hsp.php 似乎没有设置为给客户端一个视图。

我是否了解您希望客户在完成选择后看到同一张表?您的更新代码可以在页面显示代码之前,但包含在 if 语句中,例如 if(isset($_POST['hs']) 或其他内容。

如果您告诉我总体目标是什么,那么我可能会引导您通过更好的方法来完成它。你的方式有点杂乱无章,让人很难跟上。

【讨论】:

  • 您好,谢谢.... 是 hsp.php 发送 header("Location: index.php");一旦更新数据库,基本上将其发送回索引。我实际上更希望它留在同一页面上。这旨在成为我们一次引用数百个报价的工具,但我们还需要深入研究并单独更新每个人。我已经使用了以下代码,而无需将表单发送到 hsp.php...如何为我要更新的特定人员或 ROW 选择 KEY 或 ID 是我苦苦挣扎的地方。
  • 我错过了标头重定向。这当然是一种不同的做事方式。如果这些行代表个人,那么具有唯一 ID 的 update where 语句有什么问题?我从未听说过在循环中进行这种更改。你的逻辑和你的观点都混在一起了。
猜你喜欢
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 2021-05-24
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多