我一直在寻找几个小时,这可能只是我作为一个新手,但我很难弄清楚如何动态地将文本输入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>");
}
我的问题是,此时我无法找到一种方法来捕获用户在输入字段中放置的内容(或者更准确地说是textareas)并将其放入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中运行。
这么长又短,我想弄清楚让用户编辑食谱的方法,我完全陷入困境。任何方向将非常感谢!
谢谢
答案 0 :(得分: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();
希望这有帮助