Como passo variáveis ​​JavaScript para PHP?


150

Eu quero passar variáveis ​​JavaScript para PHP usando uma entrada oculta em um formulário.

Mas eu não posso obter o valor de $_POST['hidden1']dentro $salarieid. Há algo de errado?

Aqui está o código:

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

2
Você pode armazenar o valor da variável js em um cookie e posteriormente acessar essa variável no cookie php.
Shasi kanth

2
@shasikanth - você pode fazer isso, mas o cookie não será definido até a segunda vez que a página for exibida . E nesse momento, será o valor da visualização da primeira página - está sempre um atrás. Um cookie não é um mecanismo para transmitir informações dinamicamente de volta ao servidor; você precisa fazer outra coisa para atualizar a página, por exemplo, POSTAR um formulário ou fazer uma chamada Ajax. E se você estiver fazendo um desses, não há razão para usar um cookie - basta passar as informações no mecanismo que você está usando. Além disso, um cookie persistirá após o término da página - não o que é pretendido nesta pergunta.
ToolmakerSteve

Respostas:


90

Você não pode passar valores variáveis ​​do código JavaScript da página atual para o código PHP da página atual ... O código PHP é executado no lado do servidor e ele não sabe nada sobre o que está acontecendo no lado do cliente.

Você precisa passar variáveis ​​para o código PHP a partir do formulário HTML usando outro mecanismo, como enviar o formulário usando os métodos GET ou 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>

@ Emery, usei o envio de formulário aqui com o método POST, não sei por que não funciona. Você sabe por quê? E como resolver isso?
SUN Jiangong

@ Emery, então eu preciso usar ajax? Na verdade, eu sou familiar com isso.
SUN Jiangong 18/12/2009

Na verdade, eu usei seu método na caixa de seleção de um nível anterior. Mas agora eu fiz uma caixa de seleção de três cadeias, então não posso usar seu método.
SUN Jiangong

Neste ponto: Sim, você precisa usar a tecnologia AJAX. Se você tiver problemas com a realização, acho que posso ajudar.
Sergey Kuznetsov

3
@MadaraUchiha O OP já usou mysql_funções; não seria o objetivo de responder a essa pergunta com uma reescrita completa.
Ja͢ck

26

Apenas salve-o em um 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=/";
}

E então leia-o com PHP:

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

Não é uma solução bonita, mas funciona.


2
Finalmente! uma seleção que funciona! Estou procurando horas por uma seleção agora, fazendo um jogo e gostaria de enviar a pontuação mais alta para um banco de dados, consertou-a agora! Felicidades!
Cid-El

1
na verdade, é uma ótima solução! passar de php para javascript é fácil. de javascript para php não é fácil. usar um cookie é simples, elegante. não bs .. !! é claro que se as voltas cliente fora biscoitos ,,, isso é uma questão a alça com um padrão ..
JamesAD-0

Você pode me informar como usar a coisa $ _COOKIE ["height"] para obter o nome e o valor dela? Obrigado. Não está trabalhando para mim.
Zac

4
Apesar de todos os votos positivos, essa não é uma boa solução. Motivo: o cookie não é visto pelo servidor até a próxima vez que a página for solicitada pelo navegador . É sempre "um atrás". A primeira vez que a página é aberta no navegador, não haverá nenhum cookie. Isso é aceitável? Na próxima vez que a página for aberta no navegador, haverá um cookie desde a primeira vez. Para um valor constante , como este exemplo, que pode ser tolerável (apesar de não funcionar da primeira vez !!). Agora considere um valor dinâmico , como data e hora atual. O php estará vendo data e hora anteriores, não agora. Use ajax.
Página

20

Existem várias maneiras de passar variáveis ​​do JavaScript para o PHP (não a página atual, é claro).

Você poderia:

  1. Envie as informações em um formulário conforme indicado aqui (resultará em uma atualização da página)
  2. Passe no Ajax (várias postagens estão aqui sobre isso) (sem uma atualização de página)
  3. Faça uma solicitação HTTP por meio de uma solicitação XMLHttpRequest (sem uma atualização de página) assim:

 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();

Tenho certeza de que isso pode parecer mais sofisticado e percorrer todas as variáveis ​​e outros enfeites - mas eu o mantive básico, para facilitar o entendimento para os novatos.


que tal como vou obter as matrizes db e passá-lo no javascript toda vez que enviar um novo formulário. então a variável em javascript também será alterada. como? Ajude-me. :(
Vincent

3
Ajax é na verdade XMLHttpRequest, o último é apenas um termo técnico para isso.
Alex C.

14

Aqui está o exemplo de trabalho: Obtenha o valor da variável javascript na mesma página em php.

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

<?php
echo "<script>document.writeln(p1);</script>";
?>

1
Eu tentei esse conceito e realmente funcionou, mas se eu tentar assim: <? Php var x = <script> document.writeln (p1); </script> ";?>, Em seguida, echo x; Ele não funcionou. você tem uma outra maneira?
Juna serbaserbi

3
você pode tentar assim <script> var p1 = "success"; </script> <? php $ x = "<script> document.writeln (p1); </script>"; eco $ x; ?>
Arslan Tabassum

3
O php nesse caso está simplesmente ecoando o javascript na página como uma string. Javascript não está sendo passado para php.
Ben

Sim, isso é o que precisamos fazer ... às vezes precisamos usar valor de JavaScript em PHP na mesma página e sem atualizar a página ... então ele vai funcionar como charme .. :)
Arslan Tabassum

1
@ArslanTabassum Não, você não entendeu o comentário. O php nunca vê o valor de p1. echo "<script>document.writeln(p1);</script>";usa a variável javascript p1em javascript , não em php. document.writelné uma função javascript que você está executando no navegador enquanto o navegador está criando a página HTML.
Home

6

O PHP é executado no servidor antes que a página seja enviada ao usuário, o JavaScript é executado no computador do usuário depois de recebido, portanto, o script PHP já foi executado.

Se você deseja passar um valor JavaScript para um script PHP, precisará fazer um XMLHttpRequest para enviar os dados de volta ao servidor.

Aqui está uma pergunta anterior que você pode seguir para obter mais informações: Tutorial do Ajax

Agora, se você só precisa passar um valor de formulário para o servidor, também pode fazer uma postagem de formulário normal, que faz a mesma coisa, mas a página inteira precisa ser atualizada.

<?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>

Clicar em enviar enviará a página e imprimirá os dados enviados.


1
@ Zurahn, sim, talvez eu tente usar XMLHttpRequest, então não posso passar o valor javascript para o script php na mesma página usando javascript? Eu pesquisei muito, alguém diz que isso pode ser feito com entrada oculta no formulário. Preciso tentar esta solução furthur?
SUN Jiangong

6

Eu estava tentando descobrir isso sozinho e depois percebi que o problema é que essa é uma maneira de olhar para trás da situação. Em vez de tentar passar coisas do JavaScript para o php, talvez seja melhor fazer o contrário, na maioria dos casos. O código PHP é executado no servidor e cria o código html (e possivelmente também o script java). Em seguida, o navegador carrega a página e executa o script html e java.

Parece que a maneira mais sensata de abordar situações como essa é usar o PHP para criar o JavaScript e o html desejado e, em seguida, usar o JavaScript na página para fazer o que o PHP não puder fazer. Parece que isso lhe daria os benefícios do PHP e do JavaScript de uma maneira bastante simples e direta.

Uma coisa que fiz que dá a impressão de passar coisas para o PHP da sua página em tempo real é usar a tag de imagem html para chamar o código PHP. Algo assim:

<img src="pic.php">

O código PHP no pic.php realmente criaria código html antes que sua página da web fosse carregada, mas esse código html é basicamente chamado em tempo real. O código php aqui pode ser usado para criar uma imagem em sua página, mas pode ter qualquer comando que você queira além dele. Talvez isso mude o conteúdo de alguns arquivos no servidor, etc. A vantagem disso é que o código php pode ser executado a partir de html e eu assumo JavaScript, mas o lado negativo é que a única saída que ele pode colocar na sua página é uma imagem. Você também tem a opção de passar variáveis ​​para o código php através de parâmetros no URL. Os contadores de páginas usarão essa técnica em muitos casos.


5

Podemos passar valores facilmente, mesmo em páginas iguais / diferentes, usando os cookies mostrados no código da seguinte forma (no meu caso, eu estou usando-o com a integração do Facebook) -

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);
        });
    }
}

E eu o acessei (em qualquer arquivo) usando -

<?php 
    if(isset($_COOKIE['fbdata'])) { 
        echo "welcome ".$_COOKIE['fbdata'];
    }
?>

5

Aqui está como eu fiz isso (eu precisava inserir um fuso horário local no 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);

2

Sua função, que define o valor oculto do formulário, está sendo chamada? Não está neste exemplo. Você não deve ter problemas para modificar um valor oculto antes de postar o formulário novamente no servidor.


@perstilence, você está certo, eu não chamei a função. Você sabe como chamá-lo em php?
SUN Jiangong

Hmm. Parece que você deseja chamá-lo quando alguém seleciona algo em seu formulário / um manipulador onClick. Chamar isso de PHP não faz nenhum sentido. Alguém seleciona um valor de formulário, sua função é acionada, atualiza um valor de formulário oculto e depois faz o caminho para php na postagem de formulário. Não?
precisa

@ pestilence, quero deixar alguém selecionar um item na caixa de seleção e, quando clicar no botão enviar, um resultado da pesquisa será exibido em uma tabela. Assim, no back-end, quando eu escolher o item, seu valor será passado para uma consulta mysql no php como uma variável. É isso que eu quero fazer. Mas parece que não consigo encontrar a solução em javascript. Faz alguma ideia?
SUN Jiangong

Sim, o método post ou get no formulário será aceito se funcionar.
SUN Jiangong

2

Seu código tem algumas coisas erradas nele.

  • Você define uma função JavaScript, func_load3 (), mas não a chama.
  • Sua função está definida no lugar errado. Quando definido na sua página, os objetos HTML a que se refere ainda não foram carregados. A maioria dos códigos JavaScript verifica se o documento está totalmente carregado antes da execução, ou você pode simplesmente passar o código pelos elementos a que se refere na página.
  • Seu formulário não tem como enviá-lo. Ele precisa de um botão de envio.
  • Você não verifica se o seu formulário foi enviado.

É possível definir uma variável JavaScript em uma variável oculta em um formulário, enviá-la e ler o valor novamente em PHP. Aqui está um exemplo simples que mostra isso:

<?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;
?>

2

quando sua página carrega pela primeira vez o código PHP, execute primeiro e defina o layout completo da sua página da web. após o layout da página, ele configurou o carregamento do JavaScript. agora o JavaScript interage diretamente com o DOM e pode manipular o layout, mas o PHP não precisa atualizar a página. Só existe uma maneira de atualizar sua página e passar os parâmetros no URL da página para que você possa obter os dados via PHP. Então, usamos o AJAX para interagir Javascript com PHP sem recarregar a página. O AJAX também pode ser usado como uma API. mais uma coisa, se você já declarou a variável no PHP. antes do carregamento da página, você pode usá-lo com seu exemplo de Javascript.

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

o código acima está correto e funcionará. mas o código abaixo está totalmente errado e nunca funcionará.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • Passar valor de JavaScript para PHP via AJAX

    é a maneira mais segura de fazer isso. porque o conteúdo HTML pode ser editado por meio de ferramentas de desenvolvedor e o usuário pode manipular os dados. portanto, é melhor usar o AJAX se você quiser segurança sobre essa variável. Se você é um novato no AJAX, saiba que o AJAX é muito simples.

A melhor e mais segura maneira de passar a variável JavaScript para PHP é via AJAX

exemplo simples de 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);
            }
            });
  • PASS valor do javascript para php através de campos ocultos.

caso contrário, você pode criar entrada HTML oculta dentro do seu formulário. gostar

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

depois, via jQuery ou javaScript, passe o valor para o campo oculto. gostar

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

Agora, quando você envia o formulário, pode obter o valor em PHP.


1
Obrigado. Muito útil. O método jQuery não permite transmitir dados gerados à medida que a página é executada? Você não pode definir um campo de entrada com um valor e buscá-lo pelo php? Este é um dos exemplos mais claros do Ajax que eu já vi. Estou ansioso para tentar.
curls

1

Pode ser que você possa usar o método jquery serialize () para que tudo fique de uma só vez.

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

// dessa forma, você pode obter o valor oculto também no lado do servidor.


0

Obviamente, essa solução não foi mencionada anteriormente. Você também pode usar cookies para passar dados do navegador de volta ao servidor.

Basta definir um cookie com os dados que você deseja passar para o PHP usando javascript no navegador.

Então, basta ler este cookie no lado do PHP.


. . . você gostaria de dar um exemplo e talvez um ou dois links relevantes? (Veja Como responder .)
ashleedawg

0

Não podemos passar valores de variáveis ​​JavaScript diretamente para o código PHP ... O código PHP é executado no lado do servidor e ele não sabe nada sobre o que está acontecendo no lado do cliente.

Portanto, é melhor usar o AJAX para analisar o valor do JavaScript no código php.

Ou, como alternativa, podemos fazer isso com a ajuda de COOKIES em nosso código.

Obrigado e Saúde.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.