每次页面加载都会触发按钮onclick事件

时间:2019-01-28 18:09:34

标签: php html

我有一个具有onclick属性的按钮,该按钮调用一个函数。我的问题是,每当页面加载时,它都会自动触发onclick事件,而无需我单击任何内容。

我尝试了各种语法,但是没有任何效果。我将“按钮”换成“输入类型=按钮”,但这无济于事。

这是在books.php中

$sql = "SELECT books.id, books.name as bookname, authors.name as authorname, autori.surname, genre, description, stock FROM books JOIN authors ON books.author_id=authors.id ORDER BY books.name ASC";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table><tr><th>Name of the book</th><th>Author</th><th>Copies available</th></tr>";

    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["bookname"]."</td><td>".$row["authorname"]." ".$row["surname"]."</td><td>".$row["stock"]."</td>";

        if (isAvailable($row["id"]) && isset($_SESSION["id"])) {
            ?>
            <td><input type="button" value="Borrow" class="button" id="btnBorrow" onclick="<?php borrowBook($row["id"])?>"></td></tr>

我正在从functions.php中调用函数劳勃书,看起来像这样。

function borrowBook($idbook) {
    $servername = "aaa";
    $username = "bbb";
    $password = "ccc";
    $dbname = 'ddd';
    $iduser = $_SESSION["id"];

    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $sql = "UPDATE books SET stock = stock - 1 where id = " . $idbook;
    $conn->query($sql);

    $sql = "INSERT INTO reservations(id, dateBorrowed, dateReturn, returned, kniha_id, uzivatel_id) VALUES (NULL, NOW(), DATE_ADD(NOW(), INTERVAL 34 DAY), 0, $idbook, $iduser)";
    $conn->query($sql);
}

因此,SQL查询和所有内容都可以正常运行。当我检查数据库时,我实际上得到了新的条目,一切都按预期进行。我唯一的问题是按钮的onclick事件总是在每次页面加载时触发,而我似乎无法解决。从网上搜索开始,每个人都在使用JavaScript或jQuery之类的东西,因此对我没有帮助。

2 个答案:

答案 0 :(得分:0)

您应该在onclick处理程序中使用js(或jquery),该处理程序使用ajax调用您的php-script。 PHP脚本仅在服务器中有效。 像这样(jquery示例):

<button id="handled-button">Click Me</button>
<script>
$('#handled-button').click(function() {
$.get('/myscript.php');
});
</script>

然后在myscript.php中调用您的函数。

答案 1 :(得分:0)

嗨,欢迎来到Stack Overflow!

好像您正在尝试从客户端(浏览器)调用php函数。但是,这是不可能的。

PHP的工作方式是,它为客户端准备内容并将其发送给客户端。发送后,您将无法再与PHP代码进行交互。您需要做的是让客户端发送另一个请求。

  

我的问题是,每当页面加载时,它都会自动触发onclick事件,而无需我单击任何内容。

页面加载不会触发onclick事件。 PHP会查找所有<?php并甚至在将其发送到客户端之前运行其中的代码。

如何做到?

您需要稍微更改基础结构。首先,我建议完全不使用JS,而是创建第二个PHP页面,这只是使用GET参数borrowBook(您可以稍后对其进行扩展)(请参见PHP's $_GET

首先,您需要实际创建第二个页面(我们将其命名为borrowBook.php) 此页面将使用GET参数获取图书的ID(我们叫bookid

此页面的代码可能如下所示(注意:代码未经测试)

<?php
borrowBook($_GET["bookid"]);
header("Location: /books.php");
?>

现在您需要更改原始代码的行

<input type="button" value="Borrow" class="button" id="btnBorrow" onclick="<?php borrowBook($row["id"])?>">

像这样

<a href="/borrowBook.php?bookid=<?= $row["id"] ?>">Borrow</a>

这是什么,PHP将看到<?=并在其中运行代码(在这种情况下,将<?= ?>部分替换为$row["id"]的值。 id为1将导致以下结果:

<a href="/borrowBook.php?bookid=1">Borrow</a>

对不起,我的英语不好。