0

好的,所以我在不调用页面刷新的情况下动态更新数据库是相当新的。我正在尝试以更简单的规模创建类似http://mytinytodo.net/的东西

我试图在这里达到的最终目标是让程序:

  1. 能够动态生成字段(完成)
  2. 在通过 PHP 加载时使用 MYSQL 数据库中的现有条目填充网页(完成)
  3. 允许用户“全选”或“取消全选”(完成)
  4. 记住用户的个人列表。也许是 Cookie?帮助!
  5. 使用用户对现有列表项所做的任何更改或提交新创建的列表项来更新数据库。阿贾克斯?jQuery?帮助!

到目前为止,我已经花了几个小时来完成这个小项目,这就是我所拥有的:

索引.php:

<!doctype html>
<html>
    <head>
    <metacharset="utf-8" />
    <title>Simple To-Do List</title>
    <?php
    // Create connection via my connect.php file
    require 'connect.php';

    // Create query
    $query = "select * from checklist";
    $result = mysql_query($query);

    // Create requisite array for checklist
    $checklistItems = array();

    //Check to ensure query won't implode and is valid
    if ($result === FALSE) {
        die(mysql_error());
    }

    // Calculates number of rows from query  
    $num = mysql_numrows($result);

    mysql_close($con);
    ?>
    <!-- javascript code to dynamically add new form fields as well as check\uncheck all boxes -->
    <script src="addInput.js" language="Javascript" type="text/javascript"></script>

</head>
<body>   

    <h1>My To-Dos</h1>


    <form name="checklist" id="checklist" action="" method="">
        <?php
        // Loop through query results     
        while ($row = mysql_fetch_array($result)) {
            $entry = $row['Entry'];
            $CID = $row['CID'];
            $checked = $row['Checked'];
            // echo $CID;
            echo "<input type=\"text\" value=\"$entry\" name=\"textfield$CID;\" id=\"textfield$CID;\" />";
            echo "<input type=\"checkbox\" value=\"\" name=\"checkbox$CID;\" id=\"checkbox$CID;\"  value=\"$checked\"" . (($checked == '1') ? ' checked="checked"' : '') . "  />";
            echo "<br>";
        }
        ?> 
        <div id="dynamicInput"></div>
        <input type="submit" id="checklistSubmit" name="checklistSubmit"> <input type="button" id="CompleteAll" name="CompleteAll" value="Check All" onclick="javascript:checkAll('checklist', true);"><input type="button" id="UncheckAll" name="UncheckAll" value="Uncheck All" onclick="javascript:checkAll('checklist', false);">               
        <input type="button" value="Add another text input" onClick="addInput('dynamicInput');"></form>
</body>
</html>

连接.php

<?php 

// Create connection
$con=mysql_connect("localhost","root","");
$selected = mysql_select_db("madmonk",$con); 

// Check connection
if (mysqli_connect_errno($con))
{
    echo "Failed to connect to MySQL: " . mysql_connect_error();
}

?>

总之,当一个表单字段发生“onchange”时,我如何谨慎地更新用户列表,而不必将整个页面扔到一个帖子文件中,然后将 URL 重定向回来?我不希望发生刷新。

如何创建一个 cookie 来记住用户是谁以及他的个人项目列表是什么?

这是我第一次真正尝试这样的事情。显然我还没有接近“造型”阶段,所以没有 CSS 或任何华而不实的东西。

编辑: 所以我现在有(基本上)唯一的会话变量,我用它来区分访问者,当他们在数据库中创建新的“清单”时,他们的“uid”将记录在那里。因此,只要会话持续,系统就会“记住”它们……我想这就是你们中的一些人在暗示我所做的。

4

3 回答 3

1

您可能喜欢使用 jQuery - 就基本的 JS 框架(和 ajax 的东西)而言,它会让您的生活更轻松。

其次,你总是可以使用会话。只需放置session_start()在您的 php 文件(所有已使用的文件)的顶部即可。然后您可以访问$_SESSION['name']并分配您想要的任何内容。

PHP 是无状态的——不推荐使用 cookie,如果可以避免,我不赞成。会话是服务器端的(但通常在客户端上放置一个会话 ID cookie.. 但仅此而已)并且通常可以信任。

至于“记住用户的个人列表......也许是 Cookie?” - 我以为你是用数据库来做这个的?

于 2013-05-31T23:09:49.847 回答
1

对于 AJAX 部分,您可以使用

$.ajax({                                      
            url: 'api.php',           //the script to call to get data          
            data: ''//you can insert url arguments here to pass to api.php
                                   //for example "id=5&parent=6"
            dataType: 'json',                //data format      
            success: function(data)          //on recieve of reply
            {
                //what you do after the script has been called
            } 
    });
于 2013-05-31T23:13:56.570 回答
1

假设您利用 Carlos 提供的 jQuery ajax 方法以及 Rob 所说的使用会话,那么您的 api.php 文件中可以包含类似的内容。

$json_data = $POST;

do_update($json_data);

function do_update($DATA) {
    if ($DATA['type'] == 'update') {        
        foreach ($json_data as $key=> $value) {
            $query .= " UPDATE table SET {$key} = '{$value}' WHERE user_id = '{$_SESSION['some_user_id']}' ";
        }
    } elseif ($DATA['type'] == 'delete') {      
        foreach ($json_data as $key=> $value) {
            $query .= " DELETE FROM table WHERE {$key} = '{$value}' AND user_id = '{$_SESSION['some_user_id']}' ";
        }
    }

    if (mysql_query($query)) {
        echo "Yay";
    } else {
        echo "Nay";
    }  
}
于 2013-05-31T23:44:19.830 回答