混合javascript和php

时间:2011-12-08 03:07:05

标签: php javascript

目标:

  1. 使用php连接数据库以提取结果
  2. 循环结果
  3. 以可在运行时访问
  4. 的方式存储结果

    我是如何尝试这样做的:

    1. 获取数据的SQL查询
    2. 使用列数据输入创建函数,将此数据作为javascript对象输出
    3. 将javascript对象存储在javascript数组中(尚未完成)
    4. 出于某种原因(对于训练有素的人来说,这可能是显而易见的,也可能是不明显的)我正在遇到一个错误。

      注意:数据库连接工作正常,并且无需任何问题即可获取正确的结果。问题是我试图通过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>
      

1 个答案:

答案 0 :(得分:3)

您的脚本在body元素关闭后。这不是有效的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>