-1

テキスト フィールドの値をデータベースに挿入しています。実際、ユーザーが (,"",'') カンマ シングル コード、ダブル コードを使用すると、アプリケーションがクラッシュします。データベースにこれらの文字を追加できないと思いますか? この文字を削除する方法を教えてください。挿入クエリをクラッシュさせないこの文字のみを許可する必要があります。phonegapでsqliteを使用しています。

これを見つけましたが、データベースで一部の文字が許可されているため、これは良い解決策ではありません

$(document).on("keyup", ".caseName_h", function () {
  if (/[^\w]/g.test($(this).val())) {
    $(this).val($(this).val().replace(/[^\w]/g, ""));
    PG_alert('Special characters not allowed!');
   }
 });

 function insertData() {
     db.transaction(createTable, errorCB, afterSuccessTableCreation);
 }

 //create table and insert some record
 function createTable(tx) {
     tx.executeSql('CREATE TABLE IF NOT EXISTS CaseTable (id INTEGER PRIMARY KEY AUTOINCREMENT, CaseName  VARCHAR(100) unique NOT NULL ,CaseDate INTEGER ,TextArea VARCHAR(200) NOT NULL)');

     tx.executeSql('INSERT OR IGNORE INTO CaseTable(CaseName,CaseDate,TextArea) VALUES ("' + $('.caseName_h').val() + '", "' + $('.caseDate_h').val() + '","' + $('.caseTextArea_h').val() + '")');

 }
 //function will be called when an error occurred
 function errorCB(err) {
     navigator.notification.alert("Error processing SQL: " + err.code);
 }

 //function will be called when process succeed
 function afterSuccessTableCreation() {
     console.log("success!");
     db.transaction(getallTableData, errorCB);
 }

 //select all from SoccerPlayer
 function getallTableData(tx) {
     // tx.executeSql("DROP TABLE IF EXISTS a");       
     tx.executeSql('SELECT * FROM CaseTable', [], querySuccess, errorCB);
 }

 /*function querySuccess(){
for (var i = 0; i < len; i++) {
    alert(result.rows.item(0).CaseName)
        db.transaction(function (tx) {

 tx.executeSql('SELECT * FROM "'+result.rows.item(0).CaseName+'"', [],
   // tx.executeSql('SELECT EXISTS(SELECT * FROM  b)', [],
              function(tx, results) {
               t=results.rows.length;
               alert(t)
});
    });

}

}*/

 function querySuccess(tx, result) {
     var len = result.rows.length;
     var countDoument = 0
     $('#folderData').empty();
     for (var i = 0; i < len; i++) {

         currentTableName = result.rows.item(i).CaseName;

         countElements(currentTableName, function (i) {
             return function (result_count) {
                 countDoument = result_count; // here it count value 

                 $('#folderData').append(
                     '<li class="caseRowClick" id="' + result.rows.item(i).id + '" data-rel="popup" data-position-to="window">' + '<a href="#">' + '<img src="img/Blue-Folder.png">' + '<h2>' + result.rows.item(i).CaseName + '</h2>' + '<p>' + result.rows.item(i).TextArea + '</p>' + '<p>' + result.rows.item(i).CaseDate + '</p>' + '<span class="ui-li-count">' + countDoument + '</span>' + '</a>' +
                     '<span class="ctrl togg"><fieldset data-role="controlgroup" data-type="horizontal" data-mini="true" ><button class="edit button_design">Edit</button><button class="del button_design">Delete</button></fieldset><span>' + '</li>');
                 $('#folderData').listview('refresh');

             };
         }(i));
     }
 }
 tx.executeSql('INSERT OR IGNORE INTO CaseTable(CaseName,CaseDate,TextArea) VALUES ("' + $('.caseName_h').val() + '", "' + $('.caseDate_h').val() + '","' + $('.caseTextArea_h').val() + '")');
4

3 に答える 3

2

これを使えば助かります..

 tx.executeSql('INSERT INTO Tab(Name, Date) VALUES(?,?)',
              [$('.caseName_h').val(),
               $('.caseDate_h').val()]);
于 2013-07-26T08:58:51.143 に答える
0

encodeURIComponent("The special characters.") のようなものを試してください。

これにより、すべての特殊文字を許可できます。

于 2013-07-26T07:15:30.460 に答える
0

これらの文字をデータベースに挿入することはできますが、エスケープする必要があります。

最善の方法は、PDO の準備済みクエリを使用することです。この場合、クエリ内の要素を "?" などのインジケーターで定義できます。または :value を指定し、その内容を PDO->execute($args) メソッドに入れます。

このような場合に特殊文字を許可しないことは、ユーザーフレンドリーではありません。特殊文字を挿入する必要があるか、またはそのような文字を挿入する必要があるからです。

まず、情報をデータベースに送信する方法を確認することをお勧めします。db にリクエストを送信する方法を教えてください。

于 2013-07-26T07:07:13.447 に答える