Hej,
Du kan f.eks. lave det i klasser.
Hvis du har et sted hvor du henter nogle produkter frem på din side, fra en tabel som ser ud som følgende:
- create table products(
- id int primary key auto_increment,
- name varchar(255) not null,
- description text
- );
Kan du f.eks. lave en ProductDAO klasse, som håndtere dette. DAO står for Data Access Object. (Læs mere om DAOs her:
http://en.wikipedia.org/wiki/Data_Access_Object )
Denne klasse vil så håndtere al din sql logik osv.
f.eks. laver vi et Product objekt, som skal indeholde produkt data, og en ProductDAO som henter data ud fra databasen:
Product: (i filen product.class.php)
- <?php
- class Product {
- private $id;
- private $name;
- private $description;
-
- public function __construct($id,$name,$description) {
- $this->id = $id;
- $this->name = $name;
- $this->description = $description;
- }
-
- public function getId() {
- return $this->id;
- }
-
- public function getName() {
- return $this->name;
- }
-
- public function setName($name) {
- $this->name = $name;
- }
-
- public function getDescription() {
- return $this->description;
- }
-
- public function setDescription($description) {
- $this->description = $description;
- }
- }
- ?>
ProductDAO: (i filen productDAO.class.php)
- <?php
- class ProductDAO {
- public function __construct() {
-
- }
-
- /**
- * Fetches a product from the database, using the given ID
- * @param $id the products to fetch's ID
- * @return the product that matched the given id.
- */
- public function get($id) {
- // opret forbindelse til mysql, eventuelt via et andet objekt.
-
- $query = mysql_query("select * from products where id = ".$id);
- $row = mysql_fetch_array($query);
-
- $product = new Product($row['id'],$row['name'],$row['description']);
-
- return $product;
- }
-
- /**
- * Saves the given product to the database.
- * @param $product the product to save.
- */
- public function save($product) {
- $query;
-
- // opret forbindelse til mysql, eventuelt via et andet objekt.
-
- if( $product->getId() != '' ) {
- $query = "update products set name = '".$product->getName()."', description = '".$product->getDescription()."' where id = ".$product->getId();
- }
- else {
- $query = "insert into products(name,description) values('".$product->getName()."','".$product->getDescription()."')";
- }
-
- // executes the query.
- mysql_query($query);
- }
- }
- ?>
Herefter kan du så have en side hvor du bruger det, hvor du før i tiden måske skrev følgende:
old_view_product.php:
- <?php
- $host = 'localhost';
- $user = 'root';
- $pass = '12345';
- $database = 'shop_test';
-
- mysql_connect($host,$user,$pass) or die(mysql_error());
- mysql_select_db($database);
-
- // a lot of html etc here... cba :)
- $query = mysql_query("select * from products where id = ".$_GET['id']);
- $row = mysql_fetch_array($query);
-
- ?>
-
- <table>
- <tr>
- <td><?php echo $row['id']; ?></td>
- <td><?php echo $row['name']; ?></td>
- <td><?php echo $row['description']; ?></td>
- </tr>
- </table>
Koden til den nye view product side kunne så være følgende:
new_view_product.php:
- <?php
- require_once('product.class.php');
- require_once('productDAO.class.php');
-
- $productDAO = new ProductDAO();
- $product = $productDAO->get($_GET['id']);
-
- // a lot of html etc here... cba :)
-
- ?>
-
- <table>
- <tr>
- <td><?php echo $product->getId(); ?></td>
- <td><?php echo $product->getName(); ?></td>
- <td><?php echo $product->getDescription(); ?></td>
- </tr>
- </table>
Der er lidt mere kodning i denne måde, men du har ikke alle mulige sql sætninger og database connections alle steder i din kode, og kun eet sted du skal rette, hvis noget går galt.
Hvis du så tænker lidt videre, kan du f.eks. lave en indkøbskurv objekt, som kan beregne priser, lave ordre (og ordre linjer) i databasen. Alt sammen på et lukket sted, med kode som kun skal opdateres der...
Håber at du kunne bruge det.
Var lidt fesen at jokke ind i en anden diskussion og stille dit sprøgsmål