有没有任何解决方案来面对错误:调用数组上的成员函数myfunction()?



我的代码遇到了一些错误,实际上我已经阅读了另一个相同的问题,但我无法抓住解决此错误的重点,我正在使用控制器获取几乎所有调用的表,包括ppdb,<- 此表显示错误致命错误在第 64 行数组上调用成员函数 getPdb((

这是我的代码

<tbody>
<?php 
$no = 1;
if(is_array($data->getPdb()) || is_object($data->getPdb())){ //This line 64
foreach($data->getPdb() as $data){?>
<tr>
<td><?=$no++?></td>
<td><?=$data['gelombang']?></td>
<td><?=$data['tanggalbuka']?></td>
<td><?=$data['tanggaltutup']?></td>
<td><?=$data['tahunajaran']?></td>
<td><?php  if($data['status']==1){echo 'Aktif';}else{echo 'Tidak Aktif';}?></td>
<td>
<a href="inc/editTa.php?status=<?php echo (($data['status'] ==1)?'2':'1');?>&id=<?php echo $data['id'];?>" class="btn btn-xs btn-<?php echo (($data['status']==2)?'success':'danger');?>"><i class="fa fa-<?php echo (($data['status']==2)?'check':'check');?>"></I></a>&nbsp<?php echo (($data['status'] == 2)?'AKtifkan':'Non Aktifkan');?>
</td>
</tr>
<?php } } ?>
</tbody>

在我的控制器中,代码是这样写的:

$getta = $this->pdo->prepare("SELECT * FROM ppdb");
$getta->execute();
$c = $getta->rowcount();
if($c > 0){
foreach($getta as $data){
$hasil[] = $data;
}
return $hasil;
}
}

错误如下所示

Fatal error: Uncaught Error: Call to a member function getPdb() on array in D:xampphtdocsnhincviewadminincppdb.php:64 Stack trace: #0 D:xampphtdocsnhincviewadminindex.php(31): include() #1 {main} thrown in D:xampphtdocsnhincviewadminincppdb.php on line 64

在此表上方,我使用另一个函数来保存表单并获取选项:

<form class="form animated bounceIn" method="POST">
<div class="form-group">
<?php 
$data->createPpdb();
?>
</div>
<div class="card">
<div class="card-header bg-dark">
Setting Gelombang PPPDB
</div>
<div class="card-body">
<div class="form-group">
<input type="text" name="gelombang" title="Nama Gelombang" class="form-control" placeholder="contoh: Gelombang I">
</div>
<div class="form-group">
<input type="text" name="tanggalbuka" title="Tanggal Buka PPDB" class="form-control" placeholder="Pilih Tanggal" id="tbuka">
</div>
<div class="form-group">
<input type="text" name="tanggaltutup" title="Tanggal Tutup PPDB" class="form-control" placeholder="Pilih Tanggal" id='ttutup'>
</div>
<div class="form-group">
<select class="form-control" name="ta">
<option value="" disbaled>-Pilih Tahun Ajaran-</option>
<?php 
if(is_array($data->getTa()) || is_object($data->getTa())){
foreach($data->getTa() as $data){?>
<option value="<?=$data['tahunajaran']?>"><?=$data['tahunajaran']?></option>
<?php
}
}
?>
</select>
</div>
</div>
<div class="card-footer">
<div class="form-group">
<input type="submit" name="simpanppdb" class="btn btn-sm btn-success" value="Simpan">
</div>
</div>
</div>
</form>

我从 stacoverflow.com 那里读过类似的问题,但我无法理解重点。

谢谢你拯救了我的一天。

问题是您在行中重用变量$data

foreach($data->getPdb() as $data){

因此,$data开始是一个对象,但在循环之后,它包含结果的最后一行,即数组。下次尝试调用$data->getPdb()时,会收到错误。

使用不同的变量,如下所示:

foreach ($data->getPdb() as $item) {

另外,您不应该反复打电话$data->getPdb()。每次执行is_array($data->getPdb())is_object($data->getPdb())时,它都会执行完整查询并收集所有结果。执行一次并将结果保存在变量中。

$pdb = $data->getPdb();
if (is_array($pdb) || is_object($pdb)) {
foreach ($pdb as $item) {
...
}
}

谢谢大家的回答,我已经用自己的方式解决了这个问题,从 @Braham 先生的评论中,我尝试组合变量并重新启动类。

这是解决问题的问题

<table class="table table-hover" id="ppdb">
<thead>
<tr>
<th>No</th>
<th>Gelombang</th>
<th>Tanggal Buka</th>
<th>Tanggal Tutup</th>
<th>Tahun Ajaran</th>
<th>Status</th>
<th>Opsi</th>
</tr>
</thead>
<tbody>
<?php 
$no = 1;
$item = new NurulHuda(); // This re-initiate Class 
if(is_array($item->getPpdb()) || is_object($item->getPpdb())){
foreach($item->getPpdb() as $val){?>
<tr>
<td><?=$no++?></td>
<td><?=$val['gelombang']?></td>
<td><?=$val['tanggalbuka']?></td>
<td><?=$val['tanggaltutup']?></td>
<td><?=$val['tahunajaran']?></td>
<td><?php  if($val['status']==1){echo 'Aktif';}else{echo 'Tidak Aktif';}?></td>
<td>
<a href="inc/editTa.php?status=<?php echo (($val['status'] ==1)?'2':'1');?>&id=<?php echo $val['id'];?>" class="btn btn-xs btn-<?php echo (($val['status']==2)?'success':'danger');?>"><i class="fa fa-<?php echo (($val['status']==2)?'check':'check');?>"></I></a>&nbsp<?php echo (($val['status'] == 2)?'AKtifkan':'Non Aktifkan');?>
</td>
</tr>
<?php } } ?>
</tbody>
</table>

谢谢@Braham先生照亮我...

最新更新