很久以前我寫了一個基於Web的配方管理程序。它使用CodeIgnitor(2)編寫。食譜在搜索或瀏覽時顯示在列表視圖中,並且可以在可以輸入/更改字段的編輯視圖中顯示。我希望能夠在列表視圖中編輯一些食譜信息,而無需打開編輯器窗口,進行更改,然後單擊「提交」。這些更改只是設置或取消設置複選框。食譜具有某些屬性,如「新建」或標記爲「導出」,並且這些屬性顯示爲經過適當驗證的用戶可以操作的複選框。使用AJAX和CodeIgnitor在單擊複選框時更新數據庫中的字段
我發現了一些如何實現一個簡單的AJAX例程來做到這一點的代碼示例。而且,直到最近我更新CodeIgnitor的最新版本3.x版本時,它才運行良好。
我真的可以用一些幫助來弄清楚如何讓這個工作再次。並且,甚至可能將數據庫調用集成到基於CodeIgnitor的模型中,而不是作爲CodeIgnitor框架之外的獨立php腳本。而且,由於我的編程技巧已經過時,並且跟上了像JSON,AJAX等技術的步伐,所以我會很感激不會從我的特定需求中抽象出來的具體幫助。 ;-)我已經看到其他帖子要求類似的幫助,但無法弄清楚如何將其應用於我的情況。
這是我今天不再有效。這是加在這裏我想這個功能的網頁HTML標頭腳本:
<script language="JavaScript"><!--
function chkit(row, chk, field) {
chk = (chk==true ? "1" : "0");
var url = "http://localhost/recipes/check_validate.php?number="+row+"&chkYesNo="+chk+"&field="+field;
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if(window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
// Use get instead of post.
req.open("GET", url, true);
req.send(null);
}
//-->
</script>
列出的每個配方有如上所述與之相關的幾個複選框。每個複選框的源代碼,看起來像這樣結束:
<input type="checkbox" name="f_attribute6_1052" value="0" onclick="chkit(1052, this.checked, 'attribute6');" />
所以,我的理解是,當點擊打開或關閉複選框,在「chkit」 javascript函數被調用,並通過配方號(在這種情況下爲1052),複選框的狀態(true或false)以及屬性字段的名稱,在本例中爲「attribute6」。
該腳本運行一個名爲'check_validate.php'的php腳本。而且,這裏是代碼爲:
<?php
// Would be nice to generalize this, even integrate with the recipe model code
$dbhost = 'localhost'; // usually localhost
$dbuser = 'username'; // database username
$dbpass = 'password'; // database password
$db = @mysql_connect($dbhost, $dbuser, $dbpass) or die ("Database connection failed.");
mysql_select_db('recipe_db');
// Get the variables.
$number = $_GET['number'];
$value = $_GET['chkYesNo'];
$field = $_GET['field'];
$sql = "UPDATE recipes SET $field = $value WHERE recipeNumber=$number";
mysql_query($sql) or die(mysql_error());
?>
現在,我知道有一個直接的問題。由於我沒有抽象這些數據庫調用並直接使用mysql,因此需要更改爲使用mysqli。
最好的辦法是將這個最後的php腳本移動到我的模型代碼中的一個函數中,以擺脫非CodeIgnitor php腳本。而且,我知道我在HTML標頭中使用的JavaScript非常陳舊,過時並且不安全。
記住,我不是一個真正受過訓練的編碼器,並且需要在這裏;-)
https://vitalets.github.io/x-editable/ –