Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z formularzem
Forum PHP.pl > Forum > Przedszkole
majestiq
Mam prosty formularz:


  1.  
  2.  
  3. <?php
  4.  
  5. $autor = $_POST['autor'];
  6.  
  7. ?>
  8. <div id="autor">
  9.  
  10. <form id="autor_szukaj" target="_blank" method="post" action="http://www.abc.pl/szukaj- <?php echo $autor."-100-1/"; ?>" name="kodowanie">
  11. <input id="autor_input" type="text" name="autor" value="" maxlength="255">
  12. <input id="autor_input_szukaj" type="submit" value="Szukaj" name="bvc">
  13. </form>
  14. </div>
  15.  
  16.  


Po wpisaniu nazwy autora powinna się załadować taka strona:
http://www.abc.pl/szukaj-mickiewicz-100-1/ , niestety coś robię nie tak

i nie mogę w żaden sposób dodać nazwy autora do linku, po prostu ładuje mi się coś takiego:
http://www.abc.pl/szukaj--100-1/

Nie wiem czy chodzi o zmienną post, która jest definiowana za wcześnie czy o coś innego.

Co robię nie tak ?
Fafu
  1. $autor = $_POST['autor'];

to ci stworzy dopiero po wysłaniu formularza, możesz zrobić obejście w javascript (onsubmit) lub zamiast method="post" użyć method="get" ale to ci zrobi link typu index.php?autor=mickiwicz&bvc=Szukaj
majestiq
Nie chcę używać GET właśnie ze względu na formę adresu, musi być koniecznie taki jak podałem.
Czy ta opcja z JS jest jedyną możliwością ?
Fifi209
Cytat(majestiq @ 13.08.2009, 04:13:17 ) *
Nie chcę używać GET właśnie ze względu na formę adresu, musi być koniecznie taki jak podałem.
Czy ta opcja z JS jest jedyną możliwością ?


Tak opcja js jest jedyną możliwością. Nie możesz wstawiać czegoś czego fizycznie nie ma.
majestiq
Na JS praktycznie w ogóle się nie znam, ale trochę poszperałem i zrobiłem coś takiego:

  1.  
  2. <div id="autor">
  3.  
  4. <form id="formularz" onsubmit="return przejdz();" method="post" action="">
  5.  
  6. <input id="autor_input" type="text" name="autor" value="" maxlength="255">
  7.  
  8. <input id="autor_input_szukaj" type="submit" value="Szukaj" name="bvc">
  9.  
  10. </form>
  11.  
  12. </div>
  13.  
  14.  
  15. <script type="text/javascript">
  16.  
  17. function przejdz() {
  18.  
  19. var form = document.getElementById("formularz");
  20.  
  21. form.action = "http://www.abc.pl";
  22.  
  23. form.submit();
  24.  
  25. return false;
  26.  
  27. }
  28.  
  29. </script>
  30.  
  31.  


No i wsumie działa, strona się przeładowuje za pomocą JS, ale jak dodać do tego co mam w form.action: "http://www.abc.pl", parametr z formularza ($_POST['autor']) ?
Próbowałem w tego JS wstawić kod php, ale tak się nie da :/
Fifi209
Robisz tak:
  1. <input id="autor_input" type="text" id="autor" name="autor" value="" maxlength="255">


i w js:
[JAVASCRIPT] pobierz, plaintext
  1. form.action = 'http://www.abc.pl/?autor=' + document.getElementById('autor').value;
[JAVASCRIPT] pobierz, plaintext


I będziesz miał get'em. Jeżeli chcesz potem to jquery albo inny fw.
Fafu
document.forms[0].autor.value

poszukaj w google "formularze i javascript"
majestiq
Cytat(fifi209 @ 13.08.2009, 21:17:28 ) *
Robisz tak:
  1. <input id="autor_input" type="text" id="autor" name="autor" value="" maxlength="255">


i w js:
[JAVASCRIPT] pobierz, plaintext
  1. form.action = 'http://www.abc.pl/?autor=' + document.getElementById('autor').value;
[JAVASCRIPT] pobierz, plaintext


I będziesz miał get'em. Jeżeli chcesz potem to jquery albo inny fw.


To działa, ale jak mówię nie może być realizowane get'em, gdyz forma linka wynikowego musi być taka:
http://www.abc.pl/szukaj-mickiewicz-100-1/ (żadnych znaków zapytań jako parametrów)

Sporo się już naszukałem o tych formularzach i JS, ale coś nie mogę sobie z tym poradzić.
Naprawdę tak ciężko wyciągnąć z formularza nazwe autora, stworzyć takiego linka jak wyżej podany i przekierować
użytkownika na taką stronę ?
Fifi209
to zamiast:

?autor=

daj tam

szukaj-(tutaj js)-100-1

Taki leń?
majestiq
Oczywiście, że tak próbowałem, jednak jak usunę ten ? z początku to wszystko pada, tzn już się nigdzie
nie przekierowuje tylko strona się odświeża :/

  1. form.action = 'http://www.abc.pl/szukaj-' + document.getElementById('autor').value;


Chyba, że jeszcze o coś innego Ci chodziło ?
majestiq
Nie no nie licze na gotowca bo w sumie i tak chyba większość już mam.
Sądzę, że jakaś mała modyfikacja i powinno działać:

  1. <div id="autor">
  2.  
  3. <form id="formularz" onsubmit="return przejdz();" method="post" action="">
  4.  
  5.  
  6. <input id="autor_input" type="text" name="autor" value="" maxlength="255">
  7.  
  8. <input id="autor_input_szukaj" type="submit" value="Szukaj" name="bvc">
  9.  
  10. </form>
  11.  
  12. </div>
  13.  
  14.  
  15. <script type="text/javascript">
  16.  
  17. function przejdz() {
  18.  
  19. var form = document.getElementById("formularz");
  20.  
  21. form.action = 'http://www.abc.pl/szukaj-' + document.getElementById('autor_input').value;
  22.  
  23. form.submit();
  24.  
  25. return false;
  26.  
  27. }
  28.  
  29. </script>
Fifi209
[JAVASCRIPT] pobierz, plaintext
  1. form.action = 'http://www.abc.pl/szukaj-' + document.getElementById('autor').value;
[JAVASCRIPT] pobierz, plaintext


A nie tak?
[JAVASCRIPT] pobierz, plaintext
  1. window.location = 'http://www.abc.pl/szukaj-' + document.getElementById('autor').value + '100-1/';
[JAVASCRIPT] pobierz, plaintext


i to:
[JAVASCRIPT] pobierz, plaintext
  1. var form = document.getElementById("formularz");
  2. form.action = "http://www.abc.pl";
  3. form.submit();
[JAVASCRIPT] pobierz, plaintext

wywal z tamtej funkcji
Fafu
w sumie to bedzie prostsze i bedzie dzialac przy wylaczonym JS:
w index.php daj na górze:
  1. <?php
  2. if(isset($_GET['autor']) && isset($_GET['bvc']) && $_GET['bvc']=='Szukaj') header('Location: /szukaj-'.$_GET['autor'].'-100-1');
  3. ?>

i w action dla <form/> daj index.php
Fifi209
Cytat(Fafu @ 14.08.2009, 02:23:54 ) *
w sumie to bedzie prostsze i bedzie dzialac przy wylaczonym JS:

W ogóle nie będzie działało. Czemu? Nagłówki wysyłamy jako pierwsze tak? ;>
majestiq
Cytat(fifi209 @ 14.08.2009, 03:22:11 ) *
[JAVASCRIPT] pobierz, plaintext
  1. form.action = 'http://www.abc.pl/szukaj-' + document.getElementById('autor').value;
[JAVASCRIPT] pobierz, plaintext


A nie tak?
[JAVASCRIPT] pobierz, plaintext
  1. window.location = 'http://www.abc.pl/szukaj-' + document.getElementById('autor').value + '100-1/';
[JAVASCRIPT] pobierz, plaintext


i to:
[JAVASCRIPT] pobierz, plaintext
  1. var form = document.getElementById("formularz");
  2. form.action = "http://www.abc.pl";
  3. form.submit();
[JAVASCRIPT] pobierz, plaintext

wywal z tamtej funkcji




Postąpiłem wg Twoich wytycznych, kod JS przebudowałem:

  1.  
  2. <script type="text/javascript">
  3.  
  4. function przejdz() {
  5.  
  6.  
  7. window.location = 'http://www.abc.pl/szukaj-' + document.getElementById('autor').value + '100-1/';
  8.  
  9.  
  10.  
  11. return false;
  12.  
  13. }
  14.  
  15. </script>
  16.  


No i efekt taki, że strona się przekierowuje, ale bez względu na to co wpisze w formularz to i tak zawsze przechodzi na:
www.abc.pl a nie http://www.abc.pl/szukaj-(...)

Jeszcze spróbuje sposobem, który zaproponował FAFU
Fifi209
Nie działa, może dlatego że przed 100 brakuje myślnika? Taka literówka.

Jego skrypt w najlepszym wypadku wygeneruje: headers already sent ponieważ nagłówki muszą lecieć jako pierwsze do przeglądarki (przed kodem html etc.)
Fafu
No to przecież w moim poście napisałem
w index.php daj na górze:

poza tym nie muszą być wysyłane jako pierwsze jeśli się włączy buforowanie winksmiley.jpg
majestiq
Rzeczywiście brakowało myślnika biggrin.gif

Masz u mnie duże piwko!!

Wielkie dzięki za pomoc, bo już myślałem, że się zapłacze ;>

Cytat(Fafu @ 14.08.2009, 03:36:42 ) *
No to przecież w moim poście napisałem
w index.php daj na górze:

poza tym nie muszą być wysyłane jako pierwsze jeśli się włączy buforowanie winksmiley.jpg


Tym sposobem też próbowałem, ale nie poszło.

W każdym razie dzięki wszystkim za pomoc smile.gif
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.