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
parseGETintoString PHP függvény
Írta: Tupacko | 2008. február 27. | kategóriák: Blogolok, PHP, WebHosszabb 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 "&"; } 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 "&".$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 .= "&"; } $string = '?' . substr($string, 0, strlen($string) - 5); /* Levágjuk a végérol az utolsó &-ot */ if($fullUrl) { return $urlParts['path'] . $string; } else { return $string; } } ?> |
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
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
Ezt a kódot használom, oldalváltó/lapozó linkek generálásához, egy vendégkönyvben.
Nálam az a hiba jelentkezik ha esetleg valaki átírja a címsorban szereplő értéket mondjuk erre( hülye júzer mért ne tenné?):
http://localhost/vendegkonyv.php?cmd=list&page=http://
Ezt a hibaüzenetet generálja:
Warning: parse_url(/vendegkonyv.php?cmd=list&page=http://) [function.parse-url]: Unable to parse URL in C:\Program Files\EasyPHP 2.0b1\www\HOHH.org\inc\functions.php on line 49
Valószínűsítem hogy ezzel a sorral van a gondja:
$urlParts = parse_url($_SERVER['REQUEST_URI']);
A probléma megoldásán gondolkozom, addigis gondoltam jobb ha szólok.
Helló!
Először is köszönöm a gyors választ, másodszor pedig megmutatnám, hogy sikerült kiküszöbölnöm a problémát. Sikerült elhárítanom a hibaüzenet megjelenítését, egy borzasztó egyszerű módszerrel.
Mégpedig úgy, hogy mivel jelen esetben a $_GET['page' ]változó értékeként csak pozitív egész szám típusú inputot várok, csak ilyet fogadok el a változóból.
Ellenkező esetben teszek róla hogy ilyen típus érkezzen.
if ( !isset( $_GET['page'] ) && empty( $_GET['page'] ) ) {
$_GET['page'] = 1;
} else {
if ( (!ctype_digit( $_GET['page'] ) ) || $_GET['page'] <= 0 ){
$_GET['page'] = 1;
}
}





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