簡體   English   中英

PHP \\ MYSQL \\ AJAX(?)-如何在不調用頁面刷新的情況下動態更新表單

[英]PHP\MYSQL\AJAX(?) - Struggling with how to dynamically update form without invoking page refresh

好的,因此,我是動態更新數據庫而不調用頁面刷新的新手。 我正在嘗試以更簡單的方式創建類似http://mytinytodo.net/的內容。

我要達到的最終目標是使程序達到以下目的:

  1. 能夠動態生成字段(完整)
  2. 通過PHP在加載時使用MYSQL數據庫中的現有條目填充網頁(完整)
  3. 允許用戶“全部選中”或“全部取消選中”(完成)
  4. 記住用戶的個人列表。 救命!
  5. 使用用戶對現有列表項進行的任何更改來更新數據庫,或提交新創建的列表項。 AJAX? jQuery的? 救命!

到目前為止,我已經在這個小項目中花費了幾個小時,這是我所擁有的:

index.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>

connect.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”將被記錄在那里。 因此,只要會話持續,系統就會“記住”他們……我想這就是你們中某些人在暗示我的意思。

您可能想要使用jQuery-就基本的JS框架(和Ajax東西)而言,它將使您的生活更加輕松。

其次,您可以始終使用會話。 只需將session_start()放在您的php文件(已使用的所有文件session_start()的頂部即可。然后,您可以訪問$_SESSION['name']並為其分配任何內容。

PHP是無狀態的-不建議使用cookie,在可以避免的情況下,我會皺眉。 會話是服務器端的(但通常將會話ID cookie放在客戶端上..但沒有別的),通常可以信任。

至於“記住用戶的個人列表。。可能是Cookies?” -我以為您正在為此使用數據庫?

對於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
            } 
    });

假設您利用卡洛斯(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";
    }  
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM