使用ajax和PHP使用页id和会话数据插入表单数据



我正在制作一个学校图书图书馆网络项目,学生可以在其中选择书籍并向图书管理员发送请求以请求借阅书籍。不幸的是,我是jquery的新手,所以对我来说很难处理问题。

我的代码是viewbook.php

<form method="post" action="" id="contactform">
<div class="form-group">
<label for="name">Name:</label>
<input type="text" class="form-control" id="name">
</div>
<div class="form-group">
<label for="email">Email Address:</label>
<input type="email" class="form-control" id="email">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<div id="code" class="result">
</div> 

javascript代码

<script>
$(document).ready(function () {
$('.btn-primary').click(function (e) {
e.preventDefault();
var name = $('#name').val();
var email = $('#email').val();
$.ajax
({
type: "POST",
url: "submit.php",
data: { "name": name, "email": email },
success: function (data) {
$('.result').html(data);
//$('#contactform')[0].reset();
}
});
});
});

submit.php

<?php
require_once "db.php";   
//insert into database
if(!empty($_POST['email'])) {
$name = htmlspecialchars(trim($_POST['name']));
$email = htmlspecialchars(trim($_POST['email']));

if (strlen($name) < 4) {
$errors['name'] = "*Name Is Short ! atleast 2 character*";
}
if (count($errors) === 0) {
$insert_user = "INSERT INTO book_requests (`name`, `email`, `bookid`, `user`)VALUES (:name,:email,:bookid,:userid)";
$result = $conn->prepare($insert_user);
$result->bindParam(':name', $name, PDO::PARAM_STR);
$result->bindParam(':email', $email, PDO::PARAM_STR);
$result->bindParam(':bookid', $bookid, PDO::PARAM_STR);
$result->bindParam(':user', $user, PDO::PARAM_STR);
$name = htmlspecialchars(trim($_POST['name']));
$email = htmlspecialchars(trim($_POST['email']));
$bookid= $_GET['bookid'];
$user = $_SESSION['login'];
$result->execute();
if ($result) {
echo "done<br>" ;
} else {
echo "not done<br>";
}
}
}
}
?>

我的问题是bookid这是存储在$bookid= $_GET['bookid']和userid这是存储在$user = $_SESSION['login']这是在页面'viewbook.php'如何将它们存储到数据库与表单数据使用ajax。

请帮我做这件事

您要做的第一件事是在您使用的每个php页面(也包括submit.php)中使用session_start();(假设您不使用控制器模式/其他处理会话的框架)。通过使用它,您应该能够在submit.php中访问$_SESSION['login']。下一件事是处理$_get['bookid']。问题是你试图访问的get数组不存在/填充任何值在你当前的实现。我的建议是发送的书也在ajax提交。为此,您需要提取参数。

const query = window.location.search; 
//assuming your url looks something like this https://example.com/viewbook.php?bookid=5
const urlParams = new URLSearchParams(query);
const bookid = urlParams.get('bookid')
//now build the ajax query
$.ajax({
type: "POST",
url: "submit.php",
data: {
"name": name,
"email": email,
"bookid": bookid
},
success: function(data) {
$('.result').html(data);
//$('#contactform')[0].reset();
}
});

我还建议不要简单地返回echo "done<br>" ;,而是返回状态码,例如header("HTTP/1.1 200 OK");和包含消息和潜在附加信息(由您决定)的有效json响应。如果你有任何问题,请随时添加评论。

submit.php应该如下所示

<?php
require_once "db.php";
//insert into database
session_start();
if (!empty($_POST['email']))
{

$name = htmlspecialchars(trim($_POST['name']));
$email = htmlspecialchars(trim($_POST['email']));
$bookid = htmlspecialchars(trim($_POST['bookid']));
$user = $_SESSION['login'];
if (strlen($name) < 4)
{
$errors['name'] = "*Name Is Short ! atleast 2 character*";
}
if (count($errors) === 0)
{
$insert_user = "INSERT INTO book_requests (`name`, `email`, `bookid`, `user`)VALUES (:name,:email,:bookid,:userid)";
$result = $conn->prepare($insert_user);
$result->bindParam(':name', $name, PDO::PARAM_STR);
$result->bindParam(':email', $email, PDO::PARAM_STR);
$result->bindParam(':bookid', $bookid, PDO::PARAM_STR);
$result->bindParam(':user', $user, PDO::PARAM_STR);
$result->execute();
if ($result)
{
echo "done<br>";
}
else
{
echo "not done<br>";
}
}
}
?>

如果你想在没有有效会话的情况下重定向,你可以简单地把下面的代码放在submit.php和viewbook.php上面。请始终将骰子(或退出)放在头部调用的末尾。在实现会话时也要考虑CSRF等漏洞。

session_start();
if(!isset($_session['login'])){
header("Location: https://example.com/login.php");
die();
}

最新更新