我想从我的代码中删除以下通知和警告:
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 ?>
答案 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;
}