0

这就是我想要的,在名为 input.php 的 PHP 页面上,用户通过 html 表单提交用户名。这将存储到 MYSQL 数据库中。有一个名为 results.php 的页面查询 MYSQL 数据库中的所有用户名。

我需要发生的是,每隔 5 秒左右,一些 jquery 代码(可能是 getJSON)将从 results.php(同一页面)中获取一个 JSON 字符串。这个 JSON 字符串可能会随着用户在 input.php 页面上添加更多用户名而更新。

这是 input.php 文件

        <form name="input" action="<?php $_SERVER['PHP_SELF']?>" method="post">
        Usernames: <input type="text" name="usernames" />
         <input type="submit" value="Submit" name="submit" />
    </form>

    <?php

    if(isset($_POST['submit'])) {
        $link = mysql_connect('', '', '');
        if (!$link) {
            die('Could not connect: ' . mysql_error());
        }

        $db_selected = mysql_select_db('', $link);
        if (!$db_selected) {
            die ('Can\'t use  : ' . mysql_error());
        }

        $result = mysql_query("INSERT INTO users(user_name)             VALUES('".$_POST['usernames']."')");
        if (!$result) {
            die('Invalid query: ' . mysql_error());
        }


    }
    ?>

这是 results.php 文件

    <script
        type="text/javascript" src="jquery-1.7.1.min.js"></script>
    <?php

    $link = mysql_connect('localhost', 'root', '');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }

    $db_selected = mysql_select_db('test', $link);
    if (!$db_selected) {
        die ('Can\'t use test : ' . mysql_error());
    }

    $result = mysql_query("SELECT user_name FROM users");
    if (!$result) {
        die('Invalid query: ' . mysql_error());
    }


    $names = array();

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

        foreach ($row as $key => $val) {

            $names[][$key] = $val;
        }
    }

    echo json_encode($names);


    ?>
    <script type="text/javascript"> 




        $.getJSON("http://localhost/test/results.php", function(json){
            alert("JSON Data: " + json);
        });

    </script>



    <div></div>

我被困在要放什么 jquery 上,或者即使我做得正确。最终结果就像 Gmail 一样,您无需刷新页面即可收到电子邮件。但是我的系统会每 5 秒从数据库中检索一次用户名,而无需刷新页面。我已经阅读了有关 getJSON 方法的信息,但我完全不了解它,所以我可能需要一些非常深入的解释。如果我以错误的方式实现这一目标,请告诉我并告知我如何实现这一目标的良好做法。

我在我的浏览器中尝试这个 url,除了来自 php 代码的回显 JSON 字符串之外没有任何结果。

这是我的 JSON 字符串

[{"user_name":"matt"},{"user_name":"matt"},{"user_name":"peter"},{"user_name":"jim"},{"user_name":"sam"} ]

4

3 回答 3

0

你可以使用 setTimeout。

   setTimeout( function() {
    getData()
  }, 5000);

 function getData() {
    $.getJSON("http://localhost/test/results.php", function(json){
        alert("JSON Data: " + json);
    });
    });
   }
于 2012-05-11T23:37:59.840 回答
0

您正在寻找的东西称为 AJAX,您需要 javascript 才能完成它。如果你想要一种时尚而简单的方法,我会推荐 jQuery。你的代码看起来像这样:

setTimeout(function(){
    $.post("results.php",function(result){
        //Do somthing with the result Array or object
    },"json");
},5000);

此外,由于您只获取 1 条数据“用户名”,因此您应该返回数组 json 而不是对象 json

["matt","matt","peter","jim","sam"]

您和您的用户都应该减少带宽。

注意:您应该从 results.php 中删除 jquery 脚本,您唯一应该重新调整的是 json 本身。如果有任何疑问,请问

于 2012-05-11T23:38:31.253 回答
0

如果你想使用 results.php 来做这两件事(即显示用户名以及响应 JSON 查询),那么你需要将文件分成两个分支。使用 _GET 变量来指定哪个分支。例如,您将在 results.php?json=true 上运行 .getJSON 而不仅仅是 results.php。现在在 results.php 内部有一个 if 分支来检查这个 _GET 变量是否存在,如果存在,获取你需要的数据,在一个 json 编码的字符串中回显它,然后 exit()。在 results.php 中执行所有这些操作之前,甚至在<script>tag 之前。

编辑提供代码:(从OP的问题编辑)

<?php
    $link = mysql_connect('localhost', 'root', '');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }

    $db_selected = mysql_select_db('test', $link);
    if (!$db_selected) {
        die ('Can\'t use test : ' . mysql_error());
    }

    $result = mysql_query("SELECT user_name FROM users");
    if (!$result) {
        die('Invalid query: ' . mysql_error());
    }

    $names = array();

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

        foreach ($row as $key => $val) {

            $names[][$key] = $val;
        }
    }

    if (isset($_GET['json'])) {
        echo json_encode($names);
        exit();
    }

    ?>
    <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
    <script type="text/javascript"> 
        $.getJSON("http://localhost/test/results.php?json=true", function(json){
            alert("JSON Data: " + json);
        });
    </script>



    <div></div>
于 2012-05-11T23:17:03.743 回答