2017-04-16 207 views
-1

我正在嘗試使用OOP概念在PHP中編寫Web應用程序,並且我構建了一個類和一個處理文件以將學生對象添加到數據庫。但它不起作用。這是我的代碼。我寫了一個擴展User類的Student類。這是用戶類。將值插入到MYSQL數據庫

<?php 
class User 
    { 
    private $firstName; 
    private $lastName; 
    private $email; 
    private $gender; 
    private $phoneNumber; 
    private $profilePicture; 

    public function getFirstName() 
    { 
     return $this->firstName; 
    } 

    public function getLastName() 
    { 
     return $this->lastName; 
    } 

    public function getEmail() 
    { 
     return $this->email; 
    } 

    public function getPassword() 
    { 
     return $this->password; 
    } 

    public function getGender() 
    { 
     return $this->gender; 
    } 

    public function getPhoneNumber() 
    { 
     return $this->phoneNumber; 
    } 

    public function getProfilePicture() 
    { 
     return $this->profilePicture; 
    } 
    public function setFirstName($firstName) 
    { 
     $this->firstName = $firstName; 
    } 

    public function setLastName($lastName) 
    { 
     $this->lastName = $lastName; 
    } 

    public function setEmail($email) 
    { 
     $this->email = $email; 
    } 

    public function setPassword($password) 
    { 
     $this->password = $password; 
    } 

    public function setGender($gender) 
    { 
     $this->gender = $gender; 
    } 

    public function setPhoneNumber($phoneNumber) 
    { 
     $this->phoneNumber = $phoneNumber; 
    } 

    public function setProfilePicture($profilePicture) 
    { 
     $this->profilePicture = $profilePicture; 
    } 
} 

然後班級學生

<?php 
include '../Functions/mainfunction.php'; 
include 'User.php'; 
class Student extends User 
{ 
    private $matricNumber; 
    private $level; 
    private $faculty; 
    private $department; 
    private $unit; 
    private $result; 
    private $friends; 
    public function getMatricNumber() 
    { 
     return $this->matricNumber; 
    } 

    public function getLevel() 
    { 
     return $this->level; 
    } 

    public function getFaculty() 
    { 
     return $this->faculty; 
    } 

    public function getDepartment() 
    { 
     return $this->department; 
    } 

    public function getUnit() 
    { 
     return $this->unit; 
    } 

    public function getResult() 
    { 
     return $this->result; 
    } 

    public function getFriends() 
    { 
     return $this->friends; 
    } 

    public function setMatricNumber($matricNumber) 
    { 
     $this->matricNumber = $matricNumber; 
    } 

    public function setFaculty($faculty) 
    { 
     $this->faculty = $faculty; 
    } 

    public function setDepartment($department) 
    { 
     $this->department = $department; 
    } 

    public function setUnit($unit) 
    { 
     $this->unit = $unit; 
    } 

    public function setResult($result) 
    { 
     $this->result = $result; 
    } 

    public function setFriends($friends) 
    { 
     $this->friends = $friends; 
    } 

    public function setLevel($level) 
    { 
     $this->level = $level; 
    } 


    public static function createStudent($student, $password) 
    { 
     //Open a Database Connection 
     $connect = dbcon(); 
     //Get Student object fields from the create user page 
     $firstName = $student->getFirstName(); 
     $lastName =$student->getLastName(); 
     $email = $student->getEmail(); 
     $gender = $student->getGender(); 
     $faculty = $student->getFaculty(); 
     $department = $student->getDepartment(); 
     $unit = $student->getUnit(); 
     $level = $student->getLevel(); 
     //Encrypt Password 
     $encryptedPassword = password_hash($password, PASSWORD_DEFAULT); 

     $matricNumber = $student->getMatricNumber(); 

     //Insert User to database 
     $query = 'INSERT INTO `student` (`First Name`, `Last Name`, `Gender`, `Email Address`, `Password`, `Faculty`, `Department`, `Unit`, `Matric Number`, `Level`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);'; 
     $statement = $connect->prepare($query); 
     $connect->prepare($query)->bind_param('sssssssssi', $firstName, $lastName, $gender, $email, $encryptedPassword, $faculty, $department, $unit, $matricNumber, $level); 
     if ($statement->execute()) { 
      $connect->close(); 
      // echo $encryptedPassword . 'true'; 
      return true; 
     } else { 
      $connect->close(); 
      // echo $encryptedPassword . 'false'; 
      return false; 
     } 
    } 
} 

而且這是做加法的代碼。

<?php 
require('../Classes/Student.php'); 
$student = new Student; 
$firstName = htmlspecialchars($_POST['firstName']); 
$lastName = htmlspecialchars($_POST['lastName']); 
$email = htmlspecialchars($_POST['email']); 
$matricNumber = htmlspecialchars($_POST['matricNumber']); 
$faculty = htmlspecialchars($_POST['faculty']); 
$department = htmlspecialchars($_POST['department']); 
$unit = htmlspecialchars($_POST['unit']); 
$level = htmlspecialchars($_POST['level']); 
$gender = htmlspecialchars($_POST['gender']); 
$password = htmlspecialchars($_POST['password']); 

$student->setFirstName($firstName); 
$student->setLastName($lastName); 
$student->setEmail($email); 
$student->setMatricNumber($matricNumber); 
$student->setFaculty($faculty); 
$student->setDepartment($department); 
$student->setUnit($unit); 
$student->setLevel($level); 
$student->setGender($gender); 

$created = $student::createStudent($student, $password); 
if ($created) { 
redirect('../Signed_in/Index.php'); 
}else{ 
redirect('../index.php'); 

} 

最後,我的數據庫連接的代碼和我的定義方法「重定向」

<?php 

function redirect($url){ 
header("Location:{$url}"); 
exit; 

} 

function dbcon(){ 
$connect = new mysqli('localhost', 'username', 'password', 'database-name'); 
return $connect; 

} 

能否請你告訴我,我要去哪裏錯了。它不會給出任何錯誤消息。這是說我的bind_param函數首先給出了一個布爾值。但是現在代碼只是將我重定向到else語句應該引導你到的索引頁面,並且學生不會被添加到我的數據庫中,它不會告訴我爲什麼。 如果需要這是我的HTML表格

  <form class="sign_up_form" method="post" action="Logic/create-student.php"> 
      <input class="sign_up_input" name="firstName" placeholder="First Name" /> 
      <input class="sign_up_input" name="lastName" placeholder="Last Name" /> 
      <input class="sign_up_input long" name="email" placeholder="Email Address" /> 
      <input class="sign_up_input long" name="password" placeholder="Password" type="password" /> 
      <input class="sign_up_input long" name="matricNumber" placeholder="Matric Number" /> 
      <input class="sign_up_input" name="faculty" placeholder="Faculty" /> 
      <input class="sign_up_input" name="department" placeholder="Department" /> 
      <input class="sign_up_input" name="unit" placeholder="Unit" /> 
      <select name="level" class="sign_up_input"> 
      <option>100</option> 
      <option>200</option> 
      <option>300</option> 
      <option>400</option> 
      <option>500</option> 
      </select> 
      <select name="gender" class="sign_up_input"> 
      <option>Male</option> 
      <option>Female</option> 
      </select> 
      <input class="sign_up_input" placeholder="Validation Pin" /> 
      <input class="sign_up_submit sign_up_input long" type="submit" value="Sign Up" /> 
      <div class="special_hr_or long"> 
      <span class="special_text">Or</span> 
      </div> 
     </form> 
+0

在方法createStudent中,行if($ statement-> execute()){'''將始終返回true。相反,在if之前執行語句,然後測試受影響大於0.(或== 1) –

+0

的記錄。我已經這樣做了,但沒有添加到數據庫中。這只是表現爲虛假... –

回答

0

我解決了我的問題。我用我的代碼解決了三個問題,它們比邏輯錯誤更多的語法錯誤。第一個是我在實例化的$ student對象上使用了靜態函數「createStudent」,而不是學生類。其次是我給了一個錯誤的表名,第三,我在查詢中插入值的列不是我表中的唯一列。我不得不將我的表中沒有插入值的列的默認值設置爲null,並在我的查詢中將它們設置爲null,並且一切正常。我希望這可以幫助那裏的人。