2011-12-08 58 views
-1

目標:混合的JavaScript和PHP

    使用PHP提取結果
  1. 遍歷結果
  2. 連接到數據庫
  3. 存儲結果的方式使得在在運行時可以訪問

我如何試圖做到這一點:

  1. SQL QUER y以獲得數據
  2. 創建列數據的輸入功能,該數據輸出作爲javascript對象
  3. 商店javascript對象的javascript數組中(尚未完成的)

出於某種原因(其可以或可以對於訓練有素的眼睛不是顯而易見的)我遇到了一個錯誤。

注意:數據庫連接完美工作,並且正確的結果不會被提取。問題是我試圖通過php執行我的JavaScript的100%的方式。我假設PHP正在看到var等,並正在編譯它。

請告知下面的代碼,如果需要更多的細節,我會高興地擴大:

 <? 
     if (!isset($_COOKIE['authPw'])){ 
     echo '<script>window.location="http://www.google.com"</script>'; 
     } 
     ?> 
     <html> 
      <head> 
      </head> 

      <body> 

      <? 

      function jsEcho($i,$cN,$fN,$lN,$pN,$eM){ 
       $jString="var appObj = new Object();"; 
       $jString+="appObj.id=" + $i + ";"; 
       $jString+="appObj.companyName=\'" + $cN + "\';"; 
       $jString+="appObj.firstName=\'" + $fN + "\';"; 
       $jString+="appObj.lastName=\'" + $lN + "\';"; 
       $jString+="appObj.phoneNumber=\'" + $pN + "\';"; 
       $jString+="appObj.eMail=\'" + $eM + "\';"; 
       //echo "1ONE1".$jString."2TWO2"; 
       return $jString; 
      } 

      $host="localhost"; // Host name 
      $username="abc"; // Mysql username 
      $password="def"; // Mysql password 
      $db_name="ghi"; // Database name 
      $tbl_name="jkl"; // Table name 





      $link=mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
      mysql_select_db("$db_name")or die("cannot select DB"); 

      $mySQL="select * from ".$tbl_name.";"; 
      echo $mySQL; 
      $result=mysql_query($mySQL); 
      $jS="var aApps=new Array();"; 

       while ($row = mysql_fetch_array($result)) 
       { 

        $iD=$row["id"]; 
        $companyName=$row["companyName"]; 
        $firstName=$row["firstName"]; 
        $lastName=$row["lastName"]; 
        $phone=$row["phone"]; 
        $email=$row["email"]; 

        $jS+=jsEcho($iD,$companyName,$firstName,$lastName,$phone,$email); 
         } 

      ?> 


      </body> 
      <? 
      echo '<script>'; 
        echo $jS; 
      echo '</script>'; 
      ?> 
     </html> 
+0

哇...這就是激烈的...嘗試調查JavaScript負載和eval()函數。 –

+1

這個腳本的實際輸出是什麼?查看 - 在瀏覽器中查看它。 –

+1

儘量不要像這樣使用PHP生成JavaScript。相反,使用Ajax並從服務器獲取JSON。 – Ryan

回答

3

你的腳本是主體元素後關閉。這不是有效的HTML。可能它沒有被評估。我懷疑輸出也是無效的JavaScript。

此外,您的jsEcho方法是冗長,不安全和不必要的。使用此模式:

<?php 
// prepare all your data as a single PHP object or array 
$jsdata = array(); 
while ($row = mysql_fetch_object($result)) { 
    $jsdata[] = $row; 
} 

// now encode to JSON 
$jsenc = json_encode($jsdata); 

// now html-escape it 
?> 
<script> 
var allMyData = <?php echo htmlspecialchars($jsenc, ENT_NOQUOTES, 'utf-8')?>; 
</script> 
+0

這看起來很完美。我不知道json_encode或htmlspecialchars等現在給它一個旋風。 –

+0

這是完成我的目標的完美方法。如上所述,這就是說,使用ajax更容易。經過一番摸索後,我退後一步,發現我目前的做法是100%可怕的。 –

+0

有時你只需要將一些數據寫入你的頁面上的js,並向服務器提出一個單獨的請求就是矯枉過正。這取決於實際情況。 –