![](/img/trans.png)
[英]How to fill dropdown box dynamically from database without submitting form and page refresh using AJAX in PHP?
[英]PHP\MYSQL\AJAX(?) - Struggling with how to dynamically update form without invoking page refresh
好的,因此,我是動態更新數據庫而不調用頁面刷新的新手。 我正在嘗試以更簡單的方式創建類似http://mytinytodo.net/的內容。
我要達到的最終目標是使程序達到以下目的:
到目前為止,我已經在這個小項目中花費了幾個小時,這是我所擁有的:
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.