我有一个具有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之类的东西,因此对我没有帮助。
答案 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>
对不起,我的英语不好。