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循环中,但下面有一个部分必须更改我尝试使用,但是数据库不显示,只保存最后的数据。您能给出所有代码吗