Arama butonu
Bu konudaki kullanıcılar: 1 misafir
4
Cevap
255
Tıklama
0
Öne Çıkarma
Python flask aldığım bir hata
Y
2 yıl
Er
Konu Sahibi

ş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

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil




K
2 yıl
Yarbay

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)

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 KingOfAnarchy -- 31 Ağustos 2023; 0:57:27 >

< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 3 cevap geldi.
Y
2 yıl
Er
Konu Sahibi

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")




Bu mesajda bahsedilenler: @NextMove
Y
2 yıl
Er
Konu Sahibi

burada göstermediğim başka bi kodda hata çıktı hiç anlamadım




Bu mesajda bahsedilenler: @NextMove
Y
2 yıl
Er
Konu Sahibi

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"]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
hata olan yermiş




Bu mesajda bahsedilenler: @NextMove
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.