Php 如何在数据库查询中使用会话和数组来存储和显示数据

Php 如何在数据库查询中使用会话和数组来存储和显示数据,php,mysql,arrays,database,session,Php,Mysql,Arrays,Database,Session,我想将数据保存到数组中,并在输入数据后使用会话。我已经尝试并成功了。但是我想显示一些从数据库中获取的数据,并将其保存到数组和会话中。我尝试添加数据库查询,但数据只能保存一个数据 <?php if (!isset($_SESSION)) { session_start(); # code... } include_once "AlgoCBC.php"; function additem($jns, $hrg, $hrg_tw, $total, $kt_satu, $

我想将数据保存到数组中,并在输入数据后使用会话。我已经尝试并成功了。但是我想显示一些从数据库中获取的数据,并将其保存到数组和会话中。我尝试添加数据库查询,但数据只能保存一个数据

<?php
if (!isset($_SESSION)) {
session_start();
# code...
}


include_once "AlgoCBC.php";

function additem($jns, $hrg, $hrg_tw, $total, $kt_satu, $kt_dua, $kt_tiga, $kt_empat, $kt_lima, $kt_enam, $kt_tujuh){
    

    if (empty($_SESSION['$jns'])) {

        include "koneksi.php";

        $_SESSION['jenis'] = array();
        $jen = array_push($_SESSION['jenis'], $jns);
    
        
        foreach ($jen as $id) {
            
        
        $sql = mysqli_query($kns, "Select stok.id_stok as id_stok, merk.nama_merk as nama_merk, model.nama_model as nama_model, stok.warna as warna FROM stok INNER JOIN model On stok.id_model=model.id_model INNER JOIN merk ON model.id_merk=merk.id_merk where id_stok = '$id' ") or die(mysqli_error($kns));



                 while ($y=mysqli_fetch_array($sql)) {
                    $mrk[] = implode("", DekripCBC($y['nama_merk']));
                    $mdl[] = implode("", DekripCBC($y['nama_model']));
                    $wrn[] = implode("", DekripCBC($y['warna']));
                 }

                }

    $_SESSION['merk'] = array();
    $_SESSION['model'] = array();
    $_SESSION['warna'] = array();
    $_SESSION['kuantiti'] = array();
    $_SESSION['harga'] = array();
    $_SESSION['harga_tawar'] = array();
    $_SESSION['harga_jual'] = array();
    }

    $kn = $kt_satu + $kt_dua + $kt_tiga + $kt_empat + $kt_lima + $kt_enam + $kt_tujuh;


    array_push($_SESSION['merk'], $mrk);
    array_push($_SESSION['model'], $mdl);
    array_push($_SESSION['warna'], $wrn);
    array_push($_SESSION['kuantiti'], $kn); 
    array_push($_SESSION['harga'], $hrg);
    array_push($_SESSION['harga_tawar'], $hrg_tw);
    array_push($_SESSION['harga_jual'],$total);


}


 function display(){

if (!empty($_SESSION['merk'])) {
    $merk = $_SESSION['merk'];
$model =    $_SESSION['model'];
$warna =    $_SESSION['warna'];
$kuantiti =     $_SESSION['kuantiti'];
$harga =    $_SESSION['harga'];
$harga_tawar = $_SESSION['harga_tawar'];
$harga_jual = $_SESSION['harga_jual'];


$tgl = date('d-m-y');

echo '  <table class="table table-bordered table-striped text-gray-900" id="dataTable""> 
        <thead>

                <tr>
                <th colspan="5">'.$tgl.'</th>
                </tr>
                    <tr>

                      <th>Jenis Sepatu </th>
                      <th>Kuantiti</th>
                      <th>Harga</th>
                      <th>Harga Tawar</th>
                      <th>Total</th>
                    </tr>
              </thead>
              
    ';
$total=0;
$no = 1;
    for ($i = 0; $i < count($model); $i++ ) { 
        //$mk = implode("", $merk[$i]);
        //$md = implode("", $model[$i]);
        //$wr = implode("", $warna[$i]);
        
        echo '<tbody>
                    
                        <tr>
                        
                        <td>'.$merk[$i].' '.$model[$i].' '. $warna[$i].'</td>
                        <td>'.$kuantiti[$i].'</td>
                        <td>'.$harga[$i].'</td>
                        <td>'.$harga_tawar[$i].'</td>
                        <td>'.number_format($harga_jual[$i],0,',','.').'</td></tr>';

        $total = $total + $harga_jual[$i];
        

    }

    echo '<tr><td>Total</td>
            <td></td>
            <td></td>
            <td></td>
            
            
            <td>'.number_format($total,0,',','.').'</td>
            
            </tr> </tbody> </table>';

    }else {

    }
  }



  ?>

每次迭代都会覆盖while循环中的所有三个变量,这就是为什么只会得到一个结果(这是在
while
循环中执行的最后一个数据集)

基本上你可以做三件事来解决你的问题

1.使用数组存储从循环中获得的所有结果

    while ($y=mysqli_fetch_array($sql)) {
          $mrk[] = implode("", DekripCBC($y['nama_merk']));
          $mdl[] = implode("", DekripCBC($y['nama_model']));
          $wrn[] = implode("", DekripCBC($y['warna']));
     }
2.使用预定义数组存储使用
array\u push
从循环中获得的所有结果

  /**There are 3 ways to define an empty array. You can use any of the following
      1.$emptyArray = [];
      2.$emptyArray = array();
      3.$emptyArray = (array) null;
   * */

  $dataSet =[];

    while ($y=mysqli_fetch_array($sql)) {
          $data['mrk'] = implode("", DekripCBC($y['nama_merk']));
          $data['mdl'] = implode("", DekripCBC($y['nama_model']));
          $data['wrn'] = implode("", DekripCBC($y['warna']));

        array_push($dataSet ,$data);
     }
3.将值连接到变量中

  while ($y=mysqli_fetch_array($sql)) {
    // I have added a seprator(,) for all the variables so that there will be a , after every result and it wouldn't make you confused at the end
         $mrk .= implode("", DekripCBC($y['nama_merk'])).','; 
         $mdl .= implode("", DekripCBC($y['nama_model'])).',';
         $wrn .= implode("", DekripCBC($y['warna'])).',';
  }
我强烈建议您使用方法1或方法2

我希望这能帮助你解决你的问题

如果您想使用查询搜索多个ID:(因为我在评论中提到了,所以我将在这里添加它。)

例:


通过此方法,您可以获取上述ID的所有数据并将其分配给数组。

您在每次迭代中都会覆盖while循环中的所有三个变量,这就是为什么您只会得到一个结果(这是在
while
循环中执行的最后一个数据集)

基本上你可以做三件事来解决你的问题

1.使用数组存储从循环中获得的所有结果

    while ($y=mysqli_fetch_array($sql)) {
          $mrk[] = implode("", DekripCBC($y['nama_merk']));
          $mdl[] = implode("", DekripCBC($y['nama_model']));
          $wrn[] = implode("", DekripCBC($y['warna']));
     }
2.使用预定义数组存储使用
array\u push
从循环中获得的所有结果

  /**There are 3 ways to define an empty array. You can use any of the following
      1.$emptyArray = [];
      2.$emptyArray = array();
      3.$emptyArray = (array) null;
   * */

  $dataSet =[];

    while ($y=mysqli_fetch_array($sql)) {
          $data['mrk'] = implode("", DekripCBC($y['nama_merk']));
          $data['mdl'] = implode("", DekripCBC($y['nama_model']));
          $data['wrn'] = implode("", DekripCBC($y['warna']));

        array_push($dataSet ,$data);
     }
3.将值连接到变量中

  while ($y=mysqli_fetch_array($sql)) {
    // I have added a seprator(,) for all the variables so that there will be a , after every result and it wouldn't make you confused at the end
         $mrk .= implode("", DekripCBC($y['nama_merk'])).','; 
         $mdl .= implode("", DekripCBC($y['nama_model'])).',';
         $wrn .= implode("", DekripCBC($y['warna'])).',';
  }
我强烈建议您使用方法1或方法2

我希望这能帮助你解决你的问题

如果您想使用查询搜索多个ID:(因为我在评论中提到了,所以我将在这里添加它。)

例:


通过此方法,您可以获取上面提到的ID的所有数据,并将其分配给数组。

导致此问题的原因是它正在添加到变量中,并且由于相同的变量名,同一变量每次都会被覆盖。 您需要清空这些变量,将它们推到其他位置并使用它

为此,我们可以使用php函数array_push,将它们推入主数组

$master = array();
while ($y=mysqli_fetch_array($sql)) {
                    $data['mrk'] = implode("", DekripCBC($y['nama_merk']));
                    $data['mdl'] = implode("", DekripCBC($y['nama_model']));
                    $data['wrn'] = implode("", DekripCBC($y['warna']));
                    array_push($master,$data);
                 }

导致此问题的原因是,它正在添加到变量中,并且由于相同的变量名,同一个变量每次都会被覆盖。 您需要清空这些变量,将它们推到其他位置并使用它

为此,我们可以使用php函数array_push,将它们推入主数组

$master = array();
while ($y=mysqli_fetch_array($sql)) {
                    $data['mrk'] = implode("", DekripCBC($y['nama_merk']));
                    $data['mdl'] = implode("", DekripCBC($y['nama_model']));
                    $data['wrn'] = implode("", DekripCBC($y['warna']));
                    array_push($master,$data);
                 }


问题是,在每次迭代中,您都会覆盖while循环中的所有三个变量,因此,当然只有上一条记录中的值“生存”。您需要将值推入该循环内的数组中。我有点困惑,您可以编辑我的代码吗?我应该更改哪些部分如何向这些会话条目添加项,这是您已经知道的-您已经在显示的代码中这样做了。因此,将该部分移动到while循环中。使用
die是一个非常糟糕的主意(mysqli_error($conn));
在您的代码中,因为它可能会泄漏敏感信息。有关更多解释,请参阅本文:问题在于,在每次迭代中,您都会覆盖while循环中的所有三个变量,因此,当然只有最后一条记录中的值“survive”。您需要将值推入该循环内的数组中。我有点困惑,您可以编辑我的代码吗?我应该更改哪些部分如何向这些会话条目添加项,这是您已经知道的-您已经在显示的代码中这样做了。因此,将该部分移动到while循环中。使用
die是一个非常糟糕的主意(mysqli_错误($conn));
在您的代码中,因为它可能会泄漏敏感信息。有关更多说明,请参阅本文:我尝试使用数字2,但数据库中的数据不会出现,并且只保存最后一个数据。我尝试了数字3,数据库中的数据会出现,但只保存最后一个数据。我尝试了数字1,但出现以下错误:注意:第91行的数组到astring转换:'.$merk[$i].'.$model[$i].'.$warna[$i].“您能给出所有代码哪些部分应该更改吗?”,可能不在while循环中,但下面有一部分必须更改。转换字符串数组中的问题1已通过imploade解决。但它仍然只能捕获最新数据您确定您的查询返回多个数据集吗?是的,我尝试了第一个数据输入t、 但在第二次数据输入后,第一个数据丢失,只有第二个数据出现。我尝试使用数字2,但数据库中的数据不出现,只保存最后一个数据。我尝试了数字3,数据库中的数据出现,但只保存最后一个数据。我尝试了数字1,但出现以下错误:注意:数组到astring conv第91行的版本:'.$merk[$i].'.$model[$i].'.$warna[$i].“您能给出所有代码哪些部分应该更改吗?”,可能不在while循环中,但下面有一部分必须更改。转换字符串数组中的问题1已通过imploade解决。但它仍然只能捕获最新数据您确定您的查询返回多个数据集吗?是的,我尝试了第一个数据输入t、 但是在第二次数据输入后,第一个数据丢失,只有第二个数据出现。我尝试使用,但数据库中的数据没有出现,只保存最后一个数据。你能给出所有代码哪些部分应该更改吗?可能不在while循环中,但下面有一个部分必须更改我尝试使用,但是数据库不显示,只保存最后的数据。您能给出所有代码吗