2011-07-28 10 views
21

Mam taki formularz php.php forma działania php self

<form name="form1" id="mainForm" method="post"enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>"> 

</form 

W akcji formularza chcę używać nazwy strony z parametrami. jak house.php?p_id=10111. Ale $ _SERVER ['PHP_SELF'] podaje tylko numer house.php (Moja strona zawiera pełny adres URL: house.php?p_id=10111). Pomóż mi rozwiązać ten problem. dzięki.

+1

To nie jest pełny adres URL. Jest to parametr url + GET. –

+1

@Alex Ackerman: To raczej [ścieżka] (http://tools.ietf.org/html/rfc3986#section-3.3) plus [zapytanie] (http://tools.ietf.org/html/rfc3986#section- 3.4). – Gumbo

+2

tak. Alex ma rację. Używam teraz '$ _SERVER ['PHP_SELF']."? P_id = ". $ Id' –

Odpowiedz

71

Co powiesz na pozostawienie pustego, co jest nie tak?

<form name="form1" id="mainForm" method="post" enctype="multipart/form-data" action=""> 

</form> 

Ponadto można pominąć atrybut działania i będzie działać zgodnie z oczekiwaniami.

+1

Dzięki za to. Myślę, że jest to najłatwiejszy i najlepszy sposób na zrobienie tego. –

+11

Pozostawienie pustego powoduje przerwanie sprawdzania poprawności w3c (na wszelki wypadek). – gadlol

+10

@jBaron Tak, tak jest w HTML5, ale można całkowicie pominąć pusty atrybut "action =" "'. Będzie sprawdzać i działać zgodnie z oczekiwaniami. – Shef

7

Pozostawienie pustej wartości akcji spowoduje, że formularz zostanie przesłany sam do siebie.

12

Możesz zostawić puste działania lub użyć tego kodu:

<form name="form1" id="mainForm" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['REQUEST_URI'];?>"> 
</form> 
0

To jest doskonały. spróbuj tego :)

<form name="test" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
/* Html Input Fields */ 
</form> 
+1

To pozwala na ataki XSS, musisz filtrować/sanatyzować PHP_SELF – Chad

+0

ok, dostaję to. Dziękuje. jest przydatne. –

3

Możesz użyć skrótu echa, zamiast wpisywać "echo bla"; jak pokazano poniżej:

<form method="POST" action="<?=($_SERVER['PHP_SELF'])?>"> 
+1

Pozwala to na ataki XSS, musisz filtrować/sanatyzować PHP_SELF – Chad

1

Innym (i moim zdaniem właściwa) metodą jest użyć stałej __FILE__ jeśli nie lubisz polegać na $_SERVER zmiennych.

$parts = explode(DIRECTORY_SEPARATOR, __FILE__); 
$fileName = end($parts); 
echo $fileName; 

o magii i predefiniowanych stałych: 1, 2.