ugrás a tartalomhoz

action paraméterezés

Vrt · 2008. Ápr. 28. (H), 22.58
Sziasztok!

Adott egy valami.php?m=4

Egy formon belül megy a mókázás. Amikor a user elküldi a formot, megjelenik az eredmény, de a valami.php után levő paramétereket már nem adja vissza. Mivel egy adatbázisból szedem, hogy mi jelenjen meg a lapon így fontos lenne hogy a form elküldése után a php a paraméterekkel együtt maradjon meg.
 <form  action="<?php print $PHP_SELF?>"  method="post"  enctype="application/x-www-form-urlencoded" name="barmi" id="barmi">
.
.
.
.
<input style="width:auto" type="submit" name="barmi" value="barmi"   >
</form>
Köszi

K
 
1

pl igy:

ksgy · 2008. Ápr. 28. (H), 23.27
egy megoldas a sok kozul, valahogy igy:
<form  action="<?php print $PHP_SELF .'?m='. $m ?>"  ...
siman az valami.php?m=4 -re postolod a formot, nem siman a valami.php-ra
2

működik, de h miért:)

Vrt · 2008. Ápr. 28. (H), 23.40
Ksgy!

Köszi. Nem tudtam, hogy postoljam valami.php?m=4 -re. Az igazság, hogy a módszereddel működik, de hogy miért nem tudom, mert gyakorlatilag '?m=' helyett bármit írhatok..ugyanazt csinálja..Mondjuk ez erre a feladatra így ok..de ha más paramétert kellene használnom akkor nein..

Ötlet?

K
4

php (programozás?) alapok

gex · 2008. Ápr. 28. (H), 23.51
először is minden rosszindulat nélkül használd a dokumentációt. nagyon szépen le van benne írva, ha nem is minden, de elég sok dolog. így azt is megtalálhattad volna, hogy $_SERVER['PHP_SELF'] mit tartalmaz és mit nem.

a paraméterek hozzáfűzésére pedig ha nem találsz függvényt, akkor írhatsz is egyet. logikusan kikövetkeztethető, hogy neked a ciklus nevű vezérlési szerkezetre lesz szükséged (az eddigi kérdéseid alapján egy erős alapozó tanulmány/könyv sokat segítene a problémáid megoldásában):

<?php
$url = '';
foreach ($_GET as $key => $value) {
    $url .= (strlen($url) ? '&' : '?') . $key . '=' . $value;
}
$url = $_SERVER['PHP_SELF'] . $url;
?>
16

Talán a legegyszerűbb módszer...

Velias9 · 2008. Ápr. 29. (K), 18.10
... az ha ezt csinálod:

...

<form action="<?php print($_SERVER['PHP_SELF'] . $_SERVER['QUERY_STRING']); ?>" ... >

...
Vagy a (szerintem) legegyszerűbb:

...

<form action="<?php print($_SERVER['REQUEST_URI']); ?>" ... >

...
Persze ezek a módszerek csak akkor jók, ha minden paramátert meg akarsz hagyni. Ha nem kell az összes, akkor ciklussal ki kell válogatni úgy, mint ahogy azt gex mutatta, csak egy kicsit átalakítva.
3

azért ez ne maradjon így ebben a formában az utókornak

gex · 2008. Ápr. 28. (H), 23.43

<form action="<?php echo $_SERVER['PHP_SELF'], '?m=', $_GET['m']; ?>" ... >
5

több paraméter esetén?

Vrt · 2008. Ápr. 28. (H), 23.55
Gex!

Több paraméter esetén (valami.php?m1=1&m2=2) fűzzem össze '?m1='&'?m2=', $_GET['m1'&'m2'] ?

Illetve ha más paraméterezéssel szeretném postolni? Mert ha jól értem ez az eredeti paramétereket állítja vissza.

K
6

több paraméter

gex · 2008. Ápr. 29. (K), 00.24

<form action="<?php echo $_SERVER['PHP_SELF'], '?m1=', $_GET['m1'], '&m2=', $_GET['m2']; ?>" ... >
ha jól értem ez az eredeti paramétereket állítja vissza

én meg ha jól értettem, akkor ez volt a célod. ;) de amúgy bármit írhatsz a $_GET['m1'], $_GET['m2'] helyére...
7

kiroa

Vrt · 2008. Ápr. 29. (K), 09.10
Gex!

Legmélyebb tiszteletem:) Köszi a segítséget.

K
8

Rend..

janoszen · 2008. Ápr. 29. (K), 11.11
Azt azért tegyük hozzá a rend kedvéért, hogy a $_GET-ből kapott paramétereket át kellene ereszteni egy rawurlencode függvényen, különben történhetnek ott vicces dolgok ha pl van egy & jel az adatban.
9

több rend

gex · 2008. Ápr. 29. (K), 12.22
meg ugye az '&m2='-t is '&amp;m2=' formában kéne a böngészőnek küldeni... de nem volt célom átfogó megoldást írni, mert akkor a válasz elveszett volna a sok kiegészítés között. ;)
10

elveszett volna.. -- register globals on

Vrt · 2008. Ápr. 29. (K), 12.45
Az biztos, hogy elveszett volna a válasz..amennyit értek hozzá:)

De akkor engedjetek meg mégy egy kérdést..bár lehet h. új témát kellene indítanom..

A szerver ahol a lap futna úgy van konfigolva hogy a:

register_globals=off -ra van állítva.

Nekem viszont "on" kellene. A tárhely tul. azt javasolta, hogy tegyem be egy olyan php-be ezt amit minden más fájl include-ol, de nem tudom, hogy kellne ezt..

Elegendő ha létrehozok egy php-t, vagy más trükk is kell?

<?php
register_globals=on;
?>
köszi

K
11

Ne akard.

janoszen · 2008. Ápr. 29. (K), 13.00
Ne akarj olyan kódot használni, ami csak register globals-szal fut. Lehet rá emulációt írni (kibontod a megfelelő szuperglobálisokat), de nem érdemes.
12

dokumentáció

gex · 2008. Ápr. 29. (K), 13.02
már javasoltam a dokumentációt, bármilyen hihetetlen, erről is megemlékeznek benne:
  • a register globals a php 4.2.0-tól alapból off-ra van állítva és nem véletlenül.
  • a register globals-t nem lehet futásidőben állítgatni:
    Please note that register_globals cannot be set at runtime (ini_set()).

    úgyhogy itt meg is kérdőjeleződik a "tárhely tul." hozzáértése.
  • ismerkedj meg a $_GET, $_POST és egyéb előre definiált változókkal, így nem lesz szükséged sehol sem egy olyan beállításra, ami már csak ideig óráig létezik (a php6-ban nem lesz lehetőséged on-ra állítani, mivel nem is lesz ilyen beállítás).
  • ha mégsem fogadod meg a tanácsokat, akkor egy .htaccess fájlban be tudod állítani, hogy mégis on legyen az értéke. (2. pontban lévő linkre kattints)
13

nem akarom:)

Vrt · 2008. Ápr. 29. (K), 13.48
Proclub, Gex!

Nem akarok én semmit:) Az a hálás feladat jutott osztályrészül, hogy egy "vásárolt" sablont kell átalakítani..azt hiszem ebből a néhány postbol kiderült, hogy mennyire értem a kérdést.

Elolvastam a linkek mögött levő anyagot..erre nem tudok mit mondani. Így lett megcsinálva az anyag. Esélyem nincs módosítani ilyen mélységig. Sajnos a .htaccess nem megy..azzal kezdtem..de nem engedélyezik a user szintű módosítást..
Van egy két soros php kódot amit elhelyeztem minden php elején és így emulálva működik a dolog. Gondolom ennek is vannnak buktatói de ebben most nem mehetek bele.

Azért idemásolom, kíváncsi vok a véleményetekre, illetve ha valaki belefut hasonló dologba akkor talán ez segít:
<?php 
while(list($k, $v) = each($_GET)) $$k = $v;
while(list($k, $v) = each($_POST)) $$k = $v;
?>
K
14

doksi, doksi, doksi

gex · 2008. Ápr. 29. (K), 15.37
http://hu.php.net/manual/en/function.extract.php

pár tanács hozzá, mivel úgysem olvasod végig ;)
Do not use extract() on untrusted data, like user-input ($_GET, ...). If you do, for example, if you want to run old code that relies on register_globals temporarily, make sure you use one of the non-overwriting extract_type values such as EXTR_SKIP and be aware that you should extract in the same order that's defined in variables_order within the php.ini.
15

Osztályrész

janoszen · 2008. Ápr. 29. (K), 16.36
Akkor azt annak a kevéssé utánajáró kiváló embernek, aki ilyen elöregedett vackokat vesz, gyújts homályt a fejében, hogy jó insecure lesz tőle a rendszer. Egyébként én azt mondanám, hogy HTML kopipészt, PHP kód kidob és újraír from scratch, esetleg valami jó kis templatező rendszerrel, hogy ne fájjon túlságosan.