请帮我解决这个问题

时间:2016-01-10 11:39:39

标签: php mysql syntax-error

我想从我的代码中删除以下通知和警告:

Warning: Missing argument 3 for User::readAll(), 
   called in /home/dz/rental/master/user/index.php on line 59 
   and defined in /home/dz/rental/objects/user.php on line 123 
Notice: Undefined variable: records_per_page 
   in /home/dz/rental/objects/user.php on line 124 

这是我的PHP代码:

<?php
class User{ 
    // koneksi database dan nama table
    private $conn;
    private $table_name = "users";

    // object properties
    public $id;
    public $nama;
    public $email;
    public $username;
    public $password;

    // constructor
    public function __construct($db){
        $this->conn = $db;
    }

    public function check_login(){
        $query = "SELECT * FROM " . $this->table_name . " where (username=? or email=?) and password=?";
        $stmt = $this->conn->prepare( $query );
        $stmt->bindParam(1, $this->username);
        $stmt->bindParam(2, $this->email);                  
        $stmt->bindParam(3, md5($this->password));                      
        $stmt->execute();    
        $num = $stmt->rowCount();                 
        if($num==1){
            $user_data = $stmt->fetch(PDO::FETCH_ASSOC);              
            $_SESSION['login'] = true;
            $_SESSION['user'] = $user_data['nama'];
            return true;            
        }else{
            return false;        
        }        
    }

    public function get_session(){
        if(isset($_SESSION['login'])){
            return $_SESSION['login'];  
        }
        return false;
    }

    public function get_loggedinUser(){
        return $_SESSION['user'];
    }

    // Logout 
    public function user_logout(){
        $_SESSION['login'] = false;
        session_destroy();
    }
    // Sampai sini aja

    // simpan user
    public function create(){
        if($this->isUsernameAvailable($this->username, $this->email)==true){
            $query = "INSERT INTO " . $this->table_name . " SET nama = ?, email = ?, username = ?, password = ?";

            $stmt = $this->conn->prepare($query);

            $stmt->bindParam(1, $this->nama);
            $stmt->bindParam(2, $this->email);
            $stmt->bindParam(3, $this->username);
            $stmt->bindParam(4, md5($this->password));
            if($stmt->execute()){
                return true;
            }else{
                return false;
            }           
        }
        return false;
    }

    private function isUsernameAvailable($uname, $email){
        $query = "SELECT * FROM " . $this->table_name . " where username=? or email=?";
        $stmt = $this->conn->prepare( $query );
        $stmt->bindParam(1, $uname);
        $stmt->bindParam(2, $email);                
        $stmt->execute();    
        $num = $stmt->rowCount();         
        if($num==0){
            return true;            
        }else{
            return false;        
        }
    }

    // ubah password
    public function ubahPassword(){
        $query = "UPDATE " . $this->table_name . " SET password = ? where id=?";

        $stmt = $this->conn->prepare($query);

        $stmt->bindParam(1, md5($this->password));         
        if($stmt->execute()){
            return true;
        }else{
            return false;
        }
    }

    // hapus data user
    public function delete(){
        $query = "DELETE FROM " . $this->table_name . " WHERE id = ?";   
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $this->id);  
        if($result = $stmt->execute()){
            return true;
        }else{
            return false;
        }
    }
    function getBynama($nama){   
        $nama = "%$nama%";
        $query = "SELECT * FROM " . $this->table_name . " Where nama like ?";    
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $nama);  
        $stmt->execute();    
        return $stmt;
    }   

    public function readAll($page, $from_record_num, $records_per_page){     
        $query = "SELECT * FROM " . $this->table_name . " ORDER BY nama ASC LIMIT {$from_record_num}, {$records_per_page}";  
        $stmt = $this->conn->prepare( $query );
        $stmt->execute();    
        return $stmt;
    }

    // digunakan untuk paging
    public function countAll(){  
        $query = "SELECT id FROM " . $this->table_name . "";     
        $stmt = $this->conn->prepare( $query );
        $stmt->execute();    
        $num = $stmt->rowCount();    
        return $num;
    }      

    public function readOne(){   
        $query = "SELECT * FROM " . $this->table_name . " where id=? LIMIT 0,1";
        $stmt = $this->conn->prepare( $query );
        $stmt->bindParam(1, $this->id);         
        $stmt->execute();    
        $row = $stmt->fetch(PDO::FETCH_ASSOC); 
        $this->nama = $row['nama'];
        $this->email = $row['email'];
        $this->password = $row['password'];
        $this->username = $row['username'];                     
    }    
}
?>

这是另一个

<!DOCTYPE html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>Rental | Data user</title>

    <!-- Bootstrap Core CSS -->
    <link href="/css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom CSS -->
    <link href="/css/sb-admin.css" rel="stylesheet">

    <!-- Morris Charts CSS -->
    <link href="/css/plugins/morris.css" rel="stylesheet">

    <!-- Custom Fonts -->
    <link href="/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->

</head>

<body>
    <?php
    include_once $_SERVER['DOCUMENT_ROOT'] . '/config/database.php';

    // instansiasi object database
    $database = new Database();
    $db = $database->getConnection();
    // halaman yg diberikan melalui GET, halaman default adalah satu
    $page = isset($_GET['page']) ? $_GET['page'] : 1;
    // set jumlah data per halaman
    $records_per_page = 5;

    // query LIMIT clause
    $from_record_num = ($records_per_page * $page) - $records_per_page;

    // include file database dan object
    include_once $_SERVER['DOCUMENT_ROOT'] . '/objects/user.php';
    $user = new User($db);

    // query user
    if(isset($_GET['nama'])){
        $nama = $_GET['nama'];
        $stmt = $user->getBynama($nama);     
    }else{
        $stmt = $user->readAll($from_record_num, $records_per_page);
    }   
    $num = $stmt->rowCount();
    ?>
    <div id="wrapper">

        <!-- Navigation -->
        <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
            <!-- Brand and toggle get grouped for better usere display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="/index.php">RENTAL.com</a>
            </div>
            <!-- Top Menu Items -->
            <ul class="nav navbar-right top-nav">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-user"></i> Dzikri Syarif H <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li>
                            <a href="#"><i class="fa fa-fw fa-user"></i> Profile</a>
                        </li>
                        <li>
                            <a href="#"><i class="fa fa-fw fa-envelope"></i> Inbox</a>
                        </li>
                        <li>
                            <a href="#"><i class="fa fa-fw fa-gear"></i> Settings</a>
                        </li>
                        <li class="divider"></li>
                        <li>
                            <a href="#"><i class="fa fa-fw fa-power-off"></i> Log Out</a>
                        </li>
                    </ul>
                </li>
            </ul>

            <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
            <div class="collapse navbar-collapse navbar-ex1-collapse">
                <ul class="nav navbar-nav side-nav">
                    <li>
                        <a href="/index.php"><i class="fa fa-fw fa-dashboard"></i> Dashboard</a>
                    </li>
                    <li class="active">
                        <a href="javascript:;" data-toggle="collapse" data-target="#master"><i class="fa fa-fw fa-tags"></i> Data Master <i class="fa fa-fw fa-caret-down"></i></a>
                        <ul id="master" class="collapse">
                            <li>
                                <a href="/master/mobil/index.php"><i class="fa fa-car"></i> Data Mobil</a>
                            </li>
                            <li>
                                <a href="/master/pelanggan/index.php"><i class="fa fa-users"></i> Data Pelanggan</a>
                            </li>
                            <li>
                                <a href="/master/produsen/index.php"><i class="fa fa-users"></i> Data produsen</a>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <a href="javascript:;" data-toggle="collapse" data-target="#transaksi"><i class="fa fa-fw fa-credit-card"></i> Data Transaksi <i class="fa fa-fw fa-caret-down"></i></a>
                        <ul id="transaksi" class="collapse">
                            <li>
                                <a href="#"><i class="fa fa-car"></i> Penyewaan</a>
                            </li>
                            <li>
                                <a href="#"><i class="fa fa-reply"></i> Pengembalian</a>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <a href="javascript:;" data-toggle="collapse" data-target="#laporan"><i class="fa fa-fw fa-line-chart"></i> Laporan <i class="fa fa-fw fa-caret-down"></i></a>
                        <ul id="laporan" class="collapse">
                            <li>
                                <a href="#"><i class="fa fa-car"></i> Data User</a>
                            </li>
                            <li>
                                <a href="#"><i class="fa fa-credit-card"></i> Penyewaan</a>
                            </li>
                        </ul>
                    </li>
                    <li>
                        <a href="/master/user/index.php"><i class="fa fa-users"></i> Users</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </nav>

        <div id="page-wrapper">

            <div class="container-fluid">

                <!-- Page Heading -->
                <div class="row">
                    <div class="col-lg-12">
                        <h1 class="page-header">
                            Data User <small>Data Master User </small>
                        </h1>
                        <ol class="breadcrumb">
                            <li>
                                <a href="/master/user/index.php"><i class="fa fa-car"></i>Menu Utama</a>
                            </li>
                            <li>Master</li>
                            <li class="active"><a href="#">Data User</a></li>
                        </ol>
                    </div>
                </div>
                <!-- /.row -->

                <div class="row">
                    <div class="col-lg-12 col-md-12">
                        <div class="panel panel-primary">
                            <div class="panel-heading">
                                <div class="row">
                                    <div class="col-xs-4">
                                        <a href="tambah.php" class="btn btn-default"><i class="fa fa-plus"></i> Tambah</a>
                                    </div>
                                    <div class="col-xs-8 text-right">
                                        <form action="index.php" method="GET">
                                           <div class="form-group input-group">
                                              <input type="text" maxlength="100" name="nama" class="form-control" placeholder="Cari Berdasarkan Nama User..." value="<? if(isset($nama)){ echo $nama;} ?>" />
                                                              <span class="input-group-btn">
                                            <input type="submit" class="btn btn-success" value="Cari" />
                                              </span>
                                           </div>
                                        </form>
                                    </div>
                                </div>
                            </div>

                        <div class="panel-body">
                <?php               
                // tampilkan data user jika ada
                if($num>0){ ?>          
                            <div class="table-responsive">
                                <table class="table table-hover table-striped">
                                    <thead>
                                        <tr>
                                            <th>No.</th>
                                            <th>Full Name</th>
                                            <th>User Name</th>
                                            <th>Password</th>
                                            <th>Is Active</th>
                                            <th>Aksi</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                    <?php
                                        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){   
                                        extract($row); 
                                    ?>
                                        <tr>
                                            <td><?= $id ?>

1 个答案:

答案 0 :(得分:1)

问题是您已在PHP代码中将三个参数定义为User::readAll()

/* Note that you have defined 3 arguments
   - $page
   - $from_record_num
   - $records_per_page
*/

public function readAll($page, $from_record_num, $records_per_page){     
    $query = "SELECT * FROM " . $this->table_name . " ORDER BY nama ASC LIMIT {$from_record_num}, {$records_per_page}";  
    $stmt = $this->conn->prepare( $query );
    $stmt->execute();    
    return $stmt;
}

但是你在HTML部分调用它有三个参数:

if(isset($_GET['nama'])){
    $nama = $_GET['nama'];
    $stmt = $user->getBynama($nama);     
}else{

    /* ------ Here you are calling it with two arguments ------- */

    $stmt = $user->readAll($from_record_num, $records_per_page);
}   

您的HTML代码调用中缺少第三个参数。

更新:您在HTML代码中的调用中缺少$page参数,实际上在定义中,您永远不会使用它!所以最好删除它来解决你的问题。

在PHP代码中更改您的定义:

/* Now you have only 2 arguments that matches your call.
   - $from_record_num
   - $records_per_page
*/
public function readAll($from_record_num, $records_per_page){     
    $query = "SELECT * FROM " . $this->table_name . " ORDER BY nama ASC LIMIT {$from_record_num}, {$records_per_page}";  
    $stmt = $this->conn->prepare( $query );
    $stmt->execute();    
    return $stmt;
}