2016-10-02 7 views
2

私はWebアプリケーションを開発中で、次のコードでいくつかの問題が発生しています。私は値を更新する必要があるデータベースを持っています。値を更新しようとすると、範囲外のエラーが発生しますが、Pythonでコードを実行すると、Webパーツを使用せずに実行され、期待通りに実行されます。試してみると何が変わっているのか分かりません一部はフラスコとHTML形式です。ここで私のコードは、データベースを更新することです。Flask/Pythonを使用した範囲外のインデックス

EDIT ::より多くのテストを行った後、必要なデータを/ poplessonにプッシュするフォームに問題があるようです。これらの行を変更する場合。

user_id = 1 
pck_id = 1 

user_id = request.form['clientid'] 
pck_id = request.form['packageid'] 

予定通り、それは動作しますが、しかしそれは私がそれらのIDのは、DBからプルする必要があるように私は必要なものではありません。

@app.route("/poplesson", methods=['GET', 'POST']) 
def poplesson(): 
if request.method == 'GET': 
    return render_template('view_packages.html') 
elif request.method == 'POST': 
    con = sqlite3.connect('utpg.db') 
    db = con.cursor() 
    user_id = request.form['clientid'] 
    pck_id = request.form['packageid'] 
    package = db.execute("SELECT * FROM packages WHERE client_id = ?;", (user_id,)) 
    result = package.fetchall() 
    privatelessons = result[0][4] ##Without flask this run, with flask this throws an index error. 
    pop = privatelessons - 1 
    db.execute("UPDATE packages SET privatelesson = ? WHERE client_id = ? AND pck_id = ?;", (pop, user_id, pck_id,)) 
    con.commit() 
    return render_template('view_packages.html') 

これは私がHTMLを表示し、フォームから値を取得するために使用していたコード..

<table> 
{% for col in items %} 
<tr> 
<td>{{ col['pck_id'] }}</td> 
<td>{{ col['client_id'] }}</td> 
<td>{{ col['date'] }}</td> 
<td>{{ col['price'] }}</td> 
<td>{{ col['privatelesson'] }}</td> 
<td>{{ col['shortgamelesson'] }}</td> 
<td>{{ col['playinglesson'] }}</td> 
<td>{{ col['notes'] }}</td> 
<td><form class="form-container" action="/deletepackage" method="POST"> 
<input class="form-field" value="{{ col['pck_id'] }}" name="packageid" /> <br /> 
    <input class="submit-button" type="submit" value="DELETE Package" /> </form> 
</td> 
<td><form class="form-container" action="/poplesson" method="POST"> 
<input class="form-field" value="{{ col['client_id'] }}" name="clientid" /> <br /> 
    <input class="form-field" value="{{ col['pck_id'] }}" name="packageid" /> 
    <input class="submit-button" type="submit" value="Subtract Private Lesson" /></form></td> 
</tr> 
{% endfor %} 
</table> 
</body> 

私はpythonでちょうどこの部分をすれば、それは期待通りに動作し、使用していますDBの表示私は、DBが更新されて見ることができます。何かご意見は?私は2つの理由を考えることができ

con = sqlite3.connect('utpg.db') 
    db = con.cursor() 
    user_id = request.form['clientid'] 
    pck_id = request.form['packageid'] 
    package = db.execute("SELECT * FROM packages WHERE client_id = ?;", (user_id,)) 
    result = package.fetchall() 
    privatelessons = result[0][4] ##Without flask this run, with flask this throws an index error. 
    pop = privatelessons - 1 
    db.execute("UPDATE packages SET privatelesson = ? WHERE client_id = ? AND pck_id = ?;", (pop, user_id, pck_id,)) 
    con.commit() 
+1

Flaskの有無にかかわらず同じデータベースを使用していることを確認してください –

+0

公開されているclientidとpackageidの値は何ですか?あなたは '1'の代わりに1に設定しているので、フラスコの外で動作しますか? –

+0

私はすべてをテストするだけで、ローカルで実行しているのと同じDBです。私はちょうど.. .. int_user = int(user_id)、int_pck = int(pck_id)を追加しました。しかし、それほど意味をなさない、それのすぐ上の他のフォームは、私がフォーム入力でintを呼び出す必要はなく、関数はそれほど同じではありません。また、/ poplessonの最後のreturn文は、何らかの理由でテンプレートをレンダリングしていません。 –

答えて

0

:あなたが使用している/フラスコなし

  1. データベースの構成が異なる
  2. あるコードの両方でtypeとあなたのuser_idの値を確認してください。それは異なるかもしれません。
関連する問題