【问题标题】:PHP problem with insert into database in while loop在while循环中插入数据库的PHP问题
【发布时间】:2019-04-30 05:43:56
【问题描述】:

我尝试为图书馆写一个网站作为练习。我有 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>";
}

【问题讨论】:

  • 你忘了问你的问题。代码有什么问题?
  • 我真的看不懂你写的东西,我什至看不到一个问题,你能澄清一下吗?
  • 问题是代码将所有状态为免费的书籍带入数据库,并在雇用时对其进行更新。它不应该以这种方式工作。单击此按钮后,对于每本无状态的书都是按钮,此代码会更新所有无状态的书,但它应该只更新一个
  • 例如,我在数据库中有 5 本书处于空闲状态,我单击以租用第 1 本书,单击按钮后,我将所有 5 本书都租用了,现在不知道如何修复它。
  • 这对严重的 SQL 注入开放;使用准备好的语句。

标签: php mysql loops insert


【解决方案1】:

考虑一下语句if(isset($_REQUEST['submit'])),它在单击提交后在您的while循环中始终为真,因为它并没有取消设置。它会导致在数组不为空时重复执行语句。

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 2012-04-23
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    相关资源
    最近更新 更多