0

私は何時間も検索してきましたが、おそらく私は初心者ですが、変数を受け入れないため (またはそう信じている)、sqlite3 クエリにテキストを動的に入力する方法を理解するのに非常に苦労しています。

これが私がやろうとしていることです:

ユーザーは現在、TideSDK アプリでレシピを表示できます。レシピのコンテンツは、recipes.db というファイルから生成されます。

このコードは、個々のレシピをメイン画面に読み込みます。

function doMainChange70() {
    var db = Ti.Database.openFile(Ti.Filesystem.getFile(Ti.Filesystem.getApplicationDataDirectory(), 'recipes.db'));
    var rows = db.execute("SELECT * FROM recipe WHERE number = '70'");
    while (rows.isValidRow()) {
    $('#foodFoto').empty();
    $('#titleArea').empty();
    $('#servings').empty();
    $('#tagline').empty();
    $('#ingredients').empty();
    $('#directions').empty();
    $('#nutrition').empty();
    $('#foodFoto').append("<img src='foodPics/r" + rows.fieldByName('number') + ".jpg' />");
    $('#titleArea').append("<p>" + rows.fieldByName('title') + '</p>');
    $('#servings').append("<p>" + rows.fieldByName('servings') + '</p>');
    $('#tagline').append("<p>" + rows.fieldByName('tagline') + '</p>');
    //$('#ingredients').
    $('#directions').append("<p>" + rows.fieldByName('directions') + '</p>');
    $('#nutrition').append("<p>" + rows.fieldByName('nutrition') + '</p>');
    $('#editBtn').remove();
    $('#mainBtns').append("<a href='#' id='editBtn'" + 'onclick=' + 'editRecipe' + rows.fieldByName('number') + "()><img src='RecipeButton5.png' /></a>");
    rows.next();
    rows.close();
    db.close();
    return false;
}

}

ユーザーがレシピを編集できるようにしたいと思います。現在、編集ボタンをクリックすると、レシピのすべてのフィールドが入力タグに変更され、ユーザーは編集できます。

function editRecipe70() {
$('#editBtn').removeAttr('onclick');
var db = Ti.Database.openFile(Ti.Filesystem.getFile(Ti.Filesystem.getApplicationDataDirectory(), 'recipes.db'));
var rows = db.execute("SELECT * FROM recipe WHERE number = '70'");
while (rows.isValidRow()) {
$('#editBtn').html("<img src='saveRecipeButton.png' />");
$('#formContainer').empty();
$('#formContainer').append("<form id='sendEdit'><textarea type='text' name='title' id='title'>" + rows.fieldByName('title') + "</textarea><br>" + "<textarea type='text' name='servings'>" + rows.fieldByName('servings') + "</textarea><br>" + "<textarea type='text' name='tagline'>" + rows.fieldByName('tagline') + "</textarea><br>" + "<textarea type='text' name='directions'>" + rows.fieldByName('directions') + "</textarea><br>" + "<textarea type='text' name='nutrition'>" + rows.fieldByName('nutrition') + "</textarea><br>" + "<input type='submit'></form>");

}

私の問題は、この時点で、ユーザーが入力フィールド (またはより正確にはテキストエリア) に配置したものをキャプチャして、それを sqlite3 クエリ文字列に配置する方法を理解できないことです。

次のようなものを使用して、js で db をクエリできます。

UPDATE recipeTable SET title='best recipe ever' WHERE number='70';

しかし、このようなものはありません(これが必要です):

UPDATE recipeTable SET title = '[formValueForTitle]' WHERE number = '70';

これが私の最初の質問であることをお詫び申し上げます。私はサイト上の多くの投稿を見てきましたが、当面の解決策はphpを使用してフォーム値を前処理しているようですが、TideSDKのphpモジュールは現在sqlite3をサポートしていないことを読みました。コードを index.html に戻して js で実行します。

要するに、ユーザーがレシピを編集できるようにする方法を見つけたいのですが、完全に立ち往生しています。どんな方向でも大歓迎です!

ありがとうございました

4

1 に答える 1

0

これは私がそれを行う方法です:

 var inputfromform = 'I got this back from the form';
  var number = 7;
  db = Ti.Database.open(dbname); // or openFile etc
  db.execute("BEGIN IMMEDIATE TRANSACTION;");
  db.execute("UPDATE recipeTable SET title = ? WHERE number = ?;", inputfromform, number);
  db.execute("COMMIT TRANSACTION;");
  db.close();

お役に立てれば

于 2013-03-15T13:41:04.253 に答える