Beginnende met classes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mario Achternaam

Mario Achternaam

17/07/2015 21:20:39
Quote Anchor link
Goedenavond!

Ik volg sinds een jaar de opleiding Applicatieontwikkelaar, en ben me, voordat ik na de zomervakantie op stage ga, aan het verdiepen in classes e.d. Hier heb ik voorheen nog niet mee gewerkt, en ik weet er dus nog vrij weinig vanaf.
Nu heb ik het onderstaande script gemaakt (gebaseerd op een script dat ik op internet had gevonden), maar nu wil ik een query uitvoeren. Ik heb echter geen idee hoe ik dit kan doen.

Kunnen jullie me een beetje op weg helpen? :)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
class Connection
{
    protected $username;
    protected $password;
    protected $db;
    
    public function __construct($u, $p, $d)
    {

        $this->username = $u;
        $this->password = $p;
        $this->db = $d;
        
        $mysqli = new mysqli('localhost', $this->username, $this->password, $this->db);
        
        if($mysqli->connect_error)
        {

            die('Error: '.$mysqli->connect_error.'');
        }

        if(mysqli_connect_error())
        {

            die('Error: '.mysqli_connect_error().'');
        }

        
        $mysqli->close();
    }
}

$loadDb = new Connection('', '', '');
?>
 
PHP hulp

PHP hulp

26/11/2024 22:52:54
 
Ward van der Put
Moderator

Ward van der Put

17/07/2015 21:36:45
Quote Anchor link
Probeer al lezend vooral te doorzien wat code van anderen of je eigen code precies doet.
Het is soms net tekst verklaren.

Je constructor __construct() is vooral ingericht op het openen van een databaseverbinding met $mysqli = new mysqli(…), maar eindigt met $mysqli->close(). Probeer eerst eens te doorgronden wát hier nu eigenlijk precies gebeurt en waarom dat dus zo nooit gaat werken.
 
Eddy E

Eddy E

17/07/2015 21:41:45
Quote Anchor link
En daarna, als antwoord op je vraag, ga je een functie toevoegen.
Bijvoorbeeld function query($string).
En daarin voer je dat uit.
Als result geef je dan de resultaten van de query (hetzij een array met data, hetzij een true/false) terug.
 
Thomas van den Heuvel

Thomas van den Heuvel

17/07/2015 21:56:22
Quote Anchor link
$username, $password en $db zijn niet interessant om op te slaan, deze heb je enkel nodig bij het maken van een verbinding (wat meestal equivalent is met het aanmaken van een object van de database-klasse).

Een verwijzing naar het object wat geretourneerd wordt door new mysqli(...), wat de connectie met je MySQL database representeert, is daarentegen wel interessant om op te slaan. Hier kun je dan namelijk aan refereren in de rest van je klasse.

En als je dan toch een wrapper schrijft die gebruik maakt van MySQLi en de communnicatie met je database zou moeten vereenvoudigen, zou je nog aan de volgende zaken kunnen/moeten denken:

- extra connectie-parameters: hostname (hiervoor kun je beter een IP-adres gebruiken dan een hostname, dit scheelt je weer een lookup), poort, character encoding (met name dit laatste is ZEER BELANGRIJK)

- een shorthand voor de _real_escape_string() functie of methode (als je niet gaat voor prepared statements, die nogal brak zijn in MySQLi)

- een aparte klasse voor mysqli_result objecten

- het gebruik van exceptions in plaats van die()
 
Marthijn Buijs

Marthijn Buijs

18/07/2015 10:09:35
Quote Anchor link
Dat doet je school wel goed, want vriend van me gaat ook naar 2e van applicatie ontwikkelaar en die heeft allang OOP en Classes gehad. Zeker omdat dit ook handig kan zijn bij C#.
 
Thomas van den Heuvel

Thomas van den Heuvel

18/07/2015 11:53:02
Quote Anchor link
Ik had eerder al wat classes gepost die voor hetzelfde doel worden gebruikt. Deze zijn nog in grote lijnen hetzelfde, al heb ik ondertussen wat kleine dingetjes veranderd ten opzichte van de hier geplaatste variant.

declaratie(s)
voorbeeld van gebruik

Zoals Ward aangaf: het bestuderen van (andermans) code kan op zichzelf al leerzaam zijn.
Gewijzigd op 18/07/2015 11:53:37 door Thomas van den Heuvel
 
Mario Achternaam

Mario Achternaam

18/07/2015 16:01:19
Quote Anchor link
Dankjewel voor jullie reacties!

@Ward: Hele goede tip, niet op gelet. Dankjewel.
@Eddy: Ga ermee aan de slag!
@Thomas Dankjewel :)
@PHP Maarten: Mijn PHP-leraar raakte halverwege het jaar overspannen en stopte tijdelijk (nu nog) met werken. Hierna hebben wij alleen praktijkopdrachten gehad van een vervangende leraar.
 
Mario Achternaam

Mario Achternaam

19/07/2015 22:14:58
Quote Anchor link
Even een update:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
class db
{
    protected $mysqli;
    
    public function __construct()
    {

        $this->mysqli = new mysqli('localhost', '', '', '');
        
        if($this->mysqli->connect_error)
        {

            echo $this->mysqli->connect_error;
        }

        if(mysqli_connect_error())
        {

            echo mysqli_connect_error();
        }
    }

    public function __destruct()
    {

        mysqli_close($this->mysqli);
    }

    public function qr($fields, $col)
    {

        $array = '';
        $i = 0;
        
        foreach($fields as $each)
        {
            ++
$i;
            if($i == count($fields)){
                $array .= $each;
            }

            else
            {
                $array .= $each.', ';
            }
        }

        
        $qr = mysqli_query($this->mysqli, 'SELECT '.$array.' FROM '.$col.'');
        if($qr)
        {

            echo '<table>
            <tr>'
;
            while($row = mysqli_fetch_assoc($qr))
            {

                foreach($row as $colmn => $val)
                {

                    echo '<td>'.$val.'</td>';
                }
            }

            echo '</tr>
            </table>'
;
        }

        else
        {
            echo 'Error';
        }
    }
}


$db = new db;
echo $db->qr(array('id', 'name', 'email'), '');
?>


Dit is tot nu toe het resultaat, en het werkt. Tips zijn alsnog welkom!
 
Eddy E

Eddy E

20/07/2015 07:07:46
Quote Anchor link
Uit welke tabel komt de informatie?
Want die geef je niet eens op.
Daarbij gebruik je $col (van $column?) voor je tabel (wat dus geen kolom is!).

Ik kan me niet voorstellen dat bovenstaande code, zoals hierboven weergegeven, het doet.
Daarnaast doorloop je $fields (welke een array is) om hetzelfde te doen als implode(", ", $fields).
Dat kan dus efficienter.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.