Avatar billede bx Nybegynder
22. oktober 2007 - 20:08 Der er 11 kommentarer

PHP5 & MySQL configurationsfil

Hej.

Det er nemt for mig at lave i fælles konfigurationsfil med almindelige klasser men OOP metoden kan jeg ikke helt gennemskue.

Lige nu gør jeg det rimeligt klodset og i hver klasse fil:

<?php
class Productlist {
    protected $dbname = 'database_server_navn';
    protected $dbhost = 'localhost';
    protected $dbuser = 'brugernavn';
    protected $dbpass = 'kodeord';
    protected $dbport = '';
   
    function show_productlist($cat_id) {
        $mysqli = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
        $productlist_query = $mysqli->query("SELECT * FROM products_to_categories, product, product_description, product_image, product_price WHERE products_to_categories.pid = $cat_id AND products_to_categories.cid  = product.product_id AND product_description.product_id=product.product_id AND product_price.product_id=product.product_id AND product_image.product_id=product.product_id");
        if (mysqli_num_rows($productlist_query) == 0) echo "No products in this category.";
        return $productlist_query;
    }
}
?>

Er der en anden måde jeg kan gøre det så den inkluderer en konfigurationsfil istedet f.eks. config.php ?
Avatar billede uggi16 Nybegynder
23. oktober 2007 - 13:46 #1
http://ulrichottosen.dk/oop/db.php

Her er en ren OOP PHP5 config fil :)

Så skal du bare skrive:

$sql = $db->query("SELECT...");

For at køre din query :)

og hente dem med:

if($sql)
{
while($r = mysql_fetch_array($sql))
{
$data = $r['datafraSQL'];
}
}

Håber det hjælper :)
Avatar billede uggi16 Nybegynder
23. oktober 2007 - 13:47 #2
Og.. Naturligvis skal du lige erklærer at du bruger klassen DB...

include('db.php');
$db = new db();

osv...
Avatar billede uggi16 Nybegynder
23. oktober 2007 - 13:56 #3
Dvs. dine klasser kan/skal se sådan her ud:

<?PHP
class product
{
    public function show_productlist()
    {
          $db = new db();
          $sql = $db->query("SELECT..");
          if($sql)
          {
              while($r = mysql_fetch_array($sql))
              {
                    $data = $r['SQLdata'];
                    return $data;
              }
          }
    }
}
?>

Klassen kaldes sådan:

<?PHP
    include('db.php'); //skal includeres FØR klaserne køres..
    include('product.class.php'); // filen med klassen i...
    $product = new product(); // Nu kan vi bruge klassen...

    echo $product->show_productlist(); // Her viser vi det vi hentede...
?>
Avatar billede bx Nybegynder
23. oktober 2007 - 16:25 #4
Det ser enkelt ud. Jeg prøver det lige af. Bliver måske lige først om et par dage. Tka for det :)
Avatar billede uggi16 Nybegynder
23. oktober 2007 - 17:25 #5
Det er ikke så svært.. du skriver bare hvis du skal have hjælp :)
Avatar billede bx Nybegynder
25. oktober 2007 - 22:37 #6
Det virker ikke. Der sker simpelthen ikke noget. Jeg får hverken fejl eller noget. Mine filer ser sådan her ud:

Cart.php (klasse fil)
---------------------------
<?php
class Cart {
    public function cart_actions($action) {
        switch($action)
        {
            case 'add':
            $this->add_item($_POST['prod_id'],$_POST['prod_qty']);
            break;
            case 'remove':
            $this->remove_item($_POST['prod_id'], $_POST['prod_qty']);
            break;
            case 'clear':
            $this->clear_cart();
            break;
            default:
        }
        return;
    }
    public function add_item($id,$qty) {
        $_SESSION['cart'][$id] += $qty;
        return;
    }
    public function remove_item($id,$qty) {
        if ($_SESSION['cart'][$id] != 0) {
            $_SESSION['cart'][$id] -= $qty;
        } else {
            unset($_SESSION['cart'][$id]);
        }
        return;
    }
    public function show_cart() {
        print_r($_SESSION['cart']);
    }
    public function clear_cart() {
        unset($_SESSION['cart']);
        return;
    }
    public function show_product() {
        $db = new db();
        $sql = $db->query("SELECT * FROM products");
        if($sql) {
            while($r = mysql_fetch_array($sql)) {
                $data = $r['SQLdata'];
                return $data;
            }
        }
    }
}
?>


Db.php (klasse fil)
---------------------------
<?php
class db {
    private $host;
    private $db;
    private $user;
    private $pass;
    private $connection;

    public function db() {
        $hostname    =    "hemmeligt";
        $database    =    "hemmeligt";
        $username    =    "hemmeligt";
        $password    =    "hemmeligt";   
        $this->host    =    $hostname;
        $this->db    =    $database;
        $this->user    =    $username;
        $this->pass    =    $password;
    }
    private function open_connection() {
        try
        {
            $this->connection = mysql_connect($this->host,$this->user,$this->pass);
            mysql_select_db($this->db);
        }
        catch (Exception $e)
        {
            throw $e;
        }
    }
    private function close_connection() {
        try
        {
            mysql_close($this->connection);
        }
        catch (Exception $e)
        {
            throw $e;
        }
    }
    public function query($query) {
        try
        {
            $this->open_connection();
            return mysql_query($query);
        }
        catch (Exception $e)
        {
            throw $e;
        }
        $this->close_connection();
    }
}
?>

header.php
-----------------
<?php
$cart = new Cart;
$cart->cart_actions($_REQUEST['action']);
?>

product.php
-----------------
<?php require_once('./includes/header.php');?>
<?php echo $cart->show_product();?>



Jeg har kun taget det fra de to sidste filer som var relevant så det ikke bliver for uoverskueligt.
Avatar billede uggi16 Nybegynder
26. oktober 2007 - 08:14 #7
Du kalder ikke nogen funktioner fra db.php filen nogen steder... det kan være derfor det ikke virker:

header.php
-----------------
<?php
include('db.php');
$db = new db();

include('Cart.php');
$cart = new Cart();
$cart->cart_actions($_REQUEST['action']); //Hvorfor kalder du den her nu ?
?>

Her laver vi en instands af klassen db, så vi kan bruge den senere :)

product.php
-----------------
<?php require_once('./includes/header.php');?>
<?php echo $cart->show_product();?>
Avatar billede bx Nybegynder
26. oktober 2007 - 08:36 #8
Jeg kan se jeg glemte at vises det vigtigste i header.php. Der er en require_once med Db.php

<?php
session_start();
require_once('./objects/Db.php');
require_once('./objects/Cart.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
    <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
    <title>SimpleShop.dk</title>
    <link href="includes/styles.css" media="screen" rel="Stylesheet" type="text/css" />
    <script type="text/javascript" src="js/mootools.v1.11.js"></script>
</head>
<body>
<?php
$cart = new Cart;
$cart->cart_actions($_REQUEST['action']);
?>
Avatar billede bx Nybegynder
26. oktober 2007 - 08:38 #9
Ups.... fik trykket på den forkert knap forkert...

Laver jeg ikke denne instans af klassen i Cart.php i funktionen show_product(), linie 2 ?:

    public function show_product() {
        $db = new db();
        $sql = $db->query("SELECT * FROM products");
        if($sql) {
            while($r = mysql_fetch_array($sql)) {
                $data = $r['SQLdata'];
                return $data;
            }
        }
    }
Avatar billede bx Nybegynder
26. oktober 2007 - 08:44 #10
...Og er det muligt er lave det med mysqli ?
Avatar billede uggi16 Nybegynder
26. oktober 2007 - 14:30 #11
#1 skal alligevel lave en instans af klassen hvis du vil bruge den.. ( kald det sikkerhed for at browseren fatter det :) )

#2 jeg kender minus til MySqLi... :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester