2013-08-24 31 views
0
$name="document.write(get_name());"; 

echo $n= $name; // Here it prints name also (correct one) 

$sql=mysql_query("INSERT INTO tab1 (name,visited_time) values ('$n',NOW())"); 

理想情況下這應該打印got name from the function但它插入 document.write(get_name());的JavaScript(文件撰寫(函數()))值到PHP的MySQL的INSERT語句

注:get_name功能正常返回值。而功能是強制性的。只有問題是它插入document.write(get_name());,而不是它的價值。

+2

您在PHP中使用JS?您必須加載頁面,並且必須使用AJAX請求發送名稱並返回結果。 –

+1

可能的重複[參考:爲什麼我的Javascript中的PHP(或其他服務器端)代碼無法正常工作?](http://stackoverflow.com/questions/13840429/reference-why-does-the-php-or- other-server-side-code-in-my-javascript-not-wor) –

+0

你可以顯示get_name的代碼或告訴我們它產生了什麼。也許你可以創建一個PHP版本 – Class

回答

0

看起來你錯過了關於PHP/JS編程的重要篇章... PHP代碼是在服務器端執行的。 JavaScript代碼在客戶端執行。

的措施來解決這個是:

  • 只要你需要這個查詢被執行,你需要從JavaScript以PHP的調用和變量傳遞到PHP。這裏

    // JS, executed on client side 
    var name = get_name(); // this javascript function must exist 
    $.get("path/to/your/page.php", {"name":name}); 
    

    更多關於jQuery的:你可以用jQuery的異步調用,例如做http://api.jquery.com/jQuery.get/

  • 然後,在PHP中,你從全局的$ _GET這個值,你可以使用它:

    // php code that will be executed when path/to/your/page.php will be called 
    $name = $_GET['name']; 
    $sql = "INSERT INTO tab1 (name,visited_time) values ('" . $name . "',NOW())"; 
    $rs= mysql_query($sql); 
    

而且,會做你的期望。

您可以使用此代碼來實現邏輯,但它需要大量的改進,那麼:

  1. 這是非常不安全的,並留下空間,讓最簡單的SQL注入攻擊。您必須「引用」您在SQL查詢中使用的所有值(您不能相信來自客戶端的任何數據)
  2. $ _GET ['name']可能不存在或包含除了您所需的功能,因此您需要使用功能像isset和做更多的測試後,確認沒有人試圖破解您的變量
  3. 你應該POST方法,並沒有得到,因爲這個HTTP調用將導致改變datbase
  4. 的mysql_query已被棄用的狀態:http://us2.php.net/manual/en/function.mysql-query.php你應該使用mysqli_query或PDO ...

我不會談論所有這些話題,他們高度覆蓋網絡和簡單搜索您最喜愛的搜索引擎將會提供您需要的所有信息。

注意:我寫到「JavaScript代碼在客戶端執行」。這並不完全正確,因爲可以用JavaScript構建一個服務器,但這遠離您的擔心,甚至不會改變您仍然需要將值從客戶端發送到具有我剛剛描述的一種邏輯。