【问题标题】:php Limit query pdo with button nextphp限制查询pdo与按钮next
【发布时间】:2018-10-18 00:28:05
【问题描述】:

我的代码出了什么问题.. 我尝试单击下一步按钮以显示数据库中的下一条记录.. 但是当我单击时没有任何反应。

这是我获取记录的函数

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>

表格后的这段代码

<?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;
}
?>

【问题讨论】:

  • 您必须将 $start 的新值传递给 getBooks() 才能继续工作。
  • 如何...请解释一下!
  • 将参数添加到public function getBooks($start = 0) - 就像这样。从getBooks() {..here...} 中删除$start=0;
  • $_POST['next'] btw 的值是多少?
  • 您可以发布您的表单代码吗?

标签: php sql pdo pagination limit


【解决方案1】:

Index.php - 你没有正确设置 $start 值。下面的代码将$start 的值设置为$_POST['start'],如果不存在$start,则默认为0。

而且您也没有正确接受表单提交。我通过对其 $_POST 变量进行 isset() 检查来修改代码以接受两种提交类型(next 和 login)。

用途:

<?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 参数,以便它知道接下来要显示哪条记录。

试试:

public 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>";
}

【讨论】:

  • nice Mr. Blue ... 但是如果(isset($_POST['next'])){} 当我点击下一个提交时,我需要这个过程
  • 不需要,不过我还是加了。检查第一个代码块是否有更新。
  • 没关系,先生。顺便说一句,我刚刚再次更新了第一个代码块。
  • 当我点击下一个提交时,就像我重新加载页面一样......我什么时候应该输入这个代码。 if(isset($_POST['submit'])){ $username = $_POST["user"]; $password = $_POST["pass"]; ??????
  • 谢谢 Blue 先生的工作,但它并不完全像我想要的那样有一些错误我不知道他在哪里......想象我想在我应该添加的时候添加上一个按钮,我有 if(isset($_POST['submit']) OR isset($_POST['next'])){}
【解决方案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);  
}

【讨论】:

  • 它不起作用..请检查我的表单代码并告诉我出了什么问题
猜你喜欢
  • 2011-02-17
  • 2018-11-16
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2015-09-01
  • 2011-06-04
  • 2013-09-03
相关资源
最近更新 更多