php - 在while循环中插入数据库的PHP问题
问题描述
我尝试为图书馆写一个网站作为练习。我有 while 循环来显示我的数据库中的所有书籍。如果用户已登录并且书(ksiazka)的状态(stan)是免费的(Wolny),它会在书下显示按钮。单击后,它将所有免费书籍都存储到数据库中,并更新它们的状态,不仅是用户想要的。这是代码,谢谢。
$findbook2 ="select ksiazka.id_ksiazka, ksiazka.tytul, ksiazka.id_stan, autor.id_autor, autor.imie_autor, ksiazka.rok_wydania, autor.nazwisko_autor, stan.id_stan, stan.nazwa_stan FROM ((ksiazka inner join autor ON ksiazka.id_autor = autor.id_autor) inner join stan ON ksiazka.id_stan = stan.id_stan);";
$stan = mysqli_query($connect, $findbook2);
while($row = mysqli_fetch_array($stan))
{
echo "Tytuł:" . " " .$row['tytul']." ". "Autor:" . " " . $row['imie_autor']." ". $row['nazwisko_autor']. " ". "Rok wydania" . " ". $row['rok_wydania'] . " ". "Stan ". $row['nazwa_stan']. " ";
if(isset($_SESSION['id_czytelnik'])){
if($row['nazwa_stan']=='Wolny'){
echo '<form method = "GET" action = "ksiazki.php">';
echo '<input type = "submit" name = "submit" value = "Wypożycz"/>';
echo '</form>';
if(isset($_REQUEST['submit'])){
$id_czytelnik = $_SESSION['id_czytelnik'];
$id_ksiazka = $row['id_ksiazka'];
$data_oddania = date('Y-m-d', strtotime('+30 days'));
$wstaw_ksiazke = "INSERT INTO `wypozyczenie`(`id_wypozyczenie`, `id_czytelnik`, `id_ksiazka`, `id_pracownik`, `data_wypozyczenia`, `data_oddania`) VALUES ('','$id_czytelnik','$id_ksiazka',2,NOW(),'$data_oddania')";
if(mysqli_query($connect, $wstaw_ksiazke)){
$update = "Update ksiazka set id_stan = 3 where id_ksiazka = '$id_ksiazka'";
if(mysqli_query($connect, $update)){
echo "Wypozyczyłeś książkę";
}
}
}
}
}
echo "</br>";
}
解决方案
考虑if(isset($_REQUEST['submit']))
在单击提交后在您的 while 循环中始终为真的语句,因为它无论如何都没有取消设置。它会导致重复执行语句,而数组不为空。
推荐阅读
- regex - 正则表达式在 Dart 中不返回匹配项,但适用于在线正则表达式测试器
- sql-server - SSIS 数据流使用 SQL 代理失败
- php - 有什么方法可以在 laravel 中阻止 array[] 以前的 ID 以使用户无法选择它?
- android - 现有的Android项目打不开?
- java - ScheduledThreadPoolExecutor 中的线程超时
- javascript - 为什么数据表的标题与内容不对齐?
- perl - 如何安装 Parallel::ForkManager 模块?
- docker - Docker 集群策略
- mqtt - 如何初始化 LwIP 以使用 MQTT 库
- android - 为什么通知组在android中不起作用?我做错了什么?