Kan dit misschien anders? Dit is mijn oplossing.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Arno van Zanten

Arno van Zanten

30/04/2023 03:20:25
Quote Anchor link
Ik ben met een externe menu banner bezig, waar alle info die ik nodig vind in een apparte page weg te zetten, zodat als het nodig is, om deze gelijk daar aan te passen.
Maar ik moest iets vinden om in het menu, bepaalde waardes te krijgen. Nu kon ik het wel op de page gaan doen, maar dat was niet wat ik zocht.
Echter door zelf te experimenteren, kwam ik na uren proberen, op dit uit.
Nu vraag ik me af of hier een beter code voor is?
Kan het misschien simpeler?
Of heb ik het op deze manier goed opgelost?

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
<?php
        // Required databases (In the new version of the site, this will be used better)//
        $query100    = 'SELECT * FROM Services';
        $result100    = mysqli_query($connect, $query100);        
        $data100    = mysqli_fetch_all($result100, MYSQLI_ASSOC);

        $query200    = 'SELECT * FROM pricelist WHERE User_ID='.$_SESSION['ID'].'';
        $result200    = mysqli_query($connect, $query200);
        $data200    = mysqli_fetch_all($result200, MYSQLI_ASSOC);
        
        $query300    = 'SELECT * FROM UserServices WHERE User_ID='.$_SESSION['ID'].'';
        $result300    = mysqli_query($connect, $query300);        
        $data300    = mysqli_fetch_all($result300, MYSQLI_ASSOC);
        
        $dbase100    = array_column($data100 , 'ID' , 'Services');
        $dbase200    = array_column($data200 , 'User_ID' , 'Services_ID');
        $dbase300    = array_column($data300 , 'User_ID' , 'Services_ID');

    // check listing pricing //
    $diff_price = array_diff($dbase300, $dbase200); // 2 Databases where all the needed info is.
    $count = 0; // Counter, you will see what i did with it.
    foreach($diff_price as $Services_diff => $Pricing_diff) {
        $count++;
        $price_diff = $Pricing_diff; $PService_diff = $Services_diff; // The differnces what are needed.
        foreach($dbase100 as $Services => $ID) {
            if($PService_diff == $ID) {
                $query    = 'SELECT Services FROM Services WHERE Services ="'.$Services.'"'; // Get the info what I was looking for.
                $result    = mysqli_query($connect, $query);
                while ($row = mysqli_fetch_object($result)) {
                    $found[$count] = $row->Services; // Make a fix value.
                }
            }
        }
    }

    // The fix values from above.
    if(empty($found[4])){$found_d = '';}else{$found_d = "<a href='index.php?menu=prices&action=adding&services=".$found[4]."'>".$found[4]."</a>";}
    if(empty($found[3])){$found_c = '';}else{$found_c = "<a href='index.php?menu=prices&action=adding&services=".$found[3]."'>".$found[3]."</a>";}
    if(empty($found[2])){$found_b = '';}else{$found_b = "<a href='index.php?menu=prices&action=adding&services=".$found[2]."'>".$found[2]."</a>";}
    if(empty($found[1])){$found_a = '';}else{$found_a = "<a href='index.php?menu=prices&action=adding&services=".$found[1]."'>".$found[1]."</a>";}
    // Info for in the banner where it is needed to be
    $showmenu = $found_a .'&nbsp;'. $found_b .'&nbsp;'. $found_c .'&nbsp;'. $found_d;
    // Optional menu banner //
    $Welcome_msg    = nl2br("Welcome on this page and take good care of the options you have.\n Read always very carefull before you fill in, there are options to change, but better do it at once right. \n Good luck and have fun here.", ENT_QUOTES);
    $Mdefault         = htmlspecialchars("Optional menu item", ENT_QUOTES);
    $Mmyservices     = "<a href='index.php?menu=services'>My Services</a> | <a href='index.php?menu=options'>My Options</a>";
    $Mservices         = "My Services | <a href='index.php?menu=options'>My Options</a>";
    $Moptions         = "<a href='index.php?menu=services'>My Services</a> | My Options";
    $Mpricing         = "Don`t forget the add prices for these :".$showmenu."&nbsp;";
?>


Graag opbouwende kretiek graag en misschien tips waar ik moet kijken.
Welke functie misschien dat doet wat ik wil.
 
PHP hulp

PHP hulp

23/04/2024 20:29:23
 
Jan R

Jan R

30/04/2023 09:48:13
Quote Anchor link
Er is toch all veel opgemerkt om te stoppen met "SELECT * FROM". Gebruik je veldnamen! Dan heb je vermoedelijk ook array_column niet meer nodig en je belast de server een pak minder.
 
- Ariën  -
Beheerder

- Ariën -

30/04/2023 10:20:13
Quote Anchor link
En natuurlijk die foreaches()? Waarom gebruik je eigenlijk steevast foreach i.p.v. while()?

En benoem de variabelen gewoon met wat ze doen. Gebruik geen cryptische namen als $dbase100 etc.

Ook ben ik benieuwd welke tutorial je gebruikt, want dit voelt alsof je eentje gebruikt die PHP 4 uit 2000 beschrijft?(!!!!)
Gewijzigd op 30/04/2023 10:21:10 door - Ariën -
 
Arno van Zanten

Arno van Zanten

01/05/2023 15:07:30
Quote Anchor link
@JAn R,
Kijk daar heb ik mijn reden voor, dadelijk komt alles in 1 page met de queries.
Dan hoef ik die per page niet meer in te laden.
Daarom de SELECT * FROM.
De array_column heb ik voor dit script nodig, zoals je ziet heb ik 2 specifieke fields nodig.

@Arien,
De foreach extract data uit de array_column, dat kan met een while niet.
En ik zoek naar verschillen, die ik nodig heb.

En bij deze heb ik geen tutorial gebruikt, want die kon ik niet vinden in wat ik nodig had.
Dit is totaal van "Scratch" geschreven.
Deze post was meer van jongens, wat ik hier doe, kan dat misschien beter of simpeler, vroeg ook om opbouwende kritiek.
Het ging om dit gedeelte :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
if(empty($found[4])){$found_d = '';}else{$found_d = "<a href='index.php?menu=prices&action=adding&services=".$found[4]."'>".$found[4]."</a>";}
    if(empty($found[3])){$found_c = '';}else{$found_c = "<a href='index.php?menu=prices&action=adding&services=".$found[3]."'>".$found[3]."</a>";}
    if(empty($found[2])){$found_b = '';}else{$found_b = "<a href='index.php?menu=prices&action=adding&services=".$found[2]."'>".$found[2]."</a>";}
    if(empty($found[1])){$found_a = '';}else{$found_a = "<a href='index.php?menu=prices&action=adding&services=".$found[1]."'>".$found[1]."</a>";}

Met het boven staande stukje code.
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
$diff_price = array_diff($dbase300, $dbase200); // 2 Databases where all the needed info is.
    $count = 0; // Counter, you will see what i did with it.
    foreach($diff_price as $Services_diff => $Pricing_diff) {
        $count++;
        $price_diff = $Pricing_diff; $PService_diff = $Services_diff; // The differnces what are needed.
        foreach($dbase100 as $Services => $ID) {
            if($PService_diff == $ID) {
                $query    = 'SELECT Services FROM Services WHERE Services ="'.$Services.'"'; // Get the info what I was looking for.
                $result    = mysqli_query($connect, $query);
                while ($row = mysqli_fetch_object($result)) {
                    $found[$count] = $row->Services; // Make a fix value.
                }
            }
        }
    }

Hier ging het mij om! Niet om een kannonen vuur met waroom en hoezo etc...
 
- Ariën  -
Beheerder

- Ariën -

01/05/2023 15:15:32
Quote Anchor link
Je kan volgens mij in deze situatie ook prima een while gebruiken voor de data uit je database.
 
Arno van Zanten

Arno van Zanten

01/05/2023 15:55:14
Quote Anchor link
@arien, dat ga ik proberen in een test ;)

En door failures en proberen, ben ik nu met een sectie bezig waar ik eerst de CSS eerst doe eer ik aan het script ga beginnen. Ook daar ga ik stap voor stap mee aan de slag.
De layouts die ik per sectie maak, zien er steeds beter uit.
Ook zoe ik een betere oplossing voor het inladen van de CSS, nu wordt voor elke sectie een losse CSS aangemaakt en deze ook apart ingeladen.
Waardoor ik teveel if statements heb, hier ben ik nog mee bezig om te kijken hoe ik het in de toekomst beter kan doen met de vernieuwingen die ik al in gedachte heb.
Misschien een losse php aanmaken met daarin de "losse" CSS of naar de database, maar alles in de database lijkt me overkill.
Gewijzigd op 01/05/2023 16:00:45 door Arno van Zanten
 
- Ariën  -
Beheerder

- Ariën -

01/05/2023 18:01:53
Quote Anchor link
Waarom maak je per sectie een losse CSS aan? Wat is er mis met een grote CSS?

Om even terug te komen op je queries:
Met query's moet je spaarzaam omgaan. De reden mag hopelijk al wel duidelijk zijn, maar als je de boel herschrijft naar de OO-variant (Object-Oriënted) van MySQLi dan kan je een class bouwen die de bestaande MySQL class uitbreidt. Super handig, en ook meteen handig om fouten op te vangen als een query faalt.

Zo heb ik dit:

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
<?php
class Database extends mysqli {
    
    var
$totalQueries = 0;
        
    function
query($query,$resultmode = NULL)
    {

        $result = parent::query($query);
    $this->totalQueries = $this->totalQueries+1;
        if($this->error) {
            throw new Exception(mysqli_error($this), mysqli_errno($this));
        }

        return $result;
    }
    
    function
totalQueries(){
    $this->totalQueries = $totalQueries+1;
    return $this->totalQueries;
    }
}

?>

Hiermee kan je ook eenvoudig queries tellen:

En ik roep het als volgt aan:
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
<?php
include BASE_PATH . "/inc/database.inc.php";
$db = new Database(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$db->set_charset("utf8");

if ($db->connect_errno) {
    throw new Exception('Database error:' . $db->connect_error);
}


// uitvoer van een query
$db->query("SELECT iets FROM tabel WHERE iets='dat'");

// aantal queries tellen:
echo "Er zijn nu: ".$db->totalQueries." queries uitgevoerd bij het uitvoeren van je site.";

?>
Gewijzigd op 01/05/2023 20:18:44 door - Ariën -
 
Arno van Zanten

Arno van Zanten

02/05/2023 00:06:28
Quote Anchor link
- Ariën - op 01/05/2023 18:01:53:
Waarom maak je per sectie een losse CSS aan? Wat is er mis met een grote CSS?


Aangezien elke sectie iets anders uit ziet en dat ik anders veel zoek werk heb.
Als ik alles zou samenvoegen, kom ik op ongeveer 1000 regels aan CSS.
Dus om alles sneller te vinden, kleinere CSS`en en ik heb wel altijd een defautl die ingeladen is, want die regelt de standaard layout.

- Ariën - op 01/05/2023 18:01:53:
Om even terug te komen op je queries:
Met query's moet je spaarzaam omgaan. De reden mag hopelijk al wel duidelijk zijn, maar als je de boel herschrijft naar de OO-variant (Object-Oriënted) van MySQLi dan kan je een class bouwen die de bestaande MySQL class uitbreidt. Super handig, en ook meteen handig om fouten op te vangen als een query faalt.

Zo heb ik dit:

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
<?php
class Database extends mysqli {
    
    var
$totalQueries = 0;
        
    function
query($query,$resultmode = NULL)
    {

        $result = parent::query($query);
    $this->totalQueries = $this->totalQueries+1;
        if($this->error) {
            throw new Exception(mysqli_error($this), mysqli_errno($this));
        }

        return $result;
    }
    
    function
totalQueries(){
    $this->totalQueries = $totalQueries+1;
    return $this->totalQueries;
    }
}

?>

Hiermee kan je ook eenvoudig queries tellen:

En ik roep het als volgt aan:
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
<?php
include BASE_PATH . "/inc/database.inc.php";
$db = new Database(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$db->set_charset("utf8");

if ($db->connect_errno) {
    throw new Exception('Database error:' . $db->connect_error);
}


// uitvoer van een query
$db->query("SELECT iets FROM tabel WHERE iets='dat'");

// aantal queries tellen:
echo "Er zijn nu: ".$db->totalQueries." queries uitgevoerd bij het uitvoeren van je site.";

?>

[/quote]

Dit zal ik zeker als notie noteren en eens goed kijken hoe dat precies werkt.
 
- Ariën  -
Beheerder

- Ariën -

02/05/2023 01:41:47
Quote Anchor link
Arno van Zanten op 02/05/2023 00:06:28:
- Ariën - op 01/05/2023 18:01:53:
Waarom maak je per sectie een losse CSS aan? Wat is er mis met een grote CSS?


Aangezien elke sectie iets anders uit ziet en dat ik anders veel zoek werk heb.
Als ik alles zou samenvoegen, kom ik op ongeveer 1000 regels aan CSS.
Dus om alles sneller te vinden, kleinere CSS`en en ik heb wel altijd een defautl die ingeladen is, want die regelt de standaard layout.

Als je het goed indeelt, dan kan je alles wel vinden.
Je moet wel goede logica erin brengen.
 



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.