Script verkorten met slimmere scripts?
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)
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
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";
}
?>
$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)
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
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 }} ?>
<?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!
Code (php)
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
Code (php)
1
2
3
4
5
6
7
8
9
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';
}
?>
$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';
}
?>
Mario, je wil korte code hè? Wat dacht je hiervan.
Code (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
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
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)
1
2
3
4
5
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>';
?>
$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!
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.
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!
Mario Geheim op 19/12/2012 00:57:41:
...
...
Code (php)
1
2
3
4
5
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>';
?>
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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>';
?>
$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
Ik heb altijd problemen met arrays lol
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.
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
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)
1
2
3
4
5
6
7
8
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
?>
...
$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.
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.
Code (php)
Toevoeging op 19/12/2012 12:58:27:
of misshien een router?
Code (php)
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
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();
}
}
?>
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
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
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.