我的代码中有什么问题..我尝试单击下一步按钮显示数据库中的下一条记录..但是当我点击时没有任何反应。
这是我获取记录的功能
public function getBooks()
{
$limit = 1;
$start=0;
//SELECT loginUser.username, Library.nameOfBook FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username="loay";
$query = "SELECT Library.nameOfBook FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username=:username LIMIT $start, $limit";
$statment = $this->db->prepare($query);
$statment->execute([
':username' => $this->username
//,':start' => $start, ':limit' => $limit
]);
$result = $statment->fetchAll();
echo "<table border='1'>
<tr>
<th>Books</th>
</tr>";
foreach($result as $row){
echo "<tr>";
echo "<td>" . $row['nameOfBook'] . "</td>";
echo "</tr>";
}
echo "</table>";
}
这是我在index.php中的代码
$object->getBooks();
if( isset($_POST['next'])){
$start +=1;
}
这是我的表单代码
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="user" value="<?php echo $user;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
password: <input type="password" name="pass" value="<?php echo $password;?>" >
<span class="error">* <?php echo $passwordErr;?></span>
<br><br>
<input type="submit" name="submit" value="Login">
<br><br>
<button type="button" name="button" onclick="window.location.href='/ooRigester.php'">SignUp</button>
<br><br>
<input type='submit' name='next' value='next' method="post"><br>
</form>
&#13;
表单后的代码
<?php
include_once('User.php');
if(isset($_POST['submit'])){
$username = $_POST["user"];
$password = $_POST["pass"];
$object = new User();
$object->username= $username;
$object->Password=$password;
if( $object->isAuthenticated() ){
echo "User Verified . <br><br>";
$object->getBooks();
if( isset($_POST['next'])){
$start +=1;
$object->getBooks($start);
}
}
else{
echo "Wrong User Name Or Password . <br>";
}}
?>
和之前的形式
<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
<title>Login Form</title>
</head>
<body>
<?php
/*$str = "Hello";
echo password_hash($str,1);*/
// define variables and set to empty values
$nameErr = "";
$passwordErr = "";
$user = "";
$password = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["user"])) {
$nameErr = "Name is required";
} else {
$user = test_input($_POST["user"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$user)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["pass"])) {
$passwordErr = "Password is required";
} else {
$password = test_input($_POST["pass"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
&#13;
答案 0 :(得分:2)
控制器中的代码:
function getBooks($start = 0)
{
$limit = 1;
//SELECT loginUser.username, Library.nameOfBook FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username="loay";
$query = "SELECT Library.nameOfBook FROM loginUser JOIN userBook JOIN Library ON userBook.user_id = loginUser.id AND userBook.book_id = Library.id WHERE loginUser.username=:username LIMIT $start, $limit";
$statment = $this->db->prepare($query);
$statment->execute([
':username' => $this->username,
//,':start' => $start, ':limit' => $limit
]);
$result = $statment->fetchAll();
echo "<table border='1'>
<tr>
<th>Books</th>
</tr>";
foreach ($result as $row) {
echo "<tr>";
echo "<td>" . $row['nameOfBook'] . "</td>";
echo "</tr>";
}
echo "</table>";
}
index.php中的代码。
$object->getBooks();
if( isset($_POST['next']))
{
$start +=1;
$object->getBooks($start);
}
答案 1 :(得分:2)
在Index.php
中 - 您没有正确设置$ start值。以下代码设置$start
的{{1}}值,如果不存在$_POST['start']
默认为0。
而且你也没有正确接受表单提交。我通过对$ _POST变量进行isset()检查来修改代码以接受提交类型(下一个和登录)。
使用:强>
$start
在表单代码中,您必须添加一个隐藏的输入,该输入保存下一个数据库记录的偏移值。
使用此代码:
<?php
include_once('User.php');
if(isset($_POST['submit']) OR isset($_POST['next'])){
$username = $_POST["user"];
$password = $_POST["pass"];
$object = new User();
$object->username= $username;
$object->Password=$password;
if( $object->isAuthenticated() ){
echo "User Verified . <br><br>";
$start = 0;
if(isset($_POST['start'])){
$start = $_POST['start'];
}
$object->getBooks($start);
}
}
else{
echo "Wrong User Name Or Password . <br>";
}
?>
您的类方法<form method="post" action="">
Name: <input type="text" name="user" value="<?php echo $user;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
password: <input type="password" name="pass" value="<?php echo $password;?>" >
<span class="error">* <?php echo $passwordErr;?></span>
<br><br>
<input type="submit" name="submit" value="Login">
<br><br>
<input type="hidden" value="<?php echo (intval(isset($_POST['start'])?$_POST['start']:0)+1);?>" name="start"/>
<button type="button" name="button" onclick="window.location.href='/ooRigester.php'">SignUp</button>
<br><br>
<input type='submit' name='next' value='next' method="post"><br>
</form>
必须具有getBooks()
参数,以便它知道下一条要显示的记录。
<强>尝试:强>
$start