Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][js] wyciaganie danych z formularza
Forum PHP.pl > Forum > Przedszkole
arioner
Witam,
chcialbym wyciagnac z formularza tresc pola textarea, ale tak zeby stalo sie to jeszcze przed przejsciem do skryptu podanego w action formularza.

Jesli mialbym taki kod w js

Kod
function przetwarzaj_formularz(formularz)
{
    var zapytanie =  formularz.zapytanie.value;
}


to czy istnieje mozliwosc przypisania wartosci z formluarz.zapytanie.value nie do dowolnej zmiennej, ale od razu do $_SESSION['zapytanie']. Albo w jaki sposob wyciagnac to zapytanie z formularza i umiescic je w tablicy $_SESSION, ale tak zeby stalo sie to jeszcze przed przejsciem do skryptu podanego w akcji formularza.
LBO
Napewno możesz zrobić to przez AJAX, ale w standardowym JavaScripcie (bez używania XMLHttpRequest) nic nie wrzucisz do $_SESSION bez przeładowania strony. Tak czy siak musisz użyć najpierw skryptu php, z poziomu JS nie ma dostępu do zmiennych sesji.
arioner
Dzieki za szybka odpowiedz. A moze jest jakis inny sposob na to,zeby przechowac to co wpisze w textarea bo pole to sluzy mi do wpisywania zapytania do bazy mysql i pozniej do podzielenia zwroconych wynikow stosuje stronicowanie i jesli wyniki mieszcza sie na jednej stronie wszystko jest ok a jesli nie to po przejsciu na druga strone nie mam juz dostepu do tresci tego zaptytania i zamiast dalszej czesci wynikow dostaje blad. Dlatego szukam sposobu na przechowania tresci tego zapytania.
LBO
zawsze zostają Tobie tablice $_POST i $_GET. Nie wiem w czym widzisz problem.
arioner
Dziekuje za odpowiedz. Problem polega na tym, ze jesli w textarea wpisze sobie zapytanie np.
  1. SELECT userid
  2. FROM moja_baza

i zatwierdze formularz to pokaza mi sie wyniki. Na pierwszej stronie wyswietlam sobie zawartosc $_POST['zapytanie'] i jest ok czyli wyswietla mi select userid from nazwa bazy i ponizej wyniki zwrocone przez zapytanie natomiast jesli przejde na druga strone z wynikami $_POST['zapytanie'] jest juz puste takze zapytanie sie nie wykonuje i zamiast pozostalych wynikow mam blad. Jestem poczatkujacym w php i byc moze robie glupi blad, ale nie potrafie sobie z tym poradzic a sytuacja wyglada tak jak opisalem.
LBO
Rozwiązaniem śa ukryte pola.
  1. <input type="hidden" id="guery" name="query" value="SELECT * FROM tabela" />


To pole będzie normalnie widoczne w tablicy $_POST.

  1. <?php
  2.  
  3. print($_POST['query']); // SELECT * FROM tabela
  4.  
  5. ?>
arioner
OK, ale w tym przypadku zapytanie mam wpisane na sztywno a co jesli raz bede chcial wybrac sobie tylko userid a za drugim razem np. login i userid a za trzecim jeszcze cos. W takim wypadku musialbym robic tyle tych ukrytych pol ile mam mozliwych kombinacji zapytan do bazy a pozniej jeszcze w jakis sposob identyfikowac jakie zapytanie zostalo wpisane i wartosc tego pola podstawiac. Nie wiec czy dobrze zrozumialem,ale jesli tak to nie jest to zbyt dobre bo ja za kazdym razem moge miec inne zapytanie do bazy.

Pozdrawiam
LBO
Istnieje możliwość przesłania tablicy (POST albo GET). A ja się pogubiłem, o co Tobie chodzi. Jasno sie pytałeś, jak możesz w niewidoczny sposób przesłać jakieś dane pomiędzy stronami (w więcej niz jednym przeładowaniu - chociaż to juz możesz poprzez sesję załatwić).
arioner
Postanawiam kontynuowac temat bo nie daje mi to spokoju. Mam takie zapytanie:

  1. <?php
  2.  
  3. $zapytanie = stripslashes($_POST['zapytanie']). " LIMIT ". mysql_escape_string((int)$_GET['porcja']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  4.  
  5. ?>


gdzie $_POST['zapytanie'] przechowuje mi tresc zapytania wpisanego na poprzedniej stronie w polu textarea. Jak juz pisalem przy stronicowaniu zawartosc $_POST['zapytanie'] jest widoczna tylko na pierwszej stronie z wynikami, wiec zeby przekazywac ja dalej zrobilem takie formularze:

dla przejscia do poprzedniej strony z wynikami

  1. <form action="?porcja=<?php echo ($_GET['porcja']-1). '"'?> method="POST">
  2. <input type="hidden" name="zapytanie" value="<?php stripslashes($_POST['zapytanie'])?>" >
  3. <input type="submit" value="poprzednia">
  4. </form>


dla przejsca do nastepnej strony z wynikami
  1. <form action="?porcja=<?php echo($_GET['porcja']+1).'"'?> method="POST">
  2. <input type="hidden" name="zapytanie" value="<?php $_POST['zapytanie']?>" >
  3. <input type="submit" value="nastepna">
  4. </form>


Jednak w dalszym ciagu jesli wyswietle sobie na pierwszej stronie z wynikami tresc zapytania to jest ok i np. mam: select login from logowanie LIMIT 0,3, jednak jesli przejde na druga strone z wynikami to z zapytania zostaje tylko: LIMIT 3,3, wiec jak widac nie przekazuje mi do nastepnych stron zawartosci $_POST['zapytanie']. Moze za bardzo kombinuje, ale prosze jakby ktos znalazl sposob jak to rozwiazac o pomoc gdyz jest mi to dosc bardzo potrzebne.

Pozdrawiam
LBO
Prosze... przeanalizuj ten kod. Dodałem kilka "skrótów" (w sensie algorytmu działania, bo o sama implementacja jest taka sobie - moznaby np. uzywać warunek ? true : false; w zamian tych kilku if'ów). Mam nadzieję, że się Tobie przyda.

cheers

  1. <?php
  2. define('ILOSC_WYNIKOW_NA_STRONIE', 3);
  3. if(isset($_GET['porcja'])) {
  4. $porcja = $_GET['porcja'];
  5. } else {
  6. $porcja = 0;
  7. };
  8. if(isset($_POST['strona'])) {
  9. if ($_POST['strona'] == 'nastepna') {
  10. $porcja++;
  11. }else {
  12. $porcja--;
  13. };
  14. };
  15. if($_POST['zapytanie'] != null) {
  16. print('true<br />');
  17. $zapytanie = $_POST['zapytanie'];
  18. $limit = ' LIMIT '.($porcja * ILOSC_WYNIKOW_NA_STRONIE).' , '.ILOSC_WYNIKOW_NA_STRONIE;
  19. };
  20. ?>
  21. <form action="?porcja=<?php print($porcja); ?>" method="POST">
  22. <input type="input" name="zapytanie" value="<?php print($zapytanie); ?>" /><?php print($limit); ?><br />
  23. <input type="submit" name="strona" value="poprzednia" />
  24. <input type="submit" name="strona" value="nastepna" />
  25. </form>
  26. <table border="1">
  27. <tr><td colspan="2">$_POST</td></tr>
  28. <?php
  29. foreach ($_POST as $key => $value) {
  30. print('<tr><td>'.$key.'</td><td>'.$value.'</td></tr>');
  31. };
  32. ?>
  33. </table>
  34. <table border="1">
  35. <tr><td colspan="2">$_GET</td></tr>
  36. <tbody>
  37. <?php
  38. foreach ($_GET as $key => $value) {
  39. print('<tr><td>'.$key.'</td><td>'.$value.'</td></tr>');
  40. };
  41. ?>
  42. </tbody>
  43. </table>


P.S. Kod powinien działać (nie sprawdzałem, bo nie jestem u Siebie. Jakby co to wal śmiało), ale nie ręczę głową. tongue.gif
arioner
@LBO dziekuje Tobie bardzo za pomoc. Kod oczywiscie dziala smile.gif. Jestem Twoim dluznikiem tylko nie wiem jak moge ten dlug splacic z moim stanem wiedzy w tym temacie smile.gif.

pozdrawiam
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.