[PHP] truucjes met $$varvars

Pagina: 1
Acties:

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
hehe ik snap nu eindelijk die $$varvar bende van PHP. Ik dacht misschien is het wel leuk als mensen hier hun truucjes met $$varvars posten. En misschien is een discussie omtrent de 'ranzigheid' hiervan wel op z'n plaats :).

hier mijn bijdrage, truucjes om <SELECT> en/of <INPUT TYPE="radio"> velden op de juiste waarde te krijgen, vanuit bijvoorbeeld een uit de database verkregen waarde. ik weet het kan ook anders maar dit, hoe zogenaamd dirty ook, ziet er wel clean uit vinnik:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    // dit is de waarde die uit de db komt:
    $mijnvar = "waarde_2";

    // dit zijn je options, bijvoorbeeld verkregen uit een ENUM veld uit je database 
    // waarde is je echte db waarde, caption is wat de user leest in de treklijst
    $options = array("waarde_1" => "caption_1", "waarde_2" => "caption_2", "waarde_3" => "caption_3");
    
    // dit is de truuc: hier staat eigenlijk : $waarde_2 = "selected";
    $$mijnvar= "selected";
    
    // dit is het select ding voor je variabele (btw ook handig dat deze truuc ook voor de naam van dit ding 
    // is te gebruiken om dynamisch dit soort sjaken in elkaar te fietsen in een formgenerator) 
    echo "<SELECT NAME='mijnvar'>";
    
    // opties doorfietsen
    while(list($value, $caption) = each($options))
    {
        // en dan huuc huuc barbatruuc: alleen voor $value = waarde_2 bestaat er een variabele die zo heet en 
        // "selected" is.
        echo "<OPTION VALUE='".$value."' ".$$value.">".$caption."</OPTION>";
    }
     
    echo "</SELECT>";


en nog eentje om om het af te leren met een $$$varvarvar:

PHP:
1
2
3
$maskvar = "mask_".$objname."_".$attname; 
$aAttribute  = MB_DB_GetObject($aChild['id']);
if(isset($$maskvar)) $$$maskvar= "checked"; else $$aAttribute['lid']['mask'] = "checked";

Verwijderd

dit soort dingen vind ik persoonlijk altijd heel 'ranzig'. In heel veel gevallen kun je met (associative) arrays dit soort gevallen ook oplossen. Code zal er dan ook een heel stuk leesbaarder en begrijpelijker uitzien, niet alleen voor jezelf, maar ook voor anderen.

Het enige waar ik dit soort constructie gebruik, is bij een parsetime functie van mij, omdat ik soms niet alleen de tijd wil weten hoe lang php over de hele pagina gedaan heeft, maar ook wel eens over een bepaalde stukje code en ik wil dan de mogelijkheid hebben om dit mbv een aparte variable te doen. Maar verder vind ik dit dus ranzig :Y)

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
// Deze oplossing zie ik vaak bij programmeurs die hun script met registered globals hebben geprogrammeerd.

foreach($_GET as $key => $value)
  $$key = $value;

foreach($_POST as $key => $value)
  $$key = $value;

// Dat kan natuurlijk echt niet.

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ja tis ranzig, maar voor die "checked" en "selected" dingen vinnik het helemaal niet zo ranzig, het alternatief kost je een zootje extra if's.
// Dat kan natuurlijk echt niet.
Waarom niet? Erg handig om ouwe code op te lappen voor nieuwe servers

Verwijderd

Genoil schreef op 20 september 2002 @ 10:19:
Waarom niet? Erg handig om ouwe code op te lappen voor nieuwe servers
Het zit er niet voor niets in. Ik heb een tijd geleden alle private posts uit de crew forum weten te vissen bij OBB :). En dat alleen maar door een beetje zitten vissen met GET variabelen. Natuurlijk kan je als je alles goed hebt geprogrammeerd dit wel doen, maar één foutje kan soms al flinke gevolgen hebben.

Ik denk dat er niet veel Tweakers zijn die dit wel een goede oplossing vinden.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

In zo'n geval gebruik ik liever de nog steeds wat ranzige, maar neit zo ranzig als die van jou manier:

PHP:
1
2
echo "<option value=\"".$val."\"".($val==$fromdb?" selected":"").">";
echo $caption."</option>";

[ Voor 0% gewijzigd door Janoz op 20-09-2002 10:53 . Reden: ff opgesplitst in 2 regels ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

Genoil schreef op 20 september 2002 @ 10:19:
ja tis ranzig, maar voor die "checked" en "selected" dingen vinnik het helemaal niet zo ranzig, het alternatief kost je een zootje extra if's.


[...]


Waarom niet? Erg handig om ouwe code op te lappen voor nieuwe servers

wat dacht je van import_request_variables ('gp'); ?

Klaar voor een nieuwe uitdaging.


  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Ik gebruikte ooit dit, vond het een toen een goede oplossing en
postte het zelfs hier }:O :
If, for some reason you need to declare a dynamic variable global, say $usertype1, $usertype2 etc...
do it like this:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$i=1; 
$ready=#number of generated variables# 
while ($i < $ready) { 

$var="usertype$i"; // of de variabele naam uit je form
global $$var; // Het meest ranzige stuk dus

###do the action with the var, for example:## 
echo $$var; 
$i++; 
}
Maar na het lezen van dit hoofdstuk, heb register_globals uitgezet en een 'inkomende variabelen'-class geschreven om elke $_GET en $_POST te checken alvorens er dingen mee te gaan doen. Ik denk dat door zelf _eerst_ elke inkomende variabele te goed te checken er verder niet zoveel mis is met het gebruiken van $$.

Echter, voor de leesbaarheid en efficientie verdient het imho aanbeveling om gewoon arrays te gebruiken voor dit soort dingen.

Sundown Circus


Verwijderd

Leuk die variabele variabelen, maar volgens mij kan je het altijd anders oplossen.
Als je een verzameling checkboxjes hebt dan post je de value toch gewoon in een array...

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Janoz schreef op 20 september 2002 @ 10:50:
In zo'n geval gebruik ik liever de nog steeds wat ranzige, maar neit zo ranzig als die van jou manier:

PHP:
1
2
echo "<option value=\"".$val."\"".($val==$fromdb?" selected":"").">";
echo $caption."</option>";
oh da's ook wel mooi ja. maar is de ranzige $$ manier is niet net een tikkie efficienter? niet dat het echt zoveel zal uitmaken, maar gewoon voor de 'sport'..

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Genoil schreef op 20 september 2002 @ 12:42:
[...]


oh da's ook wel mooi ja. maar is de ranzige $$ manier is niet net een tikkie efficienter? niet dat het echt zoveel zal uitmaken, maar gewoon voor de 'sport'..


Neu, dat denk ik niet. Als het al verschil zou maken is dat verschil gewoon micromaal :).. Daarnaast komt mijn manier wel zonder warnings door E_ALL en de $$ denk ik niet zomaar..

Daarnaast is de $$ methode erg gevoelig voor lekken.. Stel dat ik op 1 of andere manier $blaat == db_password voor elkaar kan krijgen en verderop iets als echo $$blaat wordt gebruikt?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1