2017-04-16 203 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,并且一切正常。我希望这可以帮助那里的人。