2009-12-16 61 views
104

Tôi muốn chuyển biến JavaScript sang PHP bằng cách sử dụng đầu vào bị ẩn trong biểu mẫu.Làm cách nào để chuyển các biến JavaScript sang PHP?

Nhưng tôi không thể nhận giá trị $_POST['hidden1'] vào $salarieid. Có điều gì sai không?

Đây là mã:

<script type="text/javascript"> 
// view which the user has chosen 
function func_load3(name){ 
    var oForm = document.forms["myform"]; 
    var oSelectBox = oForm.select3; 
    var iChoice = oSelectBox.selectedIndex; 
    //alert("you have choosen: " + 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 display the query result. 
</table> 
+1

Bạn có thể lưu trữ giá trị biến js trong cookie và sau đó truy cập biến đó trong cookie php. –

+0

Đây có thể là giải pháp tốt hơn - [http://stackoverflow.com/a/35684778/5729813](http://stackoverflow.com/a/35684778/5729813) –

Trả lời

63

Bạn không thể chuyển giá trị biến từ trang javascript hiện tại sang mã PHP hiện tại ... Mã PHP chạy ở phía máy chủ và không biết gì về những gì đang xảy ra ở phía máy khách.

Bạn cần phải chuyển các biến sang mã PHP từ dạng html bằng cách sử dụng một cơ chế khác, chẳng hạn như gửi biểu mẫu trên phương thức GET hoặc 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> 
+0

@Sergey, tôi đã sử dụng biểu mẫu gửi ở đây với phương thức POST, tôi không biết tại sao nó không hoạt động. Bạn có biết tại sao? Và làm thế nào để giải quyết điều đó? –

+0

@ sergey, vì vậy tôi cần sử dụng ajax? Trên thực tế, tôi là familliar với điều đó. –

+0

Thực tế, tôi đã sử dụng phương pháp của bạn trong hộp chọn một cấp độ trước đây. Nhưng bây giờ tôi đã thực hiện một hộp chọn ba chuỗi, vì vậy tôi không thể sử dụng phương pháp của bạn. –

5

PHP chạy trên máy chủ trước khi trang được gửi đến người dùng, Javascript được chạy trên máy tính của người dùng khi nó được nhận, vì vậy kịch bản PHP đã thực hiện.

Nếu bạn muốn chuyển giá trị JavaScript cho tập lệnh PHP, bạn phải thực hiện XMLHttpRequest để gửi dữ liệu trở lại máy chủ.

Dưới đây là một câu hỏi trước mà bạn có thể làm theo để biết thêm thông tin: Ajax Tutorial

Bây giờ nếu bạn chỉ cần phải vượt qua một giá trị hình thức đến máy chủ, bạn cũng có thể chỉ cần làm một bài hình thức bình thường, mà làm điều tương tự , nhưng toàn bộ trang phải được làm mới.

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

Nhấp gửi sẽ gửi trang và in ra dữ liệu đã gửi.

+1

@Zurahn, vâng, có thể tôi cố gắng sử dụng XMLHttpRequest , vì vậy tôi không thể vượt qua giá trị javascript để php script trong cùng một trang bằng cách sử dụng javascript? Tôi đã tìm kiếm rất nhiều, ai đó nói rằng nó có thể được thực hiện với đầu vào ẩn dưới dạng. Tôi có cần phải thử giải pháp này furthur? –

2

Chức năng của bạn có đặt giá trị biểu mẫu ẩn, được gọi không? Nó không có trong ví dụ này. Bạn sẽ không gặp vấn đề khi sửa đổi giá trị ẩn trước khi đăng biểu mẫu trở lại máy chủ.

+0

@perstilence, bạn nói đúng, tôi không gọi hàm. Bạn có biết làm thế nào để gọi nó trong php? –

+0

hmm. Có vẻ như bạn muốn gọi nó khi ai đó chọn thứ gì đó trong biểu mẫu của bạn/trình xử lý onClick. Gọi nó từ PHP không có ý nghĩa gì cả. Ai đó chọn một giá trị biểu mẫu, chức năng của bạn sẽ kích hoạt, cập nhật giá trị biểu mẫu ẩn, sau đó thực hiện theo cách của nó tới php trên biểu mẫu bài đăng. Không? – pestilence669

+0

@pestilence, tôi muốn cho phép ai đó chọn một mục trong hộp chọn và khi tôi nhấp vào nút gửi, kết quả tìm kiếm sẽ được hiển thị trong bảng. Vì vậy, tại phụ trợ, khi tôi chọn mục, giá trị của nó sẽ được chuyển đến truy vấn mysql trong php dưới dạng biến. Đây là những gì tôi muốn làm. Nhưng có vẻ như tôi không thể tìm thấy giải pháp trong javascript. Bạn có chút manh mối nào không? –

5

Tôi đã cố gắng tìm ra điều này và sau đó nhận ra rằng vấn đề là đây là một cách nhìn ngược về tình hình. Thay vì cố gắng chuyển những thứ từ java sang php, có thể tốt nhất là nên đi theo một cách khác, trong hầu hết các trường hợp. Mã PHP thực hiện trên máy chủ và tạo mã html (và có thể cả tập lệnh java). Sau đó, trình duyệt tải trang và thực thi tập lệnh html và java. Có vẻ như cách hợp lý để tiếp cận các tình huống như thế này là sử dụng PHP để tạo tập lệnh java và html bạn muốn và sau đó sử dụng tập lệnh java trong trang để làm bất kỳ điều gì PHP không thể thực hiện được. Có vẻ như điều này sẽ mang lại cho bạn những lợi ích của cả PHP và java script theo một cách khá đơn giản và thẳng về phía trước.

Một điều tôi đã thực hiện cung cấp cho sự xuất hiện của việc chuyển những thứ sang PHP từ trang của bạn khi đang di chuyển là sử dụng thẻ hình ảnh html để gọi trên mã PHP. Một cái gì đó như thế này:

< img src = "pic.php" >

Các mã PHP trong pic.php thực sự sẽ tạo ra mã html trước khi trang web của bạn thậm chí còn tải, nhưng điều đó mã html cơ bản là kêu gọi một cách nhanh chóng. Mã php ở đây có thể được sử dụng để tạo ra một hình ảnh trên trang của bạn, nhưng nó có thể có bất kỳ lệnh nào bạn thích bên cạnh đó trong đó. Có thể nó thay đổi nội dung của một số tệp trên máy chủ của bạn, v.v.Điểm mấu chốt của điều này là mã php có thể được thực hiện từ html và tôi giả sử tập lệnh java, nhưng mặt trái là đầu ra duy nhất mà nó có thể đặt trên trang của bạn là một hình ảnh. Bạn cũng có tùy chọn chuyển các biến cho mã php thông qua các tham số trong url. Bộ đếm trang sẽ sử dụng kỹ thuật này trong nhiều trường hợp.

17

Có một số cách truyền biến từ javascript để php (không phải là trang hiện tại, dĩ nhiên)

Bạn có thể:

  1. gửi thông tin trong một hình thức như đã nêu ở đây, (sẽ cho kết quả trong một refresh trang)
  2. vượt qua nó trong ajax (vài bài viết trên đây về điều đó) (không phải refresh lại trang)
  3. hiện một yêu cầu http qua một yêu cầu XMLHttpRequest (không phải refresh lại trang) như thế này:
<script> 
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(); 
</script> 

tôi chắc chắn rằng điều này có thể được thực hiện để tìm fancier và lặp qua tất cả các biến và không có điều gì - nhưng tôi đã giữ nó cơ bản như để làm cho nó dễ dàng hơn để hiểu cho những người mới.

+0

làm thế nào về cách tôi sẽ nhận được các mảng db và vượt qua nó trên javascript mọi lúc tôi gửi một hình thức mới. thì biến trong javascript cũng sẽ thay đổi. làm sao? giúp tôi. :( – Vincent

+0

Ajax thực sự là XMLHttpRequest, sau này chỉ là một thuật ngữ kỹ thuật cho nó. –

12

chỉ cần lưu nó trong một cookie:

<script> 
$(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=/"; 
} 
</script> 

và sau đó đọc nó với php

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

của nó không phải là một giải pháp khá, nhưng nó hoạt động. Chúc mừng.

+1

Finaly !, công cụ chọn lọc hoạt động! Tôi đã tìm kiếm hàng giờ để chọn lựa, tạo trò chơi và muốn gửi điểm số cao nhất cho –

+0

thực sự, một giải pháp tuyệt vời của nó, đi từ php đến javascript thật dễ dàng, từ javascript đến php không dễ dàng, sử dụng cookie đơn giản, thanh lịch, không bs .. !! tất nhiên nếu khách hàng tắt cookie ,,, đó là vấn đề cần xử lý với mặc định .. –

+0

Bạn có thể vui lòng cho tôi biết cách sử dụng điều $ _COOKIE ["height"] để lấy tên, giá trị trong đó không? – Zac

2

Đây là cách tôi đã làm nó (cần thiết để chèn một múi giờ địa phương vào 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); 
0

Mã của bạn có một vài điều sai với nó

  • Bạn định nghĩa một hàm JavaScript, func_load3 (), nhưng đừng gọi nó là
  • Chức năng của bạn được xác định sai vị trí Khi nó được xác định trong trang của bạn, các đối tượng HTML mà nó đề cập đến chưa được tải. trước khi thực hiện hoặc bạn chỉ có thể di chuyển mã của mình qua các phần tử mà nó đề cập trong trang.
  • Biểu mẫu của bạn không có phương tiện để gửi. Nó cần một nút gửi.
  • Bạn không kiểm tra xem biểu mẫu của mình đã được gửi chưa.

Có thể đặt biến JavaScript trong biến ẩn trong biểu mẫu, sau đó gửi biến và đọc lại giá trị trong PHP. Dưới đây là một ví dụ đơn giản cho thấy điều này:

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

Đây là ví dụ hoạt động: Nhận giá trị biến javascript trên cùng một trang trong php.

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

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

Tôi đã cố gắng này consept sau đó thực sự làm việc, nhưng nếu tôi cố gắng như thế này: document.writeln (p1); ";?>, sau đó echo x; Nó không hoạt động.Bạn có cách nào khác không? –

+2

bạn có thể thử như thế này document.writeln (p1);"; echo $ x; ?> –

+0

Các php trong trường hợp này chỉ đơn giản là echo javascript để trang như một chuỗi. Javascript không được chuyển sang php. – Ben

-3

Có, nó làm việc cho tôi.

<script> var p1 = "success"; </script> 
<?php echo "<script>document.writeln(p1);</script>"; ?> 
+0

Tôi đã thử điều này sau đó thực sự làm việc, nhưng nếu tôi cố gắng như thế này: document.writeln (p1); ";?>, Sau đó echo x; Nó không hoạt động. Bạn có cách khác không? –

+0

thực sự, trong trường hợp này: x sẽ được thay thế bằng điều này.

+1

bạn nên viết $ x thay vì var x – ProCylon

5

Chúng ta có thể dễ dàng vượt qua giá trị thậm chí trên cùng/khác nhau trang bằng cách sử dụng các tập tin cookie bày trong đoạn mã như sau (Trong trường hợp của tôi, tôi đang sử dụng nó với hội nhập 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); 
       }); 
      } 
     } 

Và tôi đã truy cập nó (trong bất kỳ tập tin) sử dụng -

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

có thể là bạn có thể sử dụng phương pháp jquery serialize() để tất cả mọi thứ sẽ có mặt tại một đi.

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

// theo cách này bạn có thể nhận được giá trị ẩn cũng như ở phía máy chủ.

Các vấn đề liên quan