php - 如何使用同名选择将数据插入数据库
问题描述
我的表中有超过 7 列称为“pembelajaran(课程)”,第一列我设置为连接到另一个表的标识符。
我想通过使用 php 代码从其他表中获取的 select 和 option 将数据插入 7 列。
我已经尝试过多次使用 $_POST 方法插入数据,当我提交按钮时,我的 var_dump 只显示第一列数据。我知道我是新手。希望你们中的一个可以帮助我解决我的问题。
这是我的代码
<div class="form-group">
<?php
$krID = $krk['kurikulum'];
$mpl = $db->prepare("SELECT * FROM mapel WHERE parent = '$krID'");
$mpl->execute();
while($mp = $mpl->fetch(PDO::FETCH_ASSOC)){?>
<div class="row">
<div class="col-sm-6 col-md-6">
<div class="form-group">
<label for="<?=$mp['kode']?>"><?php echo $mp['mapel'];?></label>
</div>
</div>
<div class="col-sm-6 col-md-6">
<div class="form-group">
<select name="<?=$mp['id']?>" class="form-control" required>
<option value="0">-Pilih Guru-</option>
<?php
$gr = $db->prepare("SELECT * FROM guru WHERE parent = 0 ORDER BY id");
$gr->execute();
while($mg = $gr->fetch(PDO::FETCH_ASSOC)){?>
<option value="<?=$mg['id']?>"><?=$mg['nama']?>, <?=$mg['jabatan']?></option>
<?php } ?>
</select>
</div>
</div>
</div>
<?php } ?>
</div>
这是我执行提交按钮的 php 代码:
<div class="form-group">
<input type="submit" name="save" value="simpan" class="btn btn-success">
<?php
if(isset($_POST['save'])){
$datamapel = "pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk";
$guru = $datamapel;
$simpanpembelajaran = $db->prepare("INSERT INTO pembelajaran (kelas, mapel, pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk)VALUES('$_POST[kelas]','$guru)");
$simpanpembelajaran->execute();
var_dump($simpanpembelajaran);
}
?>
</div>
这是 var_dump(); 说
Notice: Undefined variable: guru in D:\xampp\htdocs\raport\index\kurikulum.php on line 275
Notice: Undefined variable: guru in D:\xampp\htdocs\raport\index\kurikulum.php on line 275
object(PDOStatement)#7 (1) { ["queryString"]=> string(131) "INSERT INTO pembelajaran (kelas, mapel, pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk)VALUES('4','','')" }
我仍然试图找到最好的结果。这是我最后一次尝试。我尝试使用爆炸来识别任何名称。
<div class="form-group">
<input type="submit" name="save" value="simpan" class="btn btn-success">
<?php
if(isset($_POST['save'])){
$datamapel = "pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk";
$guru = explode(",",$datamapel);
$simpanpembelajaran = $db->prepare("INSERT INTO pembelajaran (kelas, mapel, pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk)VALUES('$_POST[kelas]','$guru')");
$simpanpembelajaran->execute();
var_dump($simpanpembelajaran);
}
?>
</div>
但结果仍然会出现这样的错误。
Notice: Array to string conversion in D:\xampp\htdocs\raport\index\kurikulum.php on line 275
object(PDOStatement)#7 (1) { ["queryString"]=> string(133) "INSERT INTO pembelajaran (kelas, mapel, pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk)VALUES('4','Array')" }
如果有任何建议更改我的方法以将值正确存储到我的数据库中,请显示它。
更新
我使用此代码并工作,但即使我从选择仍 0 存储到数据库的选项中选择了几个列,这是我的最后一个代码。我的选择代码
<select name="kode[<?=$mp['kode']?>]" class="form-control" required>
<option value="0">-Pilih Guru-</option>
<?php
$gr = $db->prepare("SELECT * FROM guru WHERE parent = 0 ORDER BY id");
$gr->execute();
while($mg = $gr->fetch(PDO::FETCH_ASSOC)){?>
<option value="<?=$mg['id']?>"><?=$mg['nama']?>, <?=$mg['jabatan']?></option>
<?php } ?>
</select>
</div>
</div>
</div>
<?php } ?>
</div>
这是我的提交按钮代码。
<div class="form-group">
<input type="submit" name="save" value="simpan" class="btn btn-success">
<?php
if(isset($_POST['save'])){
$kelas = $_POST['kelas'];
$guru = implode(", ",$_POST['kode']);
$checkheula = $db->prepare("SELECT * FROM pembelajaran WHERE kelas = '$kelas'");
$checkheula->execute();
$check = $checkheula->rowcount();
if($check > 0){
$datanya = $checkheula->fetch(PDO::FETCH_ASSOC);
$ids = $datanya['id'];
$kelas = $_POST['kelas'];
$guru = implode(", ",$_POST['kode']);
$timpah = $db->prepare("UPDATE pembelajaran SET kelas = '$kelas', mapel = 0, pkn = '$guru[0]', pai = '$guru[1]', ind = '$guru[2]', mtk = '$guru[3]', ipa = '$guru[4]', ips = '$guru[5]', ing = '$guru[6]', sbk = '$guru[7]', pjok = '$guru[8]', pra = '$guru[9]', tik = '$guru[10]', btq = '$guru[11]', bp = '$guru[12]', sun = '$guru[13]', mlk = '$guru[14]' WHERE id = '$ids'");
$timpah->execute();
var_dump($timpah);
}else{
$guru = implode(", ",$_POST['kode']);
$simpanpembelajaran = $db->prepare("INSERT INTO pembelajaran (kelas, mapel, pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk)VALUES('$_POST[kelas]','','$guru[0]','$guru[1]','$guru[2]','$guru[3]','$guru[4]','$guru[5]','$guru[6]','$guru[7]','$guru[8]','$guru[9]','$guru[10]','$guru[11]','$guru[12]','$guru[13]','$guru[14]')");
$simpanpembelajaran->execute();
var_dump($simpanpembelajaran);
}
}
?>
</div>
var_dump 显示如下信息
object(PDOStatement)#7 (1) { ["queryString"]=> string(226) "UPDATE pembelajaran SET kelas = '4', mapel = 0, pkn = '9', pai = ',', ind = ' ', mtk = '1', ipa = '1', ips = ',', ing = ' ', sbk = '2', pjok = '1', pra = ',', tik = ' ', btq = '6', bp = ',', sun = ' ', mlk = '1' WHERE id = '1'" }
这是我的pembelajaran
餐桌照片。
彭贝拉哈兰桌
再次更新mapel
当我想检索列前后
每一列的值时,我发现了一个新错误parent
。也许,您需要一张图片,我遇到了什么错误。下面的链接向您展示了我的工作图片。
我工作的 UI
请专注于
Notice: Array to string conversion in D:\xampp\htdocs\raport\index\kurikulum.php on line 379 Array
guru
在我想通过使用插入的值来获取的列上teacher's name (guru)
,我尝试使用数组但不工作。
这是我的代码
<div class="col-sm-6 col-md-6">
<hr><h1 class="text-muted text-center">Info Pembelajaran</h1><hr>
<table class="table table-hover">
<thead>
<tr>
<td>Mapel</td>
<td>Kelas</td>
<td>Guru</td>
<td>Opsi</td>
</tr>
<?php
include '../controller/set-kurikulum.php';
$trk = $db->prepare("SELECT * FROM pembelajaran WHERE parent = 0");
$trk->execute();
while($p = $trk->fetch(PDO::FETCH_ASSOC)){
$dk = $p['kelas'];
$klsss = $db->prepare("SELECT * FROM kelas WHERE id = '$dk'");
$klsss->execute();
while ($mn = $klsss->fetch(PDO::FETCH_ASSOC)) {
?>
<tr class="bg-info">
<td colspan="4"><b><?=$mn['kelas']?></b></td>
</tr>
<?php } ?>
</thead>
<?php $dk = $p['kelas'];
$klsss = $db->prepare("SELECT * FROM kelas WHERE id = '$dk'");
$klsss->execute();
while ($mn = $klsss->fetch(PDO::FETCH_ASSOC)) {
$k = $krk['kurikulum'];
$mpls = $db->prepare("SELECT * FROM mapel WHERE parent = '$k'");
$mpls->execute();
while($mps = $mpls->fetch(PDO::FETCH_ASSOC)){
$dks = $mn['id'];
$ida = $db->prepare("SELECT pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk FROM pembelajaran WHERE kelas = '$dks'");
$ida->execute();
// $jjm = $db->prepare("SELECT * FROM guru WHERE id = '$ida'");
while($guru = $ida->fetch(PDO::FETCH_ASSOC)){
// $std = implode(", ", $guru);
?>
<tbody>
<tr>
<td><?=$mps['mapel']?></td>
<td><?=$mn['kelas']?></td>
<td>
<?php
$namaguru = array(
0 => 'Tidak Terdaftar',
1 => 'Nurul Hidayat, S.Pd.',
2 => 'Madsana, Am.Pd.',
3 => 'Mahdian Umarella, S.Pd.',
4 => 'Khaerul Munajat, SH.I',
5 => 'Humaedi, S.SoS.i',
6 => 'Siti Nurjanah, S.Pd.',
7 => 'Awaludin, S.Pd.',
8 => 'Suhayati, S.Pd.',
9 => 'Supriyanto, S.Pd.',
10 => 'Karta, S.Pd.',
11 => 'Sutihat, S.Pd.',
12 => 'Ahmad Royandi, S.Pd.',
13 => 'Hendra, S.Pd.',
14 => 'Anwar Husadat, S.Pd.',
15 => 'Ripah Dahlia, S.Pd.',
16 => 'Eka, S.Pd.',
17 => 'Friska, S.Pd.',
18 => 'Rini, S.Pd.',
19 => 'Rudi, S.Pd.',
20 => 'Munajah, S.Pd.',
21 => 'Muhamad Aceng Nuryani, S.Pd.',
22 => 'Julian, S.Pd.',
23 => 'Ahmad Suwondo, S.Pd.',
24 => 'Fajar Anwar, S.Pd.',
25 => 'Hasan',
);
// var_dump(implode("<br> ",$namaguru));
$gd = array_column($namaguru, 'pkn');
// echo $gd;
if($guru = $namaguru){echo $namaguru;}
?>
</td>
<td>
<a href="" class="btn btn-xs btn-warning"><span class="glyphicon glyphicon-pencil"></span></a>
<a href="" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-remove"></span></a>
<a href=""></a>
</td>
</tr>
<?php } ?>
<?php } ?>
<?php } ?>
<?php } ?>
<tr>
</tr>
</tbody>
如果有任何其他方法只是建议我,我会尝试这样做,非常感谢您的帮助。
解决方案
在此代码段中,
$datamapel = "pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk";
$guru = explode(",",$datamapel);
$simpanpembelajaran = $db->prepare("INSERT INTO pembelajaran (kelas, mapel, pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk)VALUES('$_POST[kelas]','$guru')");
变量$guru
是一个数组,所以值的$datamapel
存储$guru
如下,
$guru[0] -> pkn
$guru[1] -> pai
...
等等
在您的 SQL 查询中,您试图将存储在$guru
不同列中的数据插入。我想你想要的是这个
$simpanpembelajaran = $db->prepare("INSERT INTO pembelajaran (kelas, mapel, pkn, pai, ind, mtk, ipa, ips, ing, sbk, pjok, pra, tik, btq, bp, sun, mlk) VALUES ('$_POST[kelas]','$guru[0]','$guru[1]', ...)");
...
,这不是代码的一部分,您需要添加剩余的索引。另请注意,查询中提到的列数需要等于VALUES
.
推荐阅读
- javascript - 您如何理解 WebStorm 的功能接口?
- python - Azure DevOps Pipeline 上没有日志记录
- react-native - 如何在本机反应中将视频(从移动存储)转换为base64?
- c# - 如何清除隐藏的字符?
- python - 转置数据框后如何按组绘制线条?
- go - 如何为 golang/go cmd 模块设置 VSCode?
- sysv-ipc - python sysv-ipc 创建/附加/删除共享内存
- r - 避免使用 data.table 循环
- .net - 从集合中检索随机文档
- javascript - 无法从 Angular 中找到图表的 Vuejs 等效函数