2011-12-27 5 views
1

スクリプトは私の知る限り動作します。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)); 
     } 
    } 
} 
?> 
+0

あなたはHTMLインジェクション(クロスサイトスクリプティング)とSQLインジェクション(データベース妥協)このスクリプトではセキュリティホールを持っています。あなたが出力したすべてのデータを 'htmlspecialchars($ row-> title)'ページにHTMLエンコードし、これを避けるためにパラメータ化されたクエリを使用します。 – bobince

答えて

4

だけではなく、文字列

+0

これは大丈夫です... JSON要素として渡す必要がありますか?しかし、それは動作します...ありがとう男! –

+1

@MichaelGrigsby "JSON要素"を渡すことはありません.Javascriptではそのようなことはありません。そして、あなたは[JSON](http://www.json.org/)をサーバーに送信していません。これはURLエンコードされたクエリ文字列に変換され、POSTリクエストで使用できるようになります。文字列を渡したい場合、 'data: 'title =' + escapeURIComponent(add)'を実行する必要があります。あなたは['$ .ajax'マニュアルページ(http://api.jquery.com/jQuery.ajax/)を読んで[HTTP POST]について学んでください(http://en.wikipedia.org/wiki/POST_ (HTTP))要求を含む。 – DaveRandom

+0

私は悪い、笑それは私がJavascriptで働いてから数ヶ月です。私はまだそれを学んでいます。これはJSONが使用する形式です...だから、単なるオブジェクトですか?私はPOSTとGETリクエストについて知っています...私は2009年からPHPに取り組んでいます。 –

関連する問題