Script verkorten met slimmere scripts?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

18/12/2012 23:37:51
Quote Anchor link
Hoi,

Ik ben al heel wat jaren bezig met PHP, maar ik ben soms erg omslachtig met mijn scripts. Ik vraag me daarom af of jullie slimmere, kortere én snellere oplossingen weten.
Ben erg benieuwd naar jullie reacties!

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
<?php
$Pagina
="";
if(isset($_GET["Pagina"])){
    if($_GET["Pagina"]=="bedrijven"){
        $Pagina.="Bedrijven";
    }
elseif($_GET["Pagina"]=="familie"){
        $Pagina.="Familie";
    }
elseif($_GET["Pagina"]=="kennissen"){
        $Pagina.="Kennissen";
    }
elseif($_GET["Pagina"]=="vrienden"){
        $Pagina.="Vrienden";
    }
elseif($_GET["Pagina"]=="doneren"){
        $Pagina.="Doneren";
    }
elseif($_GET["Pagina"]=="juridisch"){
        $Pagina.="Juridisch";
    }
elseif($_GET["Pagina"]=="downloads"){
        $Pagina.="Downloads";
    }
elseif($_GET["Pagina"]=="perscentrum"){
        $Pagina.="Perscentrum";
    }
elseif($_GET["Pagina"]=="prijzen"){
        $Pagina.="Prijzen";
    }
elseif($_GET["Pagina"]=="socialenetwerken"){
        $Pagina.="Sociale netwerken";
    }
elseif($_GET["Pagina"]=="status"){
        $Pagina.="Status";
    }
else{
        $Pagina.="Overig";
}}
else{
    $Pagina.="Overig";
}

?>

Is een array hier geen mogelijkheid? En hoe moet ik dit doen?

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
<?php if(isset($_GET["Pagina"])){ ?>
    <?php
    if($_GET["Pagina"]=="bedrijven"){
    ?>

    <div class="pagina">
        <h1><img src="<?php echo $base4; ?>Pagina.png" alt="Pagina">Bedrijven</h1>
        <div class="inhoud">
            <p><?php echo $definition6; ?></p>
        </div>
        <div class="handeling">
            <a class="item linksuitlijnen">Nieuw</a>
        </div>
    </div>
    <?php Bookmarks(); ?>
    <?php
    }elseif($_GET["Pagina"]=="familie"){
    ?>

    <div class="pagina">
        <h1><img src="<?php echo $base4; ?>Pagina.png" alt="Pagina">Familie</h1>
        <div class="inhoud">
            <p><?php echo $definition6; ?></p>
        </div>
        <div class="handeling">
            <a class="item linksuitlijnen">Nieuw</a>
        </div>
    </div>
    <?php Bookmarks(); ?>
<?php }} ?>

Kan ik dit niet met een functie doen? Ik heb nu voor iedere pagina een elseif, dat zijn er bijna 10...

Bedankt alvast!
 
PHP hulp

PHP hulp

25/11/2024 16:55:42
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/12/2012 23:50:32
Quote Anchor link
// bijvoorbeeld zo. als je bij Sociale netwerken ze beiden hetzelfde maakt kunnen er nog twee regels vervallen. Je moet consequent zijn met het maken van namen, of allemaal met hoofdletter, of allemaal zonder. etcetera

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$Pagina
='Overig';

if(isset($_GET['Pagina'])){
    $Pagina = ucfirst($GET['Pagina']);
    if($Pagina=="Socialenetwerken")
        $Pagina="Sociale netwerken";
    }

?>


Toevoeging op 18/12/2012 23:57:57:

natuurlijk kan dat tweede gedeelte met een functie. Ik zou willen zeggen dat MOET met een functie. Je gaat toch ook niet tien keer naar de supermarkt om tien artikelen te kopen?
Gewijzigd op 18/12/2012 23:55:08 door Frank Nietbelangrijk
 
Joakim Broden

Joakim Broden

19/12/2012 00:01:11
Quote Anchor link
Zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    $Paginas
= array('bedrijven', 'familie', 'kennissen', 'vrienden', 'doneren', 'juridisch', 'downloads', 'perscentrum', 'prijzen', 'socialenetwerken', 'status');
    
    if (isset($_GET['Pagina']) && in_array($_GET['Pagina'], $Paginas)) {
        $Pagina = ucfirst($_GET['Pagina']);
    }
else {
        $Pagina = 'Overig';
    }

?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/12/2012 00:01:13
Quote Anchor link
// test dit en ZIE het verschil!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$text
= 'auto';
$text = 'band';
echo $text.'<br/>';

$text = 'auto';
$text .= 'band';
echo $text.'<br/>';

?>
 
Ozzie PHP

Ozzie PHP

19/12/2012 00:03:17
Quote Anchor link
Frank, met alle respect maar daar schiet hij weinig mee op.

Mario, je wil korte code hè? Wat dacht je hiervan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$allowed_pages
= array('bedrijven', 'familie'); // zelf de rest even aanvullen
$page = (isset($_GET['pagina']) && in_array($_GET['pagina'], $allowed_pages)) ? $_GET['pagina'] : 'overig';
include $page . '.php';
?>


Kort genoeg? ;)

(Variabelen namen schrijven we doorgaans met kleine letters. Van $_GET['Pagina'] heb ik $_GET['pagina'] gemaakt.)
Gewijzigd op 19/12/2012 00:05:20 door Ozzie PHP
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/12/2012 00:12:10
Quote Anchor link
Hallo Ozzie,

er zijn honderd oplossingen. En Mario wil - neem ik aan - iets leren, dat doet hij het beste door de basis goed onder de knie te krijgen. Ik zet dan ook bewust geen kant en klaar antwoord neer.

Groet,
Frank
Gewijzigd op 19/12/2012 00:12:46 door Frank Nietbelangrijk
 

19/12/2012 00:57:41
Quote Anchor link
Bedankt voor jullie reacties! Ze zijn stuk voor stuk waardevol :)

Toevoeging op 19/12/2012 04:10:50:

Ik heb de methode van @Ozzie PHP nu geïntegreerd, maar op welke manier kan ik nu het beste de paginatitels meegeven? Ik heb het nu zo gedaan, maar dat werkt dus nog niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$Pagina1
=array("gebruiker"=>"Gebruiker","afspraken"=>"Mijn afspraken","eigenschappen"=>"Mijn eigenschappen","fotos"=>"Mijn foto's","gebruikers"=>"Mijn gebruikers","netwerken"=>"Mijn netwerken","videos"=>"Video's","werkervaring"=>"Mijn werkervaring","statistieken"=>"Statistieken");
$GET1=(isset($_GET["pagina"])&&in_array($_GET["pagina"],$Pagina1))?$_GET["pagina"]:"Beveiliger en webontwikkelaar";
echo '<title>'.$definition1.' | '.$GET1.'</title>';
?>


Bedankt alvast!
 
Erwin H

Erwin H

19/12/2012 09:31:21
Quote Anchor link
Een opmerking bij de oplossing van Ozzie: als je op die manier strings gaat vergelijken, zorg dan altijd dat je eerst de string converteert naar een string met alleen kleine letters. 'pagina' en 'Pagina' zijn namelijk voor php niet hetzelfde. Maak je dus ooit ergens een tikfout dan kan het je heeeel veel tijd kosten om die te vinden.
 
Ozzie PHP

Ozzie PHP

19/12/2012 10:10:04
Quote Anchor link
Begin eerst eens met duidelijke namen Mario. Namen als $Pagina1, $GET1, $definition1 zeggen allemaal vrij weinig. Daarnaast, begin variabalen namen met een kleine letter (zoals ik al eerder zei). Dus niet $Pagina1 met een hoofdletter en $GET1 compleet in hoofdletters en $definition1 weer met kleine letters. Zie je hoe slordig dat is? Ook is het gebruikelijk om Engels te gebruiken. Jij doet alles door elkaar Pagina en definition. Zorg dat je consequent bent!

De waarde die je nodig hebt voor de titel kun je makkelijk tevoorschijn halen uit de $_GET variabele.

Ga met bovengenoemde opmerkingen weer eens aan de slag zou ik zeggen!
 
Kris Peeters

Kris Peeters

19/12/2012 10:18:15
Quote Anchor link
Mario Geheim op 19/12/2012 00:57:41:
...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$Pagina1
=array("gebruiker"=>"Gebruiker","afspraken"=>"Mijn afspraken","eigenschappen"=>"Mijn eigenschappen","fotos"=>"Mijn foto's","gebruikers"=>"Mijn gebruikers","netwerken"=>"Mijn netwerken","videos"=>"Video's","werkervaring"=>"Mijn werkervaring","statistieken"=>"Statistieken");
$GET1=(isset($_GET["pagina"])&&in_array($_GET["pagina"],$Pagina1))?$_GET["pagina"]:"Beveiliger en webontwikkelaar";
echo '<title>'.$definition1.' | '.$GET1.'</title>';
?>
...


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
$Paginas
= array(
  "gebruiker"     => "Gebruiker",
  "afspraken"     => "Mijn afspraken",
  "eigenschappen" => "Mijn eigenschappen",
  "fotos"         => "Mijn foto's",
  "gebruikers"    => "Mijn gebruikers",
  "netwerken"     => "Mijn netwerken",
  "videos"        => "Video's",
  "werkervaring"  => "Mijn werkervaring",
  "statistieken"  => "Statistieken",
  "home"          => "Home"
);
// we zoeken de key.  We zoeken 'gebruiker', niet 'Gebruiker'
// array_keys returnt een array van de key's van $paginas; die kunnen we in in_array steken

$key = (isset($_GET["pagina"]) && in_array($_GET["pagina"], array_keys($Paginas))) ? $_GET["pagina"] : 'home';
$titel = $Paginas[$key];
echo '<title>'. $key . ' | ' . $titel .'</title>';
?>


Ik heb een extra 'home' toegevoegd. Dit is de default. Pas aan naar eigen wensen. Als 1 van jouw opties de delault is: zet dan die key aan het einde van lijn 16 i.p.v. 'home'
Gewijzigd op 19/12/2012 10:34:05 door Kris Peeters
 
Dennis WhoCares

Dennis WhoCares

19/12/2012 11:10:52
Quote Anchor link
Waarom geen switch case? Dit vind ikzelf prettiger werken, dan met arrays.
Ik heb altijd problemen met arrays lol
 
- Ariën  -
Beheerder

- Ariën -

19/12/2012 11:19:01
Quote Anchor link
Compacte code is wel leuk, maar het zorgt ook voor onleesbaarheid van de code.
Het beste is dat de code makkelijk aan te passen moet zijn, maar ook niet te complex hoeft. Denk bij een hoop waardes aan gebruik van een array, in plaats van een sloot if-else statements.
 
Kris Peeters

Kris Peeters

19/12/2012 11:31:57
Quote Anchor link
Dennis WhoCares op 19/12/2012 11:10:52:
Waarom geen switch case? Dit vind ikzelf prettiger werken, dan met arrays.
Ik heb altijd problemen met arrays lol


Wat mij betreft, is er niets mis met een switch; dat zou hier perfect op zijn plaats staan.

Laat ons zeggen dat die in_array wel gemakkelijker is, indien die pagina's in een database worden opgeslagen

SELECT key, titel FROM paginas
...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
...
$paginas = array();
while ($row = mysql_fetch_assoc($sql)) {
  $paginas[$row['key']] = $row['titel'];
}

// en vanaf hier kan je verder doen alsof $paginas hard coded stond
?>


Dat je problemen hebt met arrays is dan weer een slechte reden.
 
Dennis WhoCares

Dennis WhoCares

19/12/2012 12:04:50
Quote Anchor link
Kris Peeters op 19/12/2012 11:31:57:
Dat je problemen hebt met arrays is dan weer een slechte reden.


Nou dat komt eigenlijk, omdat ik meestal dan een array in een array wil krijgen,
en dat dynamisch wil toevoegen,aanpassen en verwijderen.
 
Nicky Monsma

Nicky Monsma

19/12/2012 12:54:26
Quote Anchor link
misshien een switch?

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
<?php
if(isset($_GET["Pagina"]))
{

    switch($_GET["Pagina"])
    {
        case
1:
        include 'pagina1.php';
        break;

        case
2:
        include 'pagina2.php';
        break;

        default:

        include '404.php'
        break;
    }

    else
    {
        exit(header('location: pagina1.php'));
    }
}

?>


Toevoeging op 19/12/2012 12:58:27:

of misshien een router?

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
<?php
    class Router
    {
        public $Controller;
        
        public function __Construct()
        {
            
            if(!isset($_GET['page']))
            {

                Core::Location(SITE_PATH . '/?page=index');
            }

            
            $this->Controller = strtolower(Core::GET('page'));
        }

        
        public function InitializeRendering()
        {
            
            if(!file_exists(BASE . '/application/controllers/' . $this->Controller . '.php'))
            {

                $this->Controller = 'error';
            }

            
            require_once(BASE . '/application/controllers/' . $this->Controller . '.php');
            
            $Class = new $this->Controller();
            
            $Class->Render();
        }
    }

?>
Gewijzigd op 19/12/2012 12:56:08 door Nicky Monsma
 
Eddy E

Eddy E

19/12/2012 16:38:39
Quote Anchor link
Ozzie: als het kort moet... doe dan zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$p
= (isset($_GET['pagina']) && is_file($_GET['pagina')) ? $_GET['pagina'] : 'overig';
include($p . '.php');
?>
Gewijzigd op 19/12/2012 16:41:20 door Eddy E
 
Kris Peeters

Kris Peeters

19/12/2012 16:47:45
Quote Anchor link
Zo dan

is_file($_GET['pagina'] . '.php')
Gewijzigd op 19/12/2012 16:52:19 door Kris Peeters
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/12/2012 16:57:05
Quote Anchor link
Dennis WhoCares,

Ik kan me goed voorstellen dat je problemen hebt met array's.
Er zijn dan ook veel mensen die er problemen mee hebben.
Sommige kennen de gebruikelijke arrays uit de oudere programmeertalen zeer goed maar PHP kent ook associatieve arrays, wat voor veel mensen toch weer even wennen is.

Echter, -mijn mening- zijn arrays onontbeerlijk. Dus moet je ze onder de knie krijgen.
In PHP kun je overigens heel makkelijk de complete inhoud van een array op je scherm toveren waardoor het allemaal veel begrijpelijker wordt: print_r($my_array);
Dan even naar de bron van je html pagina kijken en dan zie je het helemaal netjes onder elkaar.


Toevoeging op 19/12/2012 17:04:34:

- Aar - op 19/12/2012 11:19:01:
Compacte code is wel leuk, maar het zorgt ook voor onleesbaarheid van de code.


Aar, ik denk dat het vooral een kwestie is of je code logisch en dus leesbaar is.
Kort is niet hetzelfde als onleesbaar.
Gewijzigd op 19/12/2012 16:58:24 door Frank Nietbelangrijk
 
Ozzie PHP

Ozzie PHP

19/12/2012 17:14:07
Quote Anchor link
Eddy, ik zei niet dat het kort moest. Dat was de vraag van de topic starter. Zoals Kris al aangaf zat er een fout in je code, en daarnaast ontbreekt je controle. Lijkt me dus niet echt geschikt.
 



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.