スクリプトは私の知る限り動作します。jQueryのJSONは、CIにデータを渡していない以下の適切
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$('#add').bind('keypress', function(e) {
if(e.keyCode == 13){
var add = $("#add").val();
$.ajax({
type: "POST",
dataType: "JSON",
url: "<?php echo site_url("home/jsonAddData"); ?>",
data: add,
json: {title_posted: true},
success: function(data){
if(data.title_posted == true) { // true means data was successfully posted.
$("#success").append("Success").fadeIn(400);
} else if(data.title_posted == false) { // false means data failed to post.
$("#success").append('Failure').fadeIn(400);
}
}
});
}
});
});
</script>
私は以下のコードで経験してる問題は、MySQL insetionクエリがちょうど仕事を文句を言わないということです。それはテーブルに行を作成し、自動的に増分しますが、何らかの奇妙な理由から、上のJavascriptの 'var add'を下のCiスクリプトに渡してDBに挿入しません。どのような考えやアイデアですか?
$.ajax({
...
data: {title: add}
で
<?php
class home extends CI_Controller {
function __construct() {
parent::__construct();
}
function index() {
$data = array();
$data['lists'] = $this->displayList();
$this->load->view('home', $data);
}
function displayList() {
$str = '';
$query = $this->db->query("SELECT * FROM data");
foreach ($query->result() as $row) {
$b = '<input name="completed" type="checkbox" />';
$a = $row->title . "<br>";
$str .= $b.$a;
}
return $str;
}
function jsonAddData() {
if($this->input->is_ajax_request()) {
$title = $this->input->post('title');
$query = $this->db->query("INSERT INTO data (title) VALUES ('$title')");
header('Content-type:application/json');
if($query) echo json_encode(array('title_posted' => true));
else echo json_encode(array('title_posted' => false));
}
}
}
?>
あなたはHTMLインジェクション(クロスサイトスクリプティング)とSQLインジェクション(データベース妥協)このスクリプトではセキュリティホールを持っています。あなたが出力したすべてのデータを 'htmlspecialchars($ row-> title)'ページにHTMLエンコードし、これを避けるためにパラメータ化されたクエリを使用します。 – bobince