Jak przekazać zmienne JavaScript do PHP?

150

Chcę przekazać zmienne JavaScript do PHP za pomocą ukrytych danych wejściowych w formularzu.

Ale nie mogę zrozumieć wartości $_POST['hidden1']w $salarieid. Czy jest coś nie tak?

Oto kod:

<script type="text/javascript">
    // View what the user has chosen
    function func_load3(name) {
        var oForm = document.forms["myform"];
        var oSelectBox = oForm.select3;
        var iChoice = oSelectBox.selectedIndex;
        //alert("You have chosen: " + oSelectBox.options[iChoice].text);
        //document.write(oSelectBox.options[iChoice].text);
        var sa = oSelectBox.options[iChoice].text;
        document.getElementById("hidden1").value = sa;
    }
</script>

<form name="myform" action="<?php echo $_SERVER['$PHP_SELF']; ?>" method="POST">
    <input type="hidden" name="hidden1" id="hidden1" />
</form>

<?php
   $salarieid = $_POST['hidden1'];
   $query = "select * from salarie where salarieid = ".$salarieid;
   echo $query;
   $result = mysql_query($query);
?>

<table>
   Code for displaying the query result.
</table>
SUN Jiangong
źródło
2
Możesz przechowywać wartość zmiennej js w pliku cookie, a później uzyskać dostęp do tej zmiennej w pliku cookie php.
shasi kanth
2
@shasikanth - możesz to zrobić, ale plik cookie zostanie ustawiony dopiero po ponownym wyświetleniu strony . I wtedy będzie to wartość z pierwszej odsłony strony - zawsze o jedną z tyłu. Plik cookie nie jest mechanizmem dynamicznego przekazywania informacji z powrotem do serwera; musisz zrobić coś innego, aby odświeżyć stronę, np. POST formularz lub wykonać wywołanie Ajax. A jeśli robisz jedno z nich, nie ma powodu, aby używać pliku cookie - po prostu podaj informacje w używanym mechanizmie. Ponadto plik cookie będzie istniał po usunięciu strony - nie jest to zamierzone w tym pytaniu.
ToolmakerSteve

Odpowiedzi:

90

Nie możesz przekazać wartości zmiennych z kodu JavaScript bieżącej strony do kodu PHP bieżącej strony ... Kod PHP działa po stronie serwera i nie wie nic o tym, co się dzieje po stronie klienta.

Musisz przekazać zmienne do kodu PHP z formularza HTML za pomocą innego mechanizmu, takiego jak przesłanie formularza za pomocą metody GET lub POST.

<DOCTYPE html>
<html>
  <head>
    <title>My Test Form</title>
  </head>

  <body>
    <form method="POST">
      <p>Please, choose the salary id to proceed result:</p>
      <p>
        <label for="salarieids">SalarieID:</label>
        <?php
          $query = "SELECT * FROM salarie";
          $result = mysql_query($query);
          if ($result) :
        ?>
        <select id="salarieids" name="salarieid">
          <?php
            while ($row = mysql_fetch_assoc($result)) {
              echo '<option value="', $row['salaried'], '">', $row['salaried'], '</option>'; //between <option></option> tags you can output something more human-friendly (like $row['name'], if table "salaried" have one)
            }
          ?>
        </select>
        <?php endif ?>
      </p>
      <p>
        <input type="submit" value="Sumbit my choice"/>
      </p>
    </form>

    <?php if isset($_POST['salaried']) : ?>
      <?php
        $query = "SELECT * FROM salarie WHERE salarieid = " . $_POST['salarieid'];
        $result = mysql_query($query);
        if ($result) :
      ?>
        <table>
          <?php
            while ($row = mysql_fetch_assoc($result)) {
              echo '<tr>';
              echo '<td>', $row['salaried'], '</td><td>', $row['bla-bla-bla'], '</td>' ...; // and others
              echo '</tr>';
            }
          ?>
        </table>
      <?php endif?>
    <?php endif ?>
  </body>
</html>
Sergey Kuznetsov
źródło
@Sergey, użyłem tutaj formularza wysyłania metodą POST, nie wiem, dlaczego to nie działa. Wiesz dlaczego? Jak to rozwiązać?
SUN Jiangong
@sergey, więc muszę używać ajax? Właściwie to mi się to dobrze zna.
SUN Jiangong,
Właściwie użyłem Twojej metody w poprzednim polu wyboru jednego poziomu. Ale teraz stworzyłem trzy-łańcuchowe pole wyboru, więc nie mogę użyć twojej metody.
SUN Jiangong,
W tym momencie: Tak, musisz użyć technologii AJAX. Jeśli masz kłopoty z realizacją, myślę, że mogę pomóc.
Sergey Kuznetsov
3
@MadaraUchiha OP już używał mysql_funkcji; nie byłoby celem udzielenia odpowiedzi na to pytanie całkowitym przepisaniem.
Ja͢ck,
26

Po prostu zapisz to w pliku cookie:

$(document).ready(function () {
  createCookie("height", $(window).height(), "10");
});

function createCookie(name, value, days) {
  var expires;
  if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = "; expires=" + date.toGMTString();
  }
  else {
    expires = "";
  }
  document.cookie = escape(name) + "=" + escape(value) + expires + "; path=/";
}

A potem przeczytaj go w PHP:

<?PHP
   $_COOKIE["height"];
?>

To nie jest ładne rozwiązanie, ale działa.

chrześcijanin
źródło
2
Wreszcie! wybór, który działa! Od wielu godzin szukałem selekcji, robiłem grę i chciałbym wysłać najwyższy wynik do bazy danych, naprawiłem to teraz! Twoje zdrowie!
Cid-El
1
w rzeczywistości jest to świetne rozwiązanie! przejście z php do javascript jest łatwe. z javascript do php nie jest łatwe. używanie plików cookie jest proste, eleganckie. no bs .. !! oczywiście, jeśli klient wyłączy pliki cookie ,,, jest to problem do rozwiązania domyślnie ..
JamesAD-0
Czy możesz mi dać znać, jak użyć rzeczy $ _COOKIE ["height"], aby uzyskać nazwę, wartość w niej? Dzięki. Nie działa dla mnie.
Zac,
4
Mimo wszystkich pozytywnych opinii nie jest to dobre rozwiązanie. Przyczyna: plik cookie nie jest widziany przez serwer aż do następnego żądania strony przez przeglądarkę . Zawsze jest „jeden z tyłu”. Przy pierwszym otwarciu strony w przeglądarce w ogóle nie będzie żadnego pliku cookie. Czy to jest dopuszczalne? Następnym razem, gdy strona zostanie otwarta w przeglądarce, za pierwszym razem pojawi się plik cookie. W przypadku stałej wartości, takiej jak ten przykład, może to być tolerowane (pomimo tego, że nie działało za pierwszym razem !!). Rozważmy teraz wartość dynamiczną , taką jak bieżąca data i godzina. php będzie widzieć POPRZEDNĄ datę i godzinę, nie teraz. Użyj Ajax.
ToolmakerSteve
20

Istnieje kilka sposobów przekazywania zmiennych z JavaScript do PHP (oczywiście nie do bieżącej strony).

Mógłbyś:

  1. Wyślij informacje w formie podanej tutaj (spowoduje odświeżenie strony)
  2. Przekaż to w Ajaxie (jest tutaj kilka postów na ten temat) (bez odświeżania strony)
  3. Wykonaj żądanie HTTP za pośrednictwem żądania XMLHttpRequest (bez odświeżania strony) w następujący sposób:

 if (window.XMLHttpRequest){
     xmlhttp = new XMLHttpRequest();
 }

else{
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 }

 var PageToSendTo = "nowitworks.php?";
 var MyVariable = "variableData";
 var VariablePlaceholder = "variableName=";
 var UrlToSend = PageToSendTo + VariablePlaceholder + MyVariable;

 xmlhttp.open("GET", UrlToSend, false);
 xmlhttp.send();

Jestem pewien, że można by to zrobić, aby wyglądać bardziej fantazyjnie i przeglądać wszystkie zmienne i inne rzeczy - ale utrzymałem to na podstawowym poziomie, aby ułatwić zrozumienie dla nowicjuszy.

user1849393
źródło
co powiesz na to, jak otrzymam tablice db i przekażę je do javascript za każdym razem, gdy prześlę nowy formularz. wtedy zmienna w javascript również się zmieni. w jaki sposób? Pomóż mi. :(
Vincent
3
Ajax to właściwie XMLHttpRequest, ten ostatni jest tylko terminem technicznym.
Alex C.
14

Oto działający przykład: pobierz wartość zmiennej javascript na tej samej stronie w php.

<script>
var p1 = "success";
</script>

<?php
echo "<script>document.writeln(p1);</script>";
?>
Arslan Tabassum
źródło
1
Wypróbowałem tę koncepcję, ale naprawdę zadziałała, ale jeśli spróbuję w ten sposób: <? Php var x = <script> document.writeln (p1); </script> ";?>, A następnie echo x; To nie działa. Czy masz inny sposób?
Juna serbaserbi
3
możesz spróbować w ten sposób <script> var p1 = "sukces"; </script> <? php $ x = "<script> document.writeln (p1); </script>"; echo $ x; ?>
Arslan Tabassum
3
W tym przypadku php po prostu odsyła javascript do strony jako ciąg. Javascript nie jest przekazywany do php.
Ben
Tak, właśnie to musimy zrobić ... czasami musimy użyć wartości JavaScript w php na tej samej stronie i bez odświeżania strony ... wtedy będzie działać jak urok ... :)
Arslan Tabassum
1
@ArslanTabassum Nie, źle zrozumiałeś komentarz. php nigdy nie widzi wartości p1. echo "<script>document.writeln(p1);</script>";używa zmiennej javascript p1w javascript , a nie php. document.writelnto funkcja javascript , którą wykonujesz w przeglądarce, podczas gdy przeglądarka buduje stronę HTML.
ToolmakerSteve
6

PHP działa na serwerze przed wysłaniem strony do użytkownika, JavaScript jest uruchamiany na komputerze użytkownika po jej odebraniu, więc skrypt PHP został już wykonany.

Jeśli chcesz przekazać wartość JavaScript do skryptu PHP, musisz wykonać XMLHttpRequest, aby wysłać dane z powrotem na serwer.

Oto poprzednie pytanie, na które możesz odpowiedzieć, aby uzyskać więcej informacji: Samouczek Ajax

Teraz, jeśli potrzebujesz tylko przekazać wartość formularza do serwera, możesz po prostu zrobić zwykły post formularza, który robi to samo, ale cała strona musi zostać odświeżona.

<?php
if(isset($_POST))
{
  print_r($_POST);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <input type="text" name="data" value="1" />
  <input type="submit" value="Submit" />
</form>

Kliknięcie Prześlij spowoduje przesłanie strony i wydrukowanie przesłanych danych.

Derek H
źródło
1
@Zurahn, tak, może spróbuję użyć XMLHttpRequest, więc nie mogę przekazać wartości javascript do skryptu php na tej samej stronie za pomocą javascript? Dużo szukałem, ktoś mówi, że da się to zrobić z ukrytym wpisem w formularzu. Czy muszę teraz wypróbować to rozwiązanie?
SUN Jiangong
6

Próbowałem to rozgryźć sam, a potem zdałem sobie sprawę, że problem polega na tym, że jest to swego rodzaju wsteczny sposób patrzenia na sytuację. Zamiast próbować przekazywać rzeczy z JavaScript do php, w większości przypadków najlepiej jest przejść na odwrót. Kod PHP jest wykonywany na serwerze i tworzy kod html (i być może również skrypt java). Następnie przeglądarka ładuje stronę i wykonuje skrypt html i java.

Wydaje się, że rozsądnym sposobem podejścia do takich sytuacji jest użycie PHP do stworzenia JavaScript i żądanego kodu HTML, a następnie użycie JavaScript na stronie, aby zrobić to, czego PHP nie może zrobić. Wygląda na to, że dałoby to korzyści zarówno z PHP, jak i JavaScript w dość prosty i bezpośredni sposób.

Jedną rzeczą, którą zrobiłem, która sprawia wrażenie przekazywania rzeczy do PHP z Twojej strony w locie, jest użycie tagu graficznego HTML do wywołania kodu PHP. Coś takiego:

<img src="pic.php">

Kod PHP w pic.php faktycznie utworzyłby kod html przed załadowaniem strony internetowej, ale ten kod html jest w zasadzie wywoływany w locie. Kod php tutaj może zostać użyty do stworzenia obrazu na twojej stronie, ale oprócz tego może zawierać dowolne polecenia, które lubisz. Może to zmienia zawartość niektórych plików na twoim serwerze itp. Plusem tego jest to, że kod php może być wykonany z html i zakładam JavaScript, ale wadą jest to, że jedyne wyjście, które może umieścić na twojej stronie, to wizerunek. Masz również możliwość przekazywania zmiennych do kodu php poprzez parametry w adresie URL. W wielu przypadkach liczniki stron będą korzystać z tej techniki.

Terry Prothero
źródło
5

Możemy łatwo przekazywać wartości nawet na tych samych / różnych stronach za pomocą plików cookie pokazanych w kodzie w następujący sposób (w moim przypadku używam go z integracją z Facebookiem) -

function statusChangeCallback(response) {
    console.log('statusChangeCallback');
    if (response.status === 'connected') {
        // Logged into your app and Facebook.
        FB.api('/me?fields=id,first_name,last_name,email', function (result) {
            document.cookie = "fbdata = " + result.id + "," + result.first_name + "," + result.last_name + "," + result.email;
            console.log(document.cookie);
        });
    }
}

I uzyskałem do niego dostęp (w dowolnym pliku) za pomocą -

<?php 
    if(isset($_COOKIE['fbdata'])) { 
        echo "welcome ".$_COOKIE['fbdata'];
    }
?>
Tushar Walzade
źródło
5

Oto jak to zrobiłem (potrzebowałem wstawić lokalną strefę czasową do PHP:

<?php
    ob_start();
?>

<script type="text/javascript">

    var d = new Date();
    document.write(d.getTimezoneOffset());
</script>

<?php
    $offset = ob_get_clean();
    print_r($offset);
VisionQuest
źródło
2

Czy Twoja funkcja, która ustawia wartość ukrytego formularza, jest wywoływana? Nie ma tego w tym przykładzie. Nie powinieneś mieć problemu ze zmodyfikowaniem ukrytej wartości przed wysłaniem formularza z powrotem na serwer.

Zaraza 669
źródło
@perstilence, masz rację, nie wywołałem tej funkcji. Czy wiesz, jak to nazwać w PHP?
SUN Jiangong,
hmm. Wygląda na to, że chcesz to wywołać, gdy ktoś wybierze coś w twoim formularzu / module obsługi onClick. Wywołanie go z PHP nie ma żadnego sensu. Ktoś wybiera wartość formularza, twoja funkcja uruchamia się, aktualizuje ukrytą wartość formularza, a następnie przechodzi do php na formularzu. Nie?
pestilence669
@pestilence, chcę pozwolić komuś wybrać element w polu wyboru, a kiedy kliknę przycisk Prześlij, wynik wyszukiwania zostanie wyświetlony w tabeli. Więc na zapleczu, kiedy wybiorę element, jego wartość zostanie przekazana do zapytania mysql w php jako zmienna. To jest to, co chcę zrobić. Ale wygląda na to, że nie mogę znaleźć rozwiązania w javascript. Masz jakąś wskazówkę?
SUN Jiangong,
Tak, metoda wysyłania lub pobierania w formularzu zostanie zaakceptowana, jeśli zadziała.
SUN Jiangong
2

W Twoim kodzie jest kilka błędów.

  • Definiujesz funkcję JavaScript, func_load3 (), ale jej nie wywołuj.
  • Twoja funkcja jest zdefiniowana w niewłaściwym miejscu. Kiedy jest zdefiniowany na twojej stronie, obiekty HTML, do których się odnosi, nie zostały jeszcze załadowane. Większość kodu JavaScript sprawdza, czy dokument jest w pełni załadowany przed wykonaniem, lub możesz po prostu przenieść kod poza elementy, do których odnosi się na stronie.
  • Twój formularz nie ma możliwości przesłania go. Potrzebuje przycisku przesyłania.
  • Nie sprawdzasz, czy Twój formularz został przesłany.

Możliwe jest ustawienie zmiennej JavaScript w ukrytej zmiennej w formularzu, następnie przesłanie jej i odczytanie wartości z powrotem w PHP. Oto prosty przykład, który to pokazuje:

<?php
if (isset($_POST['hidden1'])) {
   echo "You submitted {$_POST['hidden1']}";
   die;
}

echo <<<HTML
   <form name="myform" action="{$_SERVER['PHP_SELF']}" method="post" id="myform">
      <input type="submit" name="submit" value="Test this mess!" />
      <input type="hidden" name="hidden1" id="hidden1" />
   </form>

   <script type="text/javascript">
      document.getElementById("hidden1").value = "This is an example";
   </script>
HTML;
?>
user3822447
źródło
2

kiedy Twoja strona ładuje kod PHP po raz pierwszy, uruchom i ustaw kompletny układ strony internetowej. po układzie strony ustawia ładowanie JavaScript. teraz JavaScript bezpośrednio współdziała z DOM i może manipulować układem, ale PHP nie może odświeżyć strony. Jedynym sposobem jest odświeżenie strony i przekazanie parametrów w adresie URL strony, aby można było pobrać dane przez PHP. Dlatego używamy AJAX do interakcji JavaScript z PHP bez przeładowywania strony. AJAX może być również używany jako API. jeszcze jedno, jeśli zadeklarowałeś już zmienną w PHP. przed załadowaniem strony możesz go użyć z przykładem JavaScript.

<script>
var username = "<?php echo $myname;?>";
alert(username);
</script>

powyższy kod jest poprawny i będzie działał. ale poniższy kod jest całkowicie błędny i nigdy nie zadziała.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • Przekaż wartość z JavaScript do PHP przez AJAX

    jest to najbezpieczniejszy sposób na zrobienie tego. ponieważ zawartość HTML można edytować za pomocą narzędzi programistycznych, a użytkownik może manipulować danymi. więc lepiej jest używać AJAX, jeśli chcesz mieć bezpieczeństwo nad tą zmienną. Jeśli jesteś nowicjuszem w AJAX, naucz się AJAX, to jest bardzo proste.

Najlepszym i najbezpieczniejszym sposobem przekazania zmiennej JavaScript do PHP jest użycie AJAX

prosty przykład AJAX

var mydata = 55;
var myname = "syed ali";
var userdata = {'id':mydata,'name':myname};
    $.ajax({
            type: "POST",
            url: "YOUR PHP URL HERE",
            data:userdata, 
            success: function(data){
                console.log(data);
            }
            });
  • Przekaż wartość z javascript do php poprzez ukryte pola.

w przeciwnym razie możesz utworzyć ukryte wejście HTML wewnątrz formularza. lubić

<input type="hidden" id="mydata">

następnie poprzez jQuery lub javaScript przekaż wartość do ukrytego pola. lubić

<script>
var myvalue = 55;
$("#mydata").val(myvalue);
</script>

Teraz po przesłaniu formularza możesz uzyskać wartość w PHP.

Sayed Mohd Ali
źródło
1
Dziękuję Ci. Bardzo pomocne. Metoda jQuery nie pozwala na przekazywanie danych generowanych podczas działania strony? Nie możesz ustawić pola wejściowego na wartość i odebrać go przez php? To jeden z najwyraźniejszych przykładów Ajax, jakie widziałem. Nie mogę się doczekać, aby tego spróbować.
loki
1

Być może możesz użyć metody serialize () jquery, aby wszystko było za jednym zamachem.

var data=$('#myForm').serialize();

// w ten sposób możesz uzyskać ukrytą wartość również po stronie serwera.

Satyapriya Mishra
źródło
0

To oczywiście rozwiązanie nie zostało wcześniej wspomniane. Możesz także użyć plików cookie, aby przekazać dane z przeglądarki z powrotem na serwer.

Po prostu ustaw plik cookie z danymi, które chcesz przekazać do PHP za pomocą javascript w przeglądarce.

Następnie po prostu przeczytaj ten plik cookie po stronie PHP.

Tim
źródło
. . . czy chciałbyś podać przykład, a może odpowiedni link lub dwa? (Zobacz, jak odpowiedzieć .)
ashleedawg
0

Nie możemy przekazać wartości zmiennych JavaScript bezpośrednio do kodu PHP ... Kod PHP działa po stronie serwera i nie wie nic o tym, co się dzieje po stronie klienta.

Dlatego lepiej jest użyć AJAX do przeanalizowania wartości JavaScript w kodzie php.

Lub alternatywnie możemy to zrobić za pomocą COOKIES w naszym kodzie.

Dzięki i pozdrawiam.

Rohit Saini
źródło