1

我有一个 php 网页,其中显示了一个带有特定日期的日历。

日期存储在 MySql 数据库中。

在网页的开头,我执行以下操作:

<?php
//Load in database

$query = "SELECT ID, Full_Name, Arrival_Date, Departure_Date FROM bookings ORDER BY Arrival_Date";

if ($result = $dbc->query($query))       //Retrieve all the booking details
{
    $numrows = $result-> num_rows;

    $id_array;
    $name_array;
    $arrival_array;
    $departure_array;

    for ($count = 0; $count < $numrows; $count++)
    {
        $row = $result->fetch_assoc();

        $id_array[$count] = $row['ID'];
        $name_array[$count] = $row['Full_Name'];
        $arrival_array[$count] = $row['Arrival_Date'];
        $departure_array[$count] = strval($row['Departure_Date']);
    }
}
else
{
    //Error
}
?>

ID 是一个数字 Full_Name 是一个字符串 Arrival_Date 和 Departure_Date 是日期 (YYYY-MM-DD)

日历是一个 javascript 对象,因此我需要将预订信息输入到我的 javascript 函数中才能使用它。

这就是我试图做到这一点的方式:

<script type="text/javascript">
    var array_ID = [<?php echo implode(",",$id_array); ?>];
    var array_name = [<?php echo implode(",",$name_array); ?>];
    var array_arrival = [<?php echo implode(",",$arrival_array); ?>];                                           
    var array_departure = [<?php echo implode(",",$departure_array); ?>]; 

    var booking_numbers = <?php echo $numrows; ?>;
</script>

但是,我在行上收到错误“未捕获的语法错误:意外的标识符”

var array_name = [<?php echo implode(",",$name_array); ?>];

我怀疑这是因为一些名称中有空格,因为数组即将出现

var array_name = [Pippa,Pippa Smith,Pippa Smith];

当输入 php 值时。

所以这是我的问题。我如何告诉 javascript 将这些输入视为字符串。

而且我知道这可能是结合 javascript 和 php 的糟糕方式,所以如果有人有更好的建议,我会很乐意接受!

4

2 回答 2

3

1) 一种解决方法是implode在 php 中使用并在 javascript 中使用split..

最好的方法是echo json_encode($id_array)在 php 中使用,以便将数组转换为 javascript 对象

于 2013-03-08T13:11:34.523 回答
1

您必须通过将它们放在引号之间来标记 javascript 的字符串文字。

var array_name = ["Pippa","Pippa Smith","Pippa Smith"];

使用json_encode()从您的 php 值中获取有效的 javascript 对象文字。


附带说明:为什么要更改数据的结构

[1] x y z
[2] X Y Z

 [1]  [2]
  x    X
  y    Y
  z    Z

即为什么你有那些单独的变量array_ID, array_name, array_arrival, array_departure而不是一个包含所有信息的数组?

于 2013-03-08T13:10:24.987 回答