我在我创建的网站上的 PHP 文件中遇到错误。当我想更新数据时,程序不会更新它,而是显示错误消息。尽管我已经创建了外键并且数据库已经连接,但我确信错误出在下面的两行代码中。
/ jika form edit data yang dipilih
elseif ($_GET['form'] == 'edit') {
if (isset($_GET['id'])) {
// fungsi query untuk menampilkan data dari tabel transaksi
$query = mysqli_query($mysqli, "SELECT a.id_transaksi,a.tgl_transaksi,a.barang,a.pekerja,a.pelanggan,a.jumlah_barang,a.status,
b.id_barang ,b.nama_barang,
c.id_pekerja,c.nama_pekerja,
d.id_pelanggan,d.identitas,d.alamat,d.telepon as id_pelanggan
FROM transaksi as a INNER JOIN barang as b INNER JOIN pekerja as c INNER JOIN pelanggan as d
ON a.barang=b.id_barang AND a.pekerja=c.id_pekerja AND a.pelanggan=d.id_pelanggan
WHERE a.id_transaksi='$_GET[id]'")
or die('Ada kesalahan pada query tampil data ubah : ' . mysqli_error($mysqli));
$data = mysqli_fetch_assoc($query);
$id_transaksi = $data['id_transaksi'];
$tanggal = $data['tgl_transaksi'];
$tgl = explode('-', $tanggal);
$tgl_transaksi = implode('-', array_reverse($tgl));
$id_pekerja = $data['id_pekerja'];
$id_barang = $data['id_barang'];
$jumlah_barang = $data['jumlah_barang'];
$id_pelanggan = $data['id_pelanggan'];
$nama_barang = $data['nama_barang'];
$nama_pekerja = $data['nama_pekerja'];
$identitas = $data['identitas'];
$alamat = $data['alamat'];
$status = $data['status'];
}
?>
第二个代码:
elseif ($_GET['act'] == 'update') {
if (isset($_POST['simpan'])) {
// Tambahkan kode debug di sini untuk menampilkan semua data POST
echo "<pre>";
print_r($_POST);
echo "</pre>";
if (isset($_POST['id_transaksi'])) {
// ambil data hasil submit dari form
$id_transaksi = mysqli_real_escape_string($mysqli, trim($_POST['id_transaksi']));
$tanggal = $_POST['tgl_transaksi'];
$tgl = explode('-', $tanggal);
$tgl_transaksi = $tgl[2] . "-" . $tgl[1] . "-" . $tgl[0];
$id_pekerja = mysqli_real_escape_string($mysqli, trim($_POST['id_pekerja']));
$id_barang = mysqli_real_escape_string($mysqli, trim($_POST['id_barang']));
$jumlah_barang = mysqli_real_escape_string($mysqli, trim($_POST['jumlah_barang']));
$id_pelanggan = mysqli_real_escape_string($mysqli, trim($_POST['id_pelanggan']));
$status = mysqli_real_escape_string($mysqli, trim($_POST['status']));
// Tambahkan debug untuk memeriksa apakah variabel ada dan tidak null
echo "ID Transaksi: $id_transaksi, ID Pekerja: $id_pekerja, ID Barang: $id_barang, Jumlah Barang: $jumlah_barang, ID Pelanggan: $id_pelanggan, Status: $status";
// perintah query untuk mengubah data pada tabel transaksi
$query = mysqli_query($mysqli, "UPDATE transaksi SET tgl_transaksi = '$tgl_transaksi',
pekerja = '$id_pekerja',
barang = '$id_barang',
jumlah_barang = '$jumlah_barang',
pelanggan = '$id_pelanggan',
status = '$status'
WHERE id_transaksi = '$id_transaksi'")
or die('Ada kesalahan pada query update : ' . mysqli_error($mysqli));
// cek query
if ($query) {
// jika berhasil tampilkan pesan berhasil update data
header("location: ../../main.php?module=transaksi&alert=2");
}
}
}
}
这是错误:
Fatal error: Uncaught mysqli_sql_exception: Cannot add or update a child row: a foreign key constraint fails (`global_survey`.`transaksi`, CONSTRAINT `FK_transaksi_barang` FOREIGN KEY (`barang`) REFERENCES `barang` (`id_barang`) ON DELETE CASCADE ON UPDATE CASCADE) in C:\xampp\htdocs\WebGlobalSurvey\admin\modules\transaksi\proses.php:61 Stack trace: #0 C:\xampp\htdocs\WebGlobalSurvey\admin\modules\transaksi\proses.php(61): mysqli_query(Object(mysqli), 'UPDATE transaks...') #1 {main} thrown in C:\xampp\htdocs\WebGlobalSurvey\admin\modules\transaksi\proses.php on line 61
我尝试修改INNER JOIN,因为我怀疑那行代码有错误,但程序仍然无法正常运行。但如果我更新 id_pekerja、id_pelanggan 和 id_barang,它就会起作用。如果我只改变其中之一,将无法工作。
检查外键约束:验证transaksi表上的外键约束,特别是FK_transaksi_barang是否正确设置。确保barang表中引用的列存在并且有效。
数据完整性:确保您尝试在 transaksi 表(barang、id_pekerja、id_pelanggan)中更新的值与引用表(barang、pekerja、pelanggan)中的值匹配。如果您要更新外键,请确保新值存在于各自引用的表中。
级联更新:如果要更新引用表中的主键值(id_barang、id_pekerja、id_pelanggan),请确保将外键关系设置为级联更新。这意味着当您更新引用的主键时,它也应该在 transaksi 表中自动更新。
调试:使用调试技术检查您尝试在 PHP 代码中更新的值。您可以添加 echo 或 var_dump 语句以在执行更新查询之前打印出值。这将帮助您确定是否传递了任何意外或不正确的值。
SQL 语句:仔细检查您用于更新查询的 SQL 语句。确保 WHERE 子句正确标识您要更新的行。
错误处理:在 PHP 代码中实现更强大的错误处理,以捕获和显示详细的错误消息。这将帮助您查明问题的确切原因。
测试:尝试一次更新一条记录,看看问题是否仍然存在。这将帮助您确定问题是否是由特定的更新组合引起的。