feb
27
Írta: Tupacko, 2008-02-27, (Blogolok, PHP, Web)

Hosszabb kimaradás után ismét van egy kevés időm, amikor a WebPillangóval is tudok foglalkozni. Sajnálom, a kissebb-nagyobb szüneteket, nem szánédkosak. A bejegyzés azért született, mert ismét azon találtam magam, hogy dinamikusan ki kell cseréljek egy vagy több változót a _GET szuperglobális tömbben. A mellékelt függvény kicseréli és kiírja a kívánt eredményt. Az első paraméterben azt adjuk meg, hogy melyik változót szeretnénk cserélni a második paraméter értékére. Mindkét bemeneti változó lehet karakterlánc, de az első mindenképpen az kell legyen. Amennyiben az első paraméter üres, a függvény listázza a formázott modosítatlan _GET tömböt. Ha nem létezik a helyettesítésre szoruló változó, akkor azt a _GET tömb utolsó elemeként beszúrja a függvény a paraméterként átadott értékkel.

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
function parseGETintoString($variable, $newValue){
  if ( empty($_GET) ) return; // ha nincsenek elemei a _GETnek, nem fut tovább a függvény
 
  $isFirstVar = true; // segédváltozó
  $wasChanged = false; // segédváltozó
 
  foreach( $_GET as $var => $varVal){
    if ($isFirstVar){ // csatolási operátor teszt
      echo "?";
      $isFirstVar = false;
    }else{
      echo "&amp;";
    }
 
    echo $var."=";
 
    if ( strcmp($var, $variable) == 0 ){ // cserélésre szoruló változó teszt
      echo $newValue;
      $wasChanged = true;
    }else{
      echo $varVal;
    }
  }
 
  if ( !empty($variable) && !$wasChanged  ){ // ha a változó nem szerepel, de meg van határozva
    echo "&amp;".$variable."=".$newValue;
  }
}
?>

Köszönöm BlackYnek a második változatot:

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
< ?php
  function parseGETintostring(Array $newData, $fullUrl = false) {
    static $urlParts = array();
 
    if(!$urlParts) {
      $urlParts = parse_url($_SERVER['REQUEST_URI']);
    }
 
    $params = array_merge($_GET, $newData);
    $string = '';
 
    foreach($params as $field => $value) {
      $string .= $field . '=' . htmlentities(urlencode($value));
      $string .= "&amp;";
    }
 
    $string = '?' . substr($string, 0, strlen($string) - 5); /* Levágjuk a végérol az utolsó &amp;-ot */
 
    if($fullUrl) {
      return $urlParts['path'] . $string;
    } else {
      return $string;
    }
  }
?>
Ezek az ikonok ún. közösségi könyvjelző oldalakra mutatnak, ahol meg lehet osztani másokkal is amit fontosnak találsz.
  • Book.mark.hu
  • blogtercimlap
  • Linkter
  • Digg
  • del.icio.us
  • NewsVine
  • Furl
  • blogmarks
  • Reddit
  • Spurl
  • Technorati
  • YahooMyWeb
(1 szavazat)
Loading ... Loading ...



Hozzaszólások:
7 hozzaszólás a "parseGETintoString PHP függvény" bejegyzéshez.
BlackY, weboldala, 2008. február 27., 22:16

Szvsz. jobb lenne, ha stringet adna vissza a közvetlen kiírás helyett. Továbbá ha inkább tömb paramétert várna (így aztán a végleges tömböt egy sima array_merge($_GET, $ujtomb)-el állíthazná elő…). Általánosabb célú lenne.

BlackY


Tupacko, weboldala, 2008. február 27., 23:43

Teljesen egyet értek veled. Hogy ne kiírja, hanem egy karakterláncként visszaadja az eredményt, csupán egy parányi átalakítást igényel. Arra, hogy tömbök legyenek a bemenetek valójában gondoltam, de mivel én ezt a kódot használtam és időm sem igen akadt átírni (a kommenteket leszámítva), nem valósult meg az ötlet. Az array_merge() nem jutott eszembe :)
Ha esetleg van időd/kedved megírni az elképzelt kódot, szívesen látnám az oldalon :)


skera, weboldala, 2008. február 28., 12:25

A 2. kód nem jó.
Kipróbáltam erre a tömbre:
$a = array(”egy”=>”1″,”ketto”=>”2″,”otvenegy”=>”51″);

/tupacko.php?egy=1&ketto=2&otveneg

Ezt a részt:
$string = ‘?’ . substr($string, 0, strlen($string) - 5);

Átírnám erre:

$string = ‘?’ . substr($string, 0, -1);

És már megy is rendesen :)


BlackY, weboldala, 2008. február 28., 14:11

Jó volt az eredetileg is, csak a wordpress csúnya, gonosz és buta :) és az _andjel_amp; szöveget kicserélte _andjel_-re. (És mivel úgy szabványos, ne a substr-inget paraméterezd át, inkább a $string .= ‘_andjel_’; sort javítsd $string .= ‘_andjel_amp;’; -ra.

BlackY


Tupacko, weboldala, 2008. február 28., 15:15

Kijavítottam, nem vettem észre, hogy átcserlélte &-re(inkább az aposztrófokkal volt gondja … első módosításkor rengeteg kérdőjel jelent meg helyette).


Logan, weboldala, 2008. március 1., 12:15

És tulajdonképpen ez a script mire is jó? Azt értem mit csinál..De mikor hasznos?


Tupacko, weboldala, 2008. március 1., 22:22

Vannak esetek, hogy megakarsz valtoztatni egy erteket a _GET tombben, pl. oldallapozaskor, de dinamikusan kell tenned azt, mert pl. egy form gettel kuldi le az ertekeket es azok nem szabad elvesszenek lapozaskor.


Szólj hozza!

Név: 
Email: 
Weboldal *
Hozzaszólás: 
*Nem kötelező megadni, ha nincs weboldalad, akkor hagyd üresen!