2017-04-15 66 views
2

很久以前我寫了一個基於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非常陳舊,過時並且不安全。

記住,我不是一個真正受過訓練的編碼器,並且需要在這裏;-)

+0

https://vitalets.github.io/x-editable/ –

回答

0

手把手的指導,我改變了check_validate.php這樣:

<?php 
// Would be nice to generalize this, even integrate with the recipe model code 
$dbhost = 'localhost';  // usually localhost, this mimics what is in the database config file 
$dbuser = 'user';  // database username 
$dbpass = 'pass'; // database password 
$dbname = 'recipes';  // database name 

$db = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 

if ($db->connect_error) { 
    trigger_error('Database connection failed: ' . $db->connect_error, E_USER_ERROR); 
} 

$number = $_GET['number']; 
$value = $_GET['chkYesNo']; 
$field = $_GET['field']; 

$sql = "UPDATE recipes SET $field = $value WHERE recipeNumber=$number"; 

$rs=$db->query($sql); 

if($rs === false) { 
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $db->error, E_USER_ERROR); 
} else { 
    $rows_returned = $rs->num_rows; 
} 

?> 

而且,它的工作原理。我仍然在我的js控制檯中發現一些Access-Control-Allow-Origin錯誤,所以需要跟蹤它。但是,功能已恢復,代碼正常工作。所以,解決方案只是mysqli而不是mysql的正確實現。

相關問題