Avatar billede delphiuser Mester
21. juni 2016 - 18:30 Der er 4 kommentarer og
1 løsning

hjælp til classes programmering

Hej eksperter

Jeg sidder og roder med at skrive et php system i class. Det er et lille og ganske simpelt et. Men det med at skrive alting i classes og structurere det på den måde er ganske nyt for mig.

jeg har lavet en bootstrap.php fil som ser sådan her ud.

<?php

class Bootstrap {

    public function __construct() {
        $url = 'page';
        if(!isset($_GET[$url])) {
            $this->view('home/index');
        } else {
            switch($_GET[$url]) {
                case "search":
                    $this->view('home/search');
                    break;
            }
        }
    }

    public function view($name) {
        $file = 'views/'.$name.'.php';
        if(file_exists($file)) {
            require 'views/header.php';
            require $file;
            require 'views/footer.php';
        } else {
            $this->error();
        }
    }

    public function error() {
        require 'views/header.php';
        require 'views/error/404.php';
        require 'views/footer.php';
        return false;
    }
}

den virker faktisk fint nok. så det er ikke den som er problemet.
jeg har i min header fil et søge felt hvor man skal kunne skrive et navn. trykke på søg og den søger efter personen i databasen.

min header.php ser således ud.

<link rel="stylesheet" type="text/css" href="<?php echo ROOT . DS . CSS;?>default.css">
<header>
    <div class="header">
        <h1>Hansen's Kontakter</h1>
    </div>
</header>
<nav>
    <div class="nav">
        <ul>
            <li><a href="index.php">Forside</a></li>
            <li><a href="#">Kategorier</a></li>
            <li><a href="#">Alle Kontakter</a></li>
            <li><a href="#">Admin</a></li>
        </ul>
        <form action="index.php?page=search" method="post">
            <input type="text" name="seek" placeholder="S&oslash;geord">
            <input type="submit" name="search" value="S&oslash;g" id="btn">
        </form>
    </div>
   
</nav>
<section>
    <div class="section">

Når jeg nu trykker på søg. skal den åbne index.php?page=search. hvor den så behandler forspørgelsen sender den videre for så at skulle komme tilbage med resultatet.
Det er i denne process jeg tror jeg har kikset big time men ved bare ikke hvor og hvordan.

her kommer min search.php
<?php
if(isset($_POST['search'])) {
    $seek = $_POST['seek'];
    require ROOT . DS .'controllers/contacts.php';
    find_contact($seek);
}
den sender min forspørgelse videre til min contact classe hvor den skal udføre denne del at showet.

contacts.php kommer her
<?php

class Contacts extends DB {

    public function find_contact($seek) {
        $q = $seek;
        echo 'Du har s&oslash;gt p&aring;: <i><b>'.$q.'</b></i>';
        $this->search($q);
    }
}
det er så her hvor jeg skulle køre den igennem mysqli. i min db classe fil.
db.class.php kommer så her.

<?php

class DB {

    protected $dbhost = 'localhost';
    protected $dbuser = 'test';
    protected $dbpass = '1234';
    protected $dbname = 'test';
    protected $conn = '';

    public function __construct() {
        $conn = mysqli_connect($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname);
        if(mysqli_connect_errno()) {
            die('Connection failed : <i>' . mysqli_connect_error($this->conn) . '</i>');
            exit;
        }
        $this->conn = $conn;
    }

    public function search($q) {
        $search = '%'.$q.'%';
        $stmt = $this->conn->prepare("select firstname, middlename, lastname, phone, email from contacts where firstname = ?");
        if($stmt) {
            mysqli_stmt_bind_param($stmt, 's', $search);
            mysqli_stmt_execute($stmt);
            mysqli_stmt_bind_result($stmt, $firstname, $middlename, $lastname, $phone, $email);
            while(mysqli_stmt_fetch($stmt)) {
                $fullname = $fisrtname.' '.$middlename.' '.$lastname;
                echo '
                <span class="info">'.$fullname.'</span>
                <span class="info">'.$phone.'</span>
                <span class="info">'.$email.'</span>
                ';
            }
        }
    }

}
igen jeg får nogle fejl som jeg ikke fatter en meter af. mine fejl beskeder er følgende

Warning: require(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in C:\wamp64\www\contacts\views\home\search.php on line 4

Warning: require(http://contacts\controllers/contacts.php): failed to open stream: no suitable wrapper could be found in C:\wamp64\www\contacts\views\home\search.php on line 4

Fatal error: require(): Failed opening required 'http://contacts\controllers/contacts.php' (include_path='.;C:\php\pear') in C:\wamp64\www\contacts\views\home\search.php on line 4

igen jeg er ny i denne måde at skrive php på og har ikke styr på det med classes men man lære kun ved at prøve sig frem og det har jeg gjort og nu har jeg brug for hjælp til at komme videre med mit lille projekt.

på forhånd tak for hjælpen...
Avatar billede delphiuser Mester
21. juni 2016 - 18:39 #1
ok jeg har nu lige fået minimeret mine problemer til et enkelt problem sådan her nu.

jeg får denne dejl nu.

Fatal error: Cannot redeclare class Contacts in C:\wamp64\www\contacts\controllers\contacts.php on line 13

det er i dette script her.

<?php

class Contacts extends DB {

    public  function __construct() {
        parent::__construct();
    }
    public function find_contact($seek) {
        $q = $seek;
        echo 'Du har s&oslash;gt p&aring;: <i><b>'.$q.'</b></i>';
        $this->search($q);
    }
}
Avatar billede delphiuser Mester
21. juni 2016 - 18:50 #2
nu få jeg så lige pludselig denne fejl efter jeg har siddet og rodet lidt mere med det.

Fatal error: Call to undefined function find_contact() in C:\wamp64\www\contacts\views\home\search.php on line 6

koden ser sådan her ud.

<?php
if(isset($_POST['search'])) {
    $seek = $_POST['seek'];
    echo 'Du har s&oslash;gt p&aring;: <i><b>'.$seek.'</b></i>';
    require 'controllers/contacts.php';
    find_contact($seek);
}
Avatar billede olsensweb.dk Ekspert
21. juni 2016 - 19:12 #3
>Fatal error: Cannot redeclare class Contacts in
du har classen aktiv flere gange.

løsningen er _once
require ROOT . DS .'controllers/contacts.php';
skal være
require_once ROOT . DS .'controllers/contacts.php';

require_once 'controllers/contacts.php';


#2
>Fatal error: Call to undefined function find_contact() in
er find_contact() en fri function eller inkapslet i en class ??
hvis den er indkapslet mangler du referancen til klassen

nok noget ala
$contact = new Contacts();
$contact->find_contact();
Avatar billede delphiuser Mester
21. juni 2016 - 19:20 #4
ja det kan jeg godt se. nu virker det. tusind tak for din hjælp endnu engang.
jeg vender sikkert frygteligt tilbage igen.
Avatar billede arne_v Ekspert
22. juni 2016 - 02:56 #5
Et par blandede kommentarer:

1) Du blander objekt orienteret og procedural ved at tilgaa connection objectorienteret men tilgaa statement proceduralt

2) Output af HTML hoerer naeppe hjemme i en DB klasse. Lad search returnere et array af instanser af en domain klasse og lad noget andet kode outputte HTML udfra det.
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