Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: funkcja php jako adres na który formularz wysyła dane
Forum PHP.pl > Forum > PHP
Asmox
Trochę dziwnie brzmi temat ale ogólnie rzecz biorąc chodzi mi o to, jak zrobić, żeby formularz wysyłał dane do pewnej funkcji php.
Załóżmy, że w nagłówku jest już odpowiednie dołączenie pliku
  1. <?php include "skrypty.php" ?>
  2. </head>


zauważyłem, że zrobienie po prostu
  1. <form method="POST" action="funkcja()"></form>

nie działa. Co robić>
erix
Bo tak nie zadziała. winksmiley.jpg

PHP działa po stronie serwera, po stronie klienta już nie.

Do poczytania: http://www.w3schools.com/php/php_forms.asp
Asmox
No ale przecież dołączam plik z funkcjami, więc co jest nie tak? Sorka ale trochę nie kumam
erix
A masz te funkcje, jak podejrzysz źródło strony z formularzem? snitch.gif

PHP wykonuje się TYLKO po stronie serwera.
bim2
<form action="functions.php?nameFunction=funkcja">

i plik functions.php
  1. <?php
  2. {$_GET['nameFunction']}();
  3. ?>

Ale może to być niebezpieczne, bo teraz każdy może wywołać jaką chce funkcję u ciebie na serwerze.
pyro
Cytat(bim2 @ 18.01.2009, 23:26:13 ) *
<form action="functions.php?nameFunction=funkcja">

i plik functions.php
  1. <?php
  2. {$_GET['nameFunction']}();
  3. ?>

Ale może to być niebezpieczne, bo teraz każdy może wywołać jaką chce funkcję u ciebie na serwerze.

hmm? co to za jakis dziwny zapis wywołania funkcji? bim2, nie wydaje mi się, żeby to mogło działać, zamiast tego mozna uzyc call_user_func()" title="Zobacz w manualu PHP" target="_manual
Asmox
Aha dzięki. Bo chodzi mi przede wszystkim o to, żeby..... no zobaczcie topic
Temat: odbieranie_informacji_z_innego_skryptu_i_wykorzystywanie_go
P.S. Jak znaleźć ID tematu?
Tarcil
Witam

A czy w tym przypadku nie zrobić po prostu tak:

plik funkcja.php
  1. <?php
  2.  
  3. $a = cos($_POST['arg1']);
  4. $b = cos($_POST['arg2']);
  5. ...
  6. header("Location: <a href=\"http://www.gdzies.pl");
  7.  
  8. ?>


plik form.html
  1. <form method="post" action="funkcja.php">
  2. ...
  3. </form>


To wykona funkcję zapisaną w pliku funkcja.php i przeniesie z powrotem do strony... Chociaż wydaje mi się to mało eleganckie... chyba lepiej zapisać tą funkcję i wywołać ją w opdowiednim miejscu po sprawdzeniu przesłanych przez _POST danych...

Pozdrawiam
bim2
@pyro
jak najbardziej zadziała smile.gif
Asmox
Oczywiście, sam tak zrobiłem (to z formularzem). Tylko jak taki skrypt z innego źródła mógłby po powrocie na stronę główną zmienić klasę akapitu. Tutaj jego kod razem z formularzem:
  1. <form id="mini_login" method="post" action="skrypty/php/zaloguj.php">
  2. <div class="formsection">
  3. <label for="user_name">Użytkownik</label>
  4. <input name="mail" type="text" size="10" />
  5. </div>
  6. <div class="formsection">
  7. <label for="password">Hasło</label>
  8. <input name="pass" type="password" size="10" />
  9. </div>
  10. <div class="formsection">
  11. <input type="submit" value="Loguj" />
  12. </div>
  13. <div class="formsection">
  14. <p class="">Nieznana nazwa użytkonika i/lub hasło</p>
  15. <ul>
  16. <li><a href="#">Zapomniałeś hasła?</a></li>
  17. </ul>
  18. </div>
  19. </form>

Może gdyby zamieścić w nim jakiś kod php...?
erix
Cytat
Może gdyby zamieścić w nim jakiś kod php...?

Yhy:
  1. <?PHP if($warunek){ echo ' class="klasa"'; }; ?>


Albo Javascript.
pyro
Cytat(bim2 @ 19.01.2009, 16:53:32 ) *
@pyro
jak najbardziej zadziała smile.gif

Aż sprawdziłem u siebie... nie działa...
Asmox
  1. <?PHP if($warunek){ echo ' class="klasa"'; }; ?>

O to może zadziałać. Tylko że jeśli się z tym nic nie zrobi, to cały czas klasa będzie klasą biggrin.gif .
Czy takie coś przejdzie?
  1. <?php
  2. if ($wrong==true) {
  3. echo "<p class=\"error\">";
  4. $wrong=false;
  5. }
  6. else {
  7. echo "<p class=\"\">";
  8. }
  9. ?>

Tylko jak zrobić, żeby ten skrypt co odbiera dane mógł nadać wartość funkcji....
Może by wykorzystać zmienną sesji? Ale wolałbym nie, bo one się przydają do czegoś innego. No, chyba że nie ma wyboru
bim2
@pyro
Dziwne, coś w php 5 musieli zmienić.

  1. <?php
  2. $_GET['cos'] = 'test';
  3. $zm = $_GET['cos'];
  4. $zm();
  5.  
  6. function test()
  7. {
  8. echo 'lol';
  9. }
  10. ?>

Tak działa, ale pamiętam że ta konstrukcja co podałem działała. ;/
Asmox
O właśnie mi wpadło do głowy żeby tę zmiennę może przez POST wysłać. No i jak to zrobić przez php?
Czy wystarczy na końcu pliku skryptu dodać $_POST['wrong'] = true;
A potem tylko $zmienna = $_POST['wrong'];
Czy to będzie ok?
pyro
Cytat(bim2 @ 19.01.2009, 19:34:32 ) *
@pyro
Dziwne, coś w php 5 musieli zmienić.

  1. <?php
  2. $_GET['cos'] = 'test';
  3. $zm = $_GET['cos'];
  4. $zm();
  5.  
  6. function test()
  7. {
  8. echo 'lol';
  9. }
  10. ?>

Tak działa, ale pamiętam że ta konstrukcja co podałem działała. ;/


Takie coś by napewno zadziałało, mi chodziło o te nawiasy klamrowe, dodaj je sobie i zobacz jak działają....
Asmox
questionmark.gif Nie rozumiem o co robi 5 linijka kodu.
I o co w ogóle chodzi w tym kodzie?
Powtarzam moje pytanie:
Jak skrypt php może wysłać dane metodą POST, tak, aby mógł je odebrać inny skrypt
Znaczy, że w skrypcie wysyłamy dane metodą POST, następnie modyfikujemy nagłówek header("Location: strona.php")
erix
Cytat
Nie rozumiem o co robi 5 linijka kodu.

http://pl.php.net/manual/pl/functions.variable-functions.php

Cytat
Znaczy, że w skrypcie wysyłamy dane metodą POST, następnie modyfikujemy nagłówek header("Location: strona.php")

Zaraz, Ty chcesz przekazać dane $_POST do innego skryptu? Tzn. przekierować (location) wraz z danymi formularza?

Jeśli tak, to tylko cURL" title="Zobacz w manualu PHP" target="_manual.
Asmox
Eh... No to zrobię przykład jak to ma być:
1. Strona główna dołącza plik tekstowy z formularzem
2. Formularz wysyła dane do skryptu zaloguj.php
3. SKRYPT ZALOGUJ SPRAWDZA DANE. JEŚLI SĄ ZŁE TO WYSYŁA DANE Z POWROTEM (CZYLI NA STRONĘ GŁÓWNĄ) informację metodą post $_POST['wrong'] = true
4. Formularz odbiera informację i przez to używając funkcji if sprawia, że akapit ma klasę error.

I to wszystko. Pytanie: Jak php może wysłać dane metodą POST?
Cytat("erix")
Zaraz, Ty chcesz przekazać dane $_POST do innego skryptu? Tzn. przekierować (location) wraz z danymi formularza?
Jeśli tak, to tylko cURL.

Nie wiem co to ten cURL. Czy mógłbyś mi powiedzieć jak działa? Z manuala nie wiele się dowiedziałem, bo wszystko jest po angielsku :[
Nie może ktoś tego przetłumaczyć?
bim2
A nie możesz tak
1. Formularz na stronie głównej
2. Dane do zaloguj.php
3. Sprawdzanie
4. jeśli źle, wyświetlasz niżej formularz, a _POST masz ciągle bo nie przeładowujesz stronę
Asmox
emm no dobra ale pokaż jakby można było zrobić ten punkt 4 bo trochę nie rozumiem
erix
Patrz: formularz jest wyświetlany przez plik - powiedzmy - zapisz.php. Formularz przesyła dane do tego samego pliku (action="zapisz.php").

Wtedy masz do dyspozycji dane z formularza; jedynie trzeba dodać sprawdzanie.
bartg
Pyro, bim zapewne pomylił się z klasami winksmiley.jpg
  1. <?php
  2. //link: ?t=aaa
  3. class Obj {
  4.    function aaa()
  5.    {
  6.        echo 'Działa';
  7.    }
  8. }
  9. $obj = new Obj;
  10. echo $obj->{$_GET['t']}();
  11. ?>

O dziwo to zadziała biggrin.gif. Nawiasy klamrowe oznaczają przestrzeń z której pobierać nazwę metody. Dziwne że nie zaimplementowali tego w funkcjach.
phpion
Cytat(bartg @ 20.01.2009, 22:33:50 ) *
O dziwo to zadziała biggrin.gif. Nawiasy klamrowe oznaczają przestrzeń z której pobierać nazwę metody. Dziwne że nie zaimplementowali tego w funkcjach.

Niespodzianka!
  1. <?php
  2. function a() {
  3.    return 'A!';
  4. }
  5.  
  6. function b() {
  7.    return 'B!';
  8. }
  9.  
  10. $fun = 'a';
  11.  
  12. echo $fun();
  13. ?>

smile.gif
bartg
Żadna niespodzianka tongue.gif
Wiem że to działa ale czemu klamerki nie? sad.gif Czuje się przez Zend nie kochany worriedsmiley.gif

haha.gif
bim2
@phpion
Poczytaj moje i erixa wcześniejsze wypowiedzi. Mówiłem że echo {$_GET['lol']}(); działa, a okazuje się że nie. A o dziwo w klasach to śmiga ;/
phpion
Cytat(bim2 @ 21.01.2009, 00:10:14 ) *
@phpion
Poczytaj moje i erixa wcześniejsze wypowiedzi. Mówiłem że echo {$_GET['lol']}(); działa, a okazuje się że nie. A o dziwo w klasach to śmiga ;/

Fakt, sorry worriedsmiley.gif
Asmox
Co do tego zrobienia skryptu razem z formularzem.. to wtedy skrypt od razu sprawdzi formularz i od razu wypisze bład :\
pyro
Niezły tutaj się zrobił. Osobiście się pogubiłem.

Do tych co spekulują na temat nawiasów klamrowych: Tak jak już powiedziałem na samym początku @bim2 musiał się pomylić i chodziło mi o te nawiasy klamrowe, można nimi obejmować zmienne, jednak w przypadku nazw funkcji jako zmiennych to nie zadziała, nie wiedzieć czemu nie zostało to zaimplementowane w PHP. Nazwy funkcji można podawać jako zmienne o czym już wspomniałem zanim @phpion napisał o tym samym odkrywczą wiadomość hehe  snitch.gif

Niech w tym miejscu będzie to finito na temat nawiasów klamrowych przy zmiennych jako nazwy funkcji bo się robi off-topic.



Do autora tematu: Opisz w którym momencie stanąłeś, bo teraz wyszło na to, że nie wiadomo tongue.gif
Asmox
Na razie to nic nie robię bo jestem na feriach u babci dry.gif
Ale zastanawiam się jakby to można zrobić. Dochodzę teraz do wniosku, że zrobi się to po prostu tak:
Po zalogowaniu jeśli zmienna sesji $_SESSION['blad'] jest ustawiona na true, formularz za pomocą echo wypisze ten paragraf, a potem ustawi tę zmienną na false. To powinno rozwiązać cały problem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.