【问题标题】:Transferring DB data between PHP and Javascript 2D array在 PHP 和 Javascript 二维数组之间传输数据库数据
【发布时间】:2012-01-15 21:03:49
【问题描述】:

我正在尝试使用 PHP 从 MySQL 数据库中获取所有数据,初始化一个二维 java 数组并使用 PHP 数据填充它。

我在 PHP 中嵌入 JS 时遇到问题。我已经标记了哪些有效,哪些无效。

正如您将看到的,一些嵌入式 java 可以工作,但不是全部。

有什么想法吗?

<body>

<?php
    $con = mysql_connect("XXXXXX.COM","guest","password");
    mysql_select_db("HHG", $con);

    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }
    else 
    {
        $result = mysql_query("SELECT * FROM articles", $con);
        $numrows = mysql_num_rows($result);
        echo "DB connection OK <br/>";
        echo "Found ";
        echo $numrows;
        echo " records <br/><br/>";
    } // EVERYTHING WORKS UP TO HERE
?> 


<script type="text/javascript">

document.write("THIS IS THE FISRT JS DOING SOMETHING"); // THIS DOES NOTHING
numrows = <?php echo $numrows; ?>; // THIS DOES NOTHING
string [][] hhgdata = new string[numrows][4]; // THIS DOES NOTHING
document.write("Records = " + numrows + "<br/>"); // THIS DOES NOTHING

</script>

<?
    $counter = 1;
    while ($row = mysql_fetch_assoc($result))
    {
        echo $row["idimg"]; echo "<br/>";  //THIS WORKS
        $hhgtitle = $row["hhgtitle"]; //THIS WORKS
        echo $hhgtitle; echo "<br/>"; //THIS WORKS

        ?>

        <script type="text/javascript"> //THIS WORKS
            counter = <?php echo $counter; ?>; //THIS WORKS
            document.write("counter = " + counter + "<br/><br/>"); //THIS WORKS

            hhgtitle = <?php echo $hhgtitle; ?>; // THIS DOES NOTHING
            document.write("Title: "); // THIS DOES NOTHING
            hhgdata[counter][1]= hhgtitle; // THIS DOES NOTHING
            document.write(hhgdata[counter][1]); // THIS DOES NOTHING
        </script>

        <?
        $counter++; // THIS WORKS
    }
?>

</body>

【问题讨论】:

  • 你能显示实际的最终 HTML 而不是源代码吗?您是否在控制台中遇到任何错误?
  • 我没有生成 HTML - 我只是将 MySQL 数据从 PHP 移动到 Javascript。只是试图让二维数组的最后一块来接受来自 PHP 变量的数据。
  • 无论您是生成 HTML 还是 JS - 显示 最终结果, 而不是 PHP 源代码。
  • 数组 hhgdata 的扩展来自 var hhgdata = [];到 hhgdata[变量] = [];似乎阻止了事情的运行。如果我在示例中使用实数,它会形成并显示数据。我的 HTML 页面上没有显示任何错误——只有 document.write 元素。对不起。菜鸟。

标签: php javascript mysql arrays


【解决方案1】:

您正在混淆 Java 和 JavaScript。例如这是 Java 语法,你不能在只包含 JavaScript 的脚本标签中写这个:

string [][] hhgdata = new string[numrows][4];

JavaScript 数组是动态的,这就足够了:

var hhgdata = [];

当您想在其中添加另一个数组时,就像您稍后在代码中所做的那样,只需执行以下操作:

hhgdata[counter] = [];

然后赋值给内部数组:

hhgdata[counter][1] = hhgtitle;

您还创建了多个将不带引号的字符串文字分配给变量(假设 $hhgtitle 包含一个字符串):

hhgtitle = <?php echo $hhgtitle; ?>;

应该是这样的:

hhgtitle = <?php echo '"' . $hhgtitle .'"'; ?>;

最后,虽然它并没有错,但您的 PHP while 循环正在您的 HTML 中创建多个 script 元素。

编辑

我已经进行了上述以及 cmets 中的更改,完全复制粘贴,看看效果如何:

<body>

<?php
    $con = mysql_connect("XXXXXX.COM","guest","password");
    mysql_select_db("HHG", $con);

    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }
    else 
    {
        $result = mysql_query("SELECT * FROM articles", $con);
        $numrows = mysql_num_rows($result);
        echo "DB connection OK <br/>";
        echo "Found ";
        echo $numrows;
        echo " records <br/><br/>";
    } // EVERYTHING WORKS UP TO HERE
?> 

<script type="text/javascript">
    document.write("THIS IS THE FISRT JS DOING SOMETHING"); // THIS DOES NOTHING
    numrows = <?php echo $numrows; ?>; // THIS DOES NOTHING
    var hhgdata = new Array(numrows); // THIS DOES NOTHING
    document.write("Records = " + numrows + "<br/>"); // THIS DOES NOTHING
</script>

<?php
    $counter = 1;
    while ($row = mysql_fetch_assoc($result))
    {
        echo $row["idimg"]; echo "<br/>";  //THIS WORKS
        $hhgtitle = $row["hhgtitle"]; //THIS WORKS
        echo $hhgtitle; echo "<br/>"; //THIS WORKS
?>
<script type="text/javascript"> //THIS WORKS
    var counter = <?php echo $counter; ?>; //THIS WORKS
    document.write("counter = " + counter); //THIS WORKS
    hhgtitle = <?php echo '"' . $hhgtitle . '"'; ?>; // THIS DOES NOTHING
    document.write("Title: "); // THIS DOES NOTHING
    hhgdata[counter] = [];
    hhgdata[counter][1]= hhgtitle; // THIS DOES NOTHING
    document.write("<br />hhgdata[counter][1]: " + hhgdata[counter][1]); // THIS DOES NOTHING
</script>
<?php
        $counter++; // THIS WORKS
    }
?>

</body>

【讨论】:

  • 第一个脚本更改为: 这似乎行得通。
  • 第二个脚本:'while ($row = mysql_fetch_assoc($result)) { $hhgtitle = $row["hhgtitle"]; //这有效 $hhgtextlong = $row["text_long"]; $hhgtextshort = $row["text_short"]; $hhgidimg = $row["idimg"]; ?>
  • 请编辑您的原始问题并将这些更改添加到帖子的末尾(最好在“编辑”子标题下)。很难弄清楚什么是有效的,什么是无效的。
  • 这是我的第一篇文章,所以几个小时内我无法添加任何内容。数组的第二次迭代 hhgdata[counter] = [];似乎不起作用,然后将数据添加为 hhgdata[counter][1]=hhgtitle;以及随后的 document.write(hhgdata[counter][1]);没有做任何我能看到的事情。
  • 您在第二个和第三个 PHP 脚本段中缺少正确的 PHP 声明。它们看起来像这样:' $计数器 = 1;'和' $计数器++;'。向它们添加单词 'php',使它们看起来像这样:'
【解决方案2】:

为什么不直接把 PHP 数组的数据和 json_encode 拿起来呢?然后你可以在 Javascript 中使用它,见下文:

var json = <?php echo json_encode($foo); ?>;

您可以在此处了解有关如何执行此操作的更多信息:http://www.openjs.com/scripts/data/json_encode.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多