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 中的数据库:

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 回答