Διαχείριση πινάκων μέσα από classes στην PHP

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
AlexanderTheGr
Δημοσιεύσεις: 153
Εγγραφή: 11 Ιούλ 2003 04:22
Επικοινωνία:

Διαχείριση πινάκων μέσα από classes στην PHP

Δημοσίευση από AlexanderTheGr » 26 Οκτ 2010 21:01

Προσωπικά πάντα λάτρευα τον αντικειμενοστραφή προγραμματισμό

Αν και η PHP δεν είναι μια αντικειμενοστραφής γλώσσα από μόνη της, σου δίνει όμως την δυνατότητα να δημιουργήσεις τις δικές σου κλάσεις και με έναν έμμεσο τρόπο να γίνει η PHP αντικειμενοστραφής.

Μια ωραία εφαρμογή των κλάσεων που χρησιμοποιώ συχνά στην δουλεία μου είναι να διαχειρίζομαι πίνακες βάσεων δεδομένων

Ας υποθέσουμε ότι έχουμε έναν πολύ απλό πίνακα users με πεδία id,first_name,last_name,email,password

Κώδικας: Επιλογή όλων

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL auto_increment,
  `first_name` varchar(255) NOT NULL,
  `last_name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
Και παρακάτω φαίνεται ο κώδικας τις κλάσης μας

Κώδικας: Επιλογή όλων

//user.class.php
class users {

    private $_mainTable;
	private $_conn;

	// Οριζουμε τα πεδία του πινακά μας ως μεταβλητές
    private $_id;
    private $_firstName;
    private $_lastName;
    private $_email;
    private $_password;
    
    function  __construct($conn) {
		$this->_conn      = $conn;
        $this->_mainTable = "users";
    }
    //diadikasia login xristi epistrefei false se apotyxia true se epitixia
    function login() {
		$SQLstr = "Select * from ".$this->_mainTable." where email = '".$this->_email."' AND password = '".$this->_password."'";
		$result = mysql_query($SQLstr,$this->_conn);	
        if (!mysql_num_rows($result)) return false; // Δεν βρέθηκε η εγγρφή επιστρφει false
		$data = mysql_fetch_assoc($result);				
        $this->load($data["id"]);
        return true;
    }
	
	// Φορτώνουμε στις μεταβλητές της class τε πεδία του πίνακα
    function load($id) {	
		$SQLstr = "Select * from ".$this->_mainTable." where id = '".intval($id)."'";
		$result = mysql_query($SQLstr,$this->_conn) or die(mysql_error());	
        if (!mysql_num_rows($result)) return false; // Δεν βρέθηκε η εγγρφή επιστρφει false
		$data = mysql_fetch_assoc($result);
        $this->_id           = $data["id"];
        $this->_firstName    = $data["first_name"];
        $this->_lastName     = $data["last_name"];
        $this->_email        = $data["email"];
        $this->_password     = $data["password"];
        return true;
    }
	
	// Κανουμε save μια εγραφή που έχουμε ήδη φορτωσει
	// Εδω χρησημοποιούμε την Replace
	// Εαν έχουμε ορίσει το ID της εγγραφής ($this->_id) τοτε ανανεώνουμε την εγγραφή (UPDATE... περίπου)	
    // Εαν δεν έχουμε ορισει το ID της εγγραφής  ($this->_id) τοτε εισάγουμε μια νέα εγγραφή (INSERT)
    function save(){
        $db = $this->_dbObj;
		$SQLstr = "Replace ".$this->_mainTable." SET id = '".$this->_id."', 
											 first_name = '".$this->_firstName."', 
											  last_name = '".$this->_lastName."', 
											      email = '".$this->_email."', 
									    	   password = '".$this->_password."'";
		$result = mysql_query($SQLstr,$this->_conn) or die(mysql_error());			
		$SQLstr = "Select max(id) as maxid from ".$this->_mainTable." where email = '".$this->_email."'";
		$result = mysql_query($SQLstr,$this->_conn) or die(mysql_error());	
        if (!mysql_num_rows($result)) return false; // Δεν βρέθηκε η εγγραφή επιστρεφει false (απλά ένα check)
		$data = mysql_fetch_assoc($result);	
        return $this->load($data["maxid"]);
    }

    //SETTERS & GETTERS*******************************************
    function getId() {
        return $this->_id;
    }
    function getFirstName() {
        return $this->_firstName;
    }
    function getLastName() {
        return $this->_lastName;
    }
    function getEmail() {
        return $this->_email;
    }
    function getPassword() {
        return $this->_password;
    }   
	
    function setDbName($val) {
        $this->_dbName = $val;
    }	
    function setId($val) {
        $this->_id = $val;
    }
    function setFirstName($val) {
        $this->_firstName = $val;
    }
    function setLastName($val) {
        $this->_lastName = $val;
    }
    function setEmail($val) {
        $this->_email = $val;
    }
    function setPassword($val) {
        $this->_password = $val;
    }
}

Παρακάτω φαίνονται 3 παραδειγματάκια χρήσης της κλάσεις

Κώδικας: Επιλογή όλων

//register.php

require_once("user.class.php");
$conn = mysql_connect("localhost", "db_user", "db_pass")or die("cannot connect"); 
mysql_select_db("db",$conn)or die("cannot select DB"); // όπου db_user,db_pass,db βάζετε τα στοιχεία της βάσης σας 
if (isset($_POST["signup"])) {
	$usersObj = new users($conn);
	$usersObj->setFirstName($_POST["register_firstname"]);
	$usersObj->setLastName($_POST["register_lastname"]);
	$usersObj->setEmail($_POST["register_email"]);
	$usersObj->setPassword($_POST["register_password"]);
	$usersObj->save();
}	
$html = '
<form method="POST">
<table class="" border="0" cellspacing="0" cellpadding="4">
<tr>
<td>Όνομα<br><input type="text" name="register_firstname" value=""></td>
</tr>
<tr>
<td>Επώνυμο<br><input type="text" name="register_lastname" value=""></td>
</tr>
<tr>
<td>Email<br><input type="text" name="register_email" value=""></td>
</tr>
<tr>
<td>Κωδικός<br><input type="password" name="register_password" value=""></td>
</td>
</tr>
</table>
<input type="submit" name="signup" value="Sign Up">
</form>';
echo $html;

Κώδικας: Επιλογή όλων

/// login.php

require_once&#40;"user.class.php"&#41;;
$conn = mysql_connect&#40;"localhost", "db_user", "db_pass"&#41;or die&#40;"cannot connect"&#41;; 
mysql_select_db&#40;"db",$conn&#41;or die&#40;"cannot select DB"&#41;; // όπου db_user,db_pass,db βάζετε τα στοιχεία της βάσης σας 

$usersObj = new users&#40;$conn&#41;;
if &#40;isset&#40;$_POST&#91;"login"&#93;&#41;&#41; &#123;

	$usersObj = new users&#40;$conn&#41;;
	$usersObj->setEmail&#40;$_POST&#91;"register_email"&#93;&#41;;
	$usersObj->setPassword&#40;$_POST&#91;"register_password"&#93;&#41;;
	if &#40;$usersObj->login&#40;&#41;&#41;&#123;
		$_SESSION&#91;"user_id"&#93; = $usersObj->getId&#40;&#41;;
	&#125; else &#123;
		$html = "Login Failed";	
	&#125;

&#125;	
$html .= '
<form method="POST">
<table class="" border="0" cellspacing="0" cellpadding="4">
<tr>
<td>Email<br><input type="text" name="register_email" value=""></td>
</tr>
<tr>
<td>Κωδικός<br><input type="password" name="register_password" value=""></td>
</td>
</tr>
</table>
<input type="submit" name="login" value="Login">
</form>';
echo $html;

Κώδικας: Επιλογή όλων

/// admin_user.php


require_once&#40;"user.class.php"&#41;;
$conn = mysql_connect&#40;"localhost", "db_user", "db_pass"&#41;or die&#40;"cannot connect"&#41;; 
mysql_select_db&#40;"db",$conn&#41;or die&#40;"cannot select DB"&#41;; // όπου db_user,db_pass,db βάζετε τα στοιχεία της βάσης σας 

$usersObj = new users&#40;$conn&#41;;
$usersObj->load&#40;$_SESSION&#91;"user_id"&#93;&#41;;
if &#40;intval&#40;$usersObj->getId&#40;&#41;&#41; == 0&#41; &#123;
    header&#40;"Location&#58; login.php"&#41;;
    exit; 
&#125;
if &#40;isset&#40;$_POST&#91;"save"&#93;&#41;&#41; &#123;
	$usersObj = new users&#40;$conn&#41;;
	$usersObj->setFirstName&#40;$_POST&#91;"firstname"&#93;&#41;;
	$usersObj->setLastName&#40;$_POST&#91;"lastname"&#93;&#41;;
	$usersObj->setEmail&#40;$_POST&#91;"email"&#93;&#41;;
	$usersObj->setPassword&#40;$_POST&#91;"password"&#93;&#41;;
	$usersObj->save&#40;&#41;;
&#125;
	
$html = '
<form method="POST">
<table class="" border="0" cellspacing="0" cellpadding="4">
<tr>
<td>Όνομα<br><input type="text" name="firstname" value="'.$usersObj->getFirstName&#40;&#41;.'"></td>
</tr>
<tr>
<td>Επώνυμο<br><input type="text" name="lastname" value="'.$usersObj->getLastName&#40;&#41;.'"></td>
</tr>
<tr>
<td>Email<br><input type="text" name="email" value="'.$usersObj->getEmail&#40;&#41;.'"></td>
</tr>
<tr>
<td>Κωδικός<br><input type="password" name="password" value="'.$usersObj->getPassword&#40;&#41;.'"></td>
</td>
</tr>
</table>
<input type="submit" name="save" value="Save Info">
</form>';
echo $html;

Ένα από τα πλεονεκτήματα αυτής της εφαρμογής διαχωρίζουμε τον κώδικα που χειρίζεται εγγραφές στην βάση από τον υπόλοιπο κώδικα. Πουθενά δεν δεν χρησημοποιούμε SQL κώδικα παρά μόνο στην κλάση ο οποίος προκύπτει ελλάχιστος

Επίσης για οποιαδήποτε αλλαγή στον πίνακα που ίσως μελλοντικός προκύψει δεν θα χρειαστεί να ψάχνουμε γραμμή προς γραμμή σε όλον τον κώδικα σε όλα τα αρχεία που διαχειριζόμαστε τον πίνακα users, πάρα μόνο στην κλάση και βέβαια ίσως και μικροαλλαγες στον παλιό κώδικα

Αυτά το ολίγα
Ευχαριστώ για την προσοχή σας

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες