Come faccio a passare le variabili JavaScript a PHP?


150

Voglio passare le variabili JavaScript a PHP usando un input nascosto in un modulo.

Ma non riesco a capire il valore di $_POST['hidden1']into $salarieid. C'è qualcosa di sbagliato?

Ecco il codice:

<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
È possibile memorizzare il valore della variabile js in un cookie e successivamente accedere a tale variabile nel cookie php.
Shasi Kanth,

2
@shasikanth: puoi farlo, ma il cookie non verrà impostato fino alla seconda visualizzazione della pagina . E a quel tempo, sarà il valore dalla prima visualizzazione della pagina - è sempre uno dietro. Un cookie non è un meccanismo per trasferire dinamicamente le informazioni al server; devi fare qualcos'altro per aggiornare la pagina, ad esempio POST un modulo o effettuare una chiamata Ajax. E se stai facendo uno di questi, non c'è motivo di utilizzare un cookie: basta passare le informazioni nel meccanismo che stai utilizzando. Inoltre, un cookie persisterà dopo che la pagina sarà scomparsa, non ciò che si intende in questa domanda.
ToolmakerSteve

Risposte:


90

Non è possibile passare valori variabili dalla pagina corrente Codice JavaScript alla pagina corrente Codice PHP ... Il codice PHP viene eseguito sul lato server e non sa nulla di ciò che sta accadendo sul lato client.

È necessario passare le variabili al codice PHP dal modulo HTML utilizzando un altro meccanismo, ad esempio inviare il modulo utilizzando i metodi GET o 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, ho usato il modulo di invio qui con il metodo POST, non so perché non funziona. Sai perché? E come risolverlo?
SUN Jiangong,

@sergey, quindi devo usare Ajax? In realtà, ne ho familiarità.
SUN Jiangong,

In realtà, ho usato il tuo metodo nella casella di selezione di un livello precedente. Ma ora ho creato una casella di selezione a tre catene, quindi non posso usare il tuo metodo.
SUN Jiangong,

A questo punto: Sì, è necessario utilizzare la tecnologia AJAX. Se hai problemi con la realizzazione, penso di poterti aiutare.
Sergey Kuznetsov,

3
@MadaraUchiha Le mysql_funzioni già utilizzate dall'OP ; non sarebbe l'obiettivo di rispondere a questa domanda con una riscrittura completa.
Ja͢ck,

26

Basta salvarlo in un 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 poi leggilo con PHP:

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

Non è una soluzione carina, ma funziona.


2
Finaly! una selezione che funziona! Ho cercato ore per una selezione ora, facendo un gioco e vorrei inviare il punteggio più alto a un database, ora ho risolto! Saluti!
Cid-El,

1
in realtà, è un'ottima soluzione! passare da php a javascript è facile. da JavaScript a PHP non è facile. usare un cookie è semplice, elegante. no bs .. !! ovviamente se il client disattiva i cookie ,,, questo è un problema da gestire con un valore predefinito ..
JamesAD-0

Potete per favore fatemi sapere come usare la cosa $ _COOKIE ["height"] per ottenere il nome, valore in esso? Grazie. Non funziona per me.
Zac,

4
Nonostante tutti i voti positivi, questa non è una buona soluzione. Motivo: il cookie non viene visualizzato dal server fino alla successiva richiesta della pagina da parte del browser . È sempre "uno dietro". La prima volta che la pagina viene aperta nel browser, non ci sarà alcun cookie. È accettabile? Alla successiva apertura della pagina nel browser, ci sarà un cookie dalla prima volta. Per un valore costante , come questo esempio, potrebbe essere tollerabile (nonostante non funzioni la prima volta !!). Ora considera un valore dinamico , come il datetime corrente. php vedrà il datetime PRECEDENTE, non ora. Usa ajax.
ToolmakerSteve

20

Esistono diversi modi per passare le variabili da JavaScript a PHP (ovviamente non la pagina corrente).

Potresti:

  1. Invia le informazioni in un modulo come indicato qui (comporterà un aggiornamento della pagina)
  2. Passalo in Ajax (qui sono presenti diversi post) (senza un aggiornamento della pagina)
  3. Invia una richiesta HTTP tramite una richiesta XMLHttpRequest (senza un aggiornamento della pagina) in questo modo:

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

Sono sicuro che questo potrebbe essere fatto per sembrare più elaborato e scorrere tutte le variabili e quant'altro, ma l'ho tenuto essenziale per rendere più facile la comprensione per i principianti.


che ne dite di come riceverò le matrici db e le passerò sul javascript ogni volta che invio un nuovo modulo. allora cambierà anche la variabile in javascript. Come? aiutami. :(
Vincent

3
Ajax è in realtà XMLHttpRequest, quest'ultimo è solo un termine tecnico per questo.
Alex C.

14

Ecco l'esempio di lavoro: ottieni il valore della variabile javascript sulla stessa pagina in php.

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

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

1
Ho provato questo concetto, poi ha funzionato davvero, ma se provo in questo modo: <? Php var x = <script> document.writeln (p1); </script> ";?>, Quindi echo x; Non ha funzionato. Hai un altro modo?
Juna serbaserbi,

3
puoi provare così <script> var p1 = "successo"; </script> <? php $ x = "<script> document.writeln (p1); </script>"; echo $ x; ?>
Arslan Tabassum,

3
Il php in questo caso sta semplicemente facendo eco a javascript nella pagina come stringa. Javascript non viene passato a php.
Ben

Sì, è quello che dobbiamo fare ... a volte abbiamo bisogno di usare il valore JavaScript in php sulla stessa pagina e senza aggiornare la pagina ... allora funzionerà come un fascino .. :)
Arslan Tabassum

1
@ArslanTabassum No, hai frainteso il commento. php non vede mai il valore di p1. echo "<script>document.writeln(p1);</script>";usa la variabile javascript p1in javascript , non in php. document.writelnè una funzione JavaScript , che si sta eseguendo, nel browser, mentre il browser sta creando la pagina HTML.
ToolmakerSteve

6

PHP viene eseguito sul server prima che la pagina venga inviata all'utente, JavaScript viene eseguito sul computer dell'utente una volta ricevuto, quindi lo script PHP è già stato eseguito.

Se si desidera passare un valore JavaScript a uno script PHP, è necessario eseguire un XMLHttpRequest per inviare i dati al server.

Ecco una domanda precedente che puoi seguire per ulteriori informazioni: Ajax Tutorial

Ora, se hai solo bisogno di passare un valore di modulo al server, puoi anche semplicemente fare un normale post di modulo, che fa la stessa cosa, ma l'intera pagina deve essere aggiornata.

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

Facendo clic su Invia si invia la pagina e si stampano i dati inviati.


1
@Zurahn, sì, forse provo ad usare XMLHttpRequest, quindi non riesco a passare il valore javascript allo script php nella stessa pagina usando javascript? Ho cercato molto, qualcuno dice che può essere fatto con input nascosti nel modulo. Devo provare questa soluzione Furthur?
SUN Jiangong,

6

Stavo cercando di capirlo da solo e poi ho capito che il problema è che si tratta di un modo di guardare indietro alla situazione. Invece di provare a passare le cose da JavaScript a PHP, forse è meglio fare il contrario, nella maggior parte dei casi. Il codice PHP viene eseguito sul server e crea il codice html (e possibilmente anche lo script java). Quindi il browser carica la pagina ed esegue lo script html e java.

Sembra che il modo ragionevole di affrontare situazioni come questa sia usare il PHP per creare il JavaScript e l'html che vuoi e poi usare il JavaScript nella pagina per fare tutto ciò che PHP non può fare. Sembra che questo ti darebbe i vantaggi di PHP e JavaScript in un modo abbastanza semplice e diretto.

Una cosa che ho fatto che dà l'impressione di passare le cose a PHP dalla tua pagina al volo è usare il tag immagine html per chiamare il codice PHP. Qualcosa come questo:

<img src="pic.php">

Il codice PHP in pic.php creerebbe effettivamente il codice html prima ancora che la tua pagina web sia stata caricata, ma quel codice html è praticamente chiamato al volo. Il codice php qui può essere usato per creare un'immagine sulla tua pagina, ma può avere qualsiasi comando che ti piace oltre a quello in essa. Forse cambia il contenuto di alcuni file sul tuo server, ecc. Il lato positivo di questo è che il codice php può essere eseguito da html e presumo JavaScript, ma il lato negativo è che l'unico output che può mettere sulla tua pagina è un Immagine. Hai anche la possibilità di passare le variabili al codice php attraverso i parametri nell'URL. I contatori di pagine utilizzeranno questa tecnica in molti casi.


5

Possiamo facilmente trasferire valori anche su pagine uguali / diverse utilizzando i cookie mostrati nel codice come segue (Nel mio caso, lo sto usando con l'integrazione di 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 ho avuto accesso (in qualsiasi file) utilizzando -

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

5

Ecco come l'ho fatto (avevo bisogno di inserire un fuso orario locale in 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

La tua funzione, che imposta il valore del modulo nascosto, viene chiamata? Non è in questo esempio. Non dovresti avere problemi a modificare un valore nascosto prima di inviare il modulo al server.


@Perstilence, hai ragione, non ho chiamato la funzione. Sai come chiamarlo in php?
SUN Jiangong,

hmm. Sembra che tu voglia chiamarlo quando qualcuno seleziona qualcosa nel tuo modulo / un gestore onClick. Chiamarlo da PHP non ha alcun senso. Qualcuno seleziona un valore di modulo, la tua funzione viene attivata, aggiorna un valore di modulo nascosto, quindi si fa strada a php sul post del modulo. No?
pestilence669,

@pestilence, voglio consentire a qualcuno di selezionare un elemento in selectbox e quando faccio clic sul pulsante Invia, un risultato della ricerca verrà visualizzato in una tabella. Quindi, nel backend, quando scelgo l'articolo, il suo valore verrà passato a una query mysql in php come variabile. Questo è quello che voglio fare. Ma sembra che non riesca a trovare la soluzione in JavaScript. Hai qualche idea?
SUN Jiangong,

Sì, il metodo di invio o acquisizione nel modulo verrà accettato se funziona.
SUN Jiangong,

2

Il tuo codice ha alcune cose che non vanno.

  • Si definisce una funzione JavaScript, func_load3 (), ma non la si chiama.
  • La tua funzione è definita nel posto sbagliato. Quando è definito nella tua pagina, gli oggetti HTML a cui fa riferimento non sono ancora stati caricati. La maggior parte del codice JavaScript verifica se il documento è completamente caricato prima dell'esecuzione, oppure puoi semplicemente spostare il codice oltre gli elementi a cui fa riferimento nella pagina.
  • Il modulo non ha alcun mezzo per inviarlo. È necessario un pulsante di invio.
  • Non si controlla se il modulo è stato inviato.

È possibile impostare una variabile JavaScript in una variabile nascosta in un modulo, quindi inviarlo e rileggere il valore in PHP. Ecco un semplice esempio che mostra questo:

<?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 la tua pagina carica per la prima volta il codice PHP per la prima volta e imposta il layout completo della tua pagina web. dopo il layout di pagina, imposta il caricamento di JavaScript. ora JavaScript interagisce direttamente con DOM e può manipolare il layout, ma PHP non può aver bisogno di aggiornare la pagina. C'è solo un modo per aggiornare la tua pagina e passare i parametri nell'URL della pagina in modo da poter ottenere i dati tramite PHP. Quindi usiamo AJAX per interagire Javascript con PHP senza ricaricare la pagina. AJAX può anche essere usato come API. un'altra cosa se hai già dichiarato la variabile in PHP. prima del caricamento della pagina, puoi usarlo con il tuo esempio Javascript.

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

il codice sopra è corretto e funzionerà. ma il codice qui sotto è totalmente sbagliato e non funzionerà mai.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • Passa valore da JavaScript a PHP tramite AJAX

    è il modo più sicuro per farlo. perché il contenuto HTML può essere modificato tramite strumenti di sviluppo e l'utente può manipolare i dati. quindi è meglio usare AJAX se vuoi sicurezza su quella variabile. Se sei un principiante di AJAX, per favore impara che AJAX è molto semplice.

Il modo migliore e più sicuro per passare la variabile JavaScript in PHP è tramite AJAX

semplice esempio 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);
            }
            });
  • PASSARE il valore da JavaScript a PHP tramite campi nascosti.

in caso contrario, è possibile creare input HTML nascosti all'interno del modulo. piace

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

quindi tramite jQuery o javaScript passare il valore al campo nascosto. piace

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

Ora quando invii il modulo puoi ottenere il valore in PHP.


1
Grazie. Molto utile. Il metodo jQuery non ti consente di passare i dati generati durante l'esecuzione della pagina? Non puoi impostare un campo di input su un valore e raccoglierlo da php? Questo è uno degli esempi Ajax più chiari che abbia mai visto. Non vedo l'ora di provarlo.
riccioli

1

Può essere che tu possa usare il metodo jquery serialize () in modo che tutto sia in una volta sola.

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

// in questo modo è possibile ottenere anche il valore nascosto sul lato server.


0

Questa soluzione ovviamente non è stata menzionata in precedenza. È inoltre possibile utilizzare i cookie per trasferire i dati dal browser al server.

Basta impostare un cookie con i dati che si desidera passare a PHP utilizzando JavaScript nel browser.

Quindi, leggi semplicemente questo cookie sul lato PHP.


. . . ti piacerebbe fare un esempio e forse un link pertinente o due? (Vedi Come rispondere .)
ashleedawg

0

Non possiamo trasmettere direttamente i valori delle variabili JavaScript al codice PHP ... Il codice PHP viene eseguito sul lato server e non sa nulla di ciò che accade sul lato client.

Quindi è meglio usare AJAX per analizzare il valore JavaScript nel codice php.

O in alternativa possiamo farlo con l'aiuto di COOKIES nel nostro codice.

Grazie e saluti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.