şimdi hocam python flask ile uzun zaman önce blog projesi yapmıştım. şimdi açtığımda geliştireyim dedim. tam bitti derken bi hata aldım. ''@app.route('/yorum/<string:article_title>/', methods=["GET","POST"]) def yorum_ekle(article_title): cevap = CevapVer(request.form) form = ArticleForm(request.form) if request.method=="POST" and cevap.validate(): icerik = cevap.icerik.data cursor2 = mysql.connection.cursor() cnt = form.content.data tit = form.title.data sorgu2 = "SELECT author FROM articles WHERE title = %s AND content = %s " cursor2.execute(sorgu2,(cnt,tit)) sonuclar = cursor2.fetchall() cevaplanan = None
cursor = mysql.connection.cursor() sorgu = "insert into yorum(icerik,cevaplayan,cevaplanan) values(%s,%s,%s)" cursor.execute(sorgu,(icerik,session["username"],cevaplanan)) mysql.connection.commit() cursor.close() flash("Yorum eklendi","success") return render_template('cevapla.html', article_title=article_title, cevap=cevap) '' burada yapmak istediğim şey kısaca şu. articles tablosundan bir makale aratıyorum ve bu makaleyi yapan kişinin kullanıcı adını alıp başka bir sorguda kullanmak istedim fakat bi hata aldım. kodu düzeltebilecek birisi var ise veya yardımcı olabilecek birisi var ise çok iyi olur hata: bir değerle ilişkili olmadığı 'cevaplanan' yerel değişkenine erişilemiyor |
Python flask aldığım bir hata
-
-
from flask import flash, render_template, request, redirect, url_for, escape, session @app.route('/yorum/<string:article_title>/', methods=["GET", "POST"]) def yorum_ekle(article_title): # 1. Authentication Kontrolü if "username" not in session: flash("Oturum açmalısınız.", "danger") return redirect(url_for('login')) # 'login' fonksiyonunu varsayımsal olarak kullandım. cevap = CevapVer(request.form) if request.method == "POST" and cevap.validate(): icerik = escape(cevap.icerik.data.strip()) # 2. XSS önleme try: # Veritabanı işlemleri için context yöneticisi kullanma with mysql.connection.cursor() as cursor: # 3. SQL Injection önleme sorgu2 = "SELECT author FROM articles WHERE title = %s AND content = %s" cursor.execute(sorgu2, (article_title, cevap.icerik.data)) sonuclar = cursor.fetchall() cevaplanan = sonuclar[0]['author'] if sonuclar else None sorgu = "INSERT INTO yorum(icerik, cevaplayan, cevaplanan) VALUES(%s, %s, %s)" cursor.execute(sorgu, (icerik, session["username"], cevaplanan)) mysql.connection.commit() flash("Yorum eklendi", "success") except Exception as e: # Hata yakalama mysql.connection.rollback() flash("Bir hata meydana geldi. Lütfen daha sonra tekrar deneyin.", "danger") return render_template('cevapla.html', article_title=article_title, cevap=cevap)
Kod
Yığını:Cevaplanan kısmına mantıklı birşeyler yazmalısın, ben tablo yapını bilmediğim için uydurdum. Orayı sen düzenlersin.
< Bu mesaj bu kişi tarafından değiştirildi NextMove -- 31 Ağustos 2023; 0:57:27 >
< Bu ileti mobil sürüm kullanılarak atıldı >
-
hocam çok teşekkürler büyük ihtimal bu kod çalışacaktır fakat şan garip bir şey oldu. başka bir hata alıyorum
türkçe
MySQLdb.OperationalError: (1136, "Sütun sayısı 1. satırdaki değer sayısıyla eşleşmiyor")
ingilizce
MySQLdb.OperationalError: (1136, "Column count doesn't match value count at row 1")
-
burada göstermediğim başka bi kodda hata çıktı hiç anlamadım
-
hocam bu kafamı baya karıştırdı ben uyuyorum. teşekkürler yardımın için ama kodun şuan başka bir yerinde hata veriyor. büyük ihtimal bir tane databaseyi kaydedip close işlemini yapmadım. gözümden kaçmış olabilir. ama buraya kodu bırakıyorum yinede siz isterseniz incelersiniz. Şimdiden Teşekkürler
''
@app.route('/yorum/<string:article_title>/', methods=["GET","POST"])
def yorum_ekle(article_title):
cevap = CevapVer(request.form)
form = ArticleForm(request.form)
if request.method=="POST" and cevap.validate():
icerik = cevap.icerik.data
cursor1 = mysql.connection.cursor()
s1 = form.title.data
s2 = form.content.data
sorgu1 = "SELECT author FROM articles WHERE title = %s AND content = %s "
cursor1.execute(sorgu1,(s1,s2))
mysql.connection.commit()
cursor1.close()
cursor2 = mysql.connection.cursor()
sorgu2 = "insert into yorum(icerik,cevaplayan,cevaplanan) values(%s,%s,%s)"
cevaplanan = "asd"
cursor2.execute(sorgu2,(icerik,session["username"],cevaplanan))
mysql.connection.commit()
cursor2.close()
flash("Yorum eklendi","success")
return render_template('cevapla.html', article_title=article_title, cevap=cevap)
@app.route("/addarticle", methods=["GET","POST"])
def addarticle():
form = ArticleForm(request.form)
if request.method=="POST" and form.validate():
title = form.title.data
content = form.content.data
cursor = mysql.connection.cursor()
sorgu = "Insert into articles(title,author,content) VALUES(%s,%s,%s)"
name = session["username"]
cursor.execute(sorgu,(title,name,content))
mysql.connection.commit()
cursor.close()
flash("Makale Başarıyla Eklendi","success")
return redirect(url_for("dashboard"))
return render_template("addarticle.html", form=form)
''
hata verdiği yer sanırım burası:
''
@app.route("/dashboard")
@login_required
def dashboard():
cursor = mysql.connection.cursor()
sorgu = "Select * From articles where author=%s"
result = cursor.execute(sorgu,(session["username"]))
if result > 0:
articles = cursor.fetchall()
return render_template("dashboard.html",articles=articles)
else:
return render_template("dashboard.html")
return render_template("dashboard.html") ''
MySQLdb.OperationalError: (1136, "Column count doesn't match value count at row 1")
MySQLdb.OperationalError: (1136, "Sütun sayısı 1. satırdaki değer sayısıyla eşleşmiyor")
cursor.execute(sorgu,(icerik,session["username"])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Kod
Yığını:hata olan yermiş
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X