MYSQL veri güncellemesinde sorun..

Başlatan karakayahakan, 28 Şubat 2013 - 20:14:36

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

karakayahakan

Herkese iyi akşamlar.. Ne yaptım ettimse bir türlü veritabanımdan gelen veriyi güncelleyip tekrar veritabanına kayıt yapamadım.

kullandığım bağlantım şu şekilde..

$sorgu = mysql_query("UPDATE `malzemeler` SET ttarih='$_POST[ttarih]',cinsi='$_POST[cinsi]',birim_turu='$_POST[birim_turu]',birimi='$_POST[birimi]',referans='$_POST[referans]',serinum='$_POST[serinum]',demirbas='$_POST[demirbas]',marka='$_POST[marka]',model='$_POST[model]',cpu='$_POST[cpu]',hdd='$_POST[hdd]',ram='$_POST[ram]',ses='$_POST[ses]',ethernet='$_POST[ethernet]',mac='$_POST[mac]',medya='$_POST[medya]',temini='$_POST[temini]',kullanim='$_POST[kullanim]',boyut='$_POST[boyut]',printer_turu='$_POST[printer_turu]',not='$_POST[not]' WHERE id='$_POST[id]' ");

neleri denediğimi söyleyeyim:

öncelikle malzemeler tablosundaki ttarih alanını ele alalım. SET değerleri için şu yazım şekillerini denedim.

ttarih='$_POST[ttarih]'
ttarih='".$_POST[ttarih]."'
`ttarih`='$_POST[ttarih]'

nerede hata yapıyorum sizce?
veritabanı bağlantım sorunsuz..
güncelleme sayfasına POST ile gelen veriler işleniyor. Yani forumdan veri geliyor. forum name alanları sorunsuz. Bulamadım bir türlü hatayı! Şimdiden teşekkürler ilginiz için..

empax

$ttarih=$_POST[ttarih];

1- Post ile gelen verileri atadiginiz degiskenlerin basinda dolar sembolunu koydunuz(?) Yukaridaki ornek gibi.
2-  POST verisini degiskene atarken tirnak kullanmaniza gerek yok ama real_escape_string konusuna da bir bakin derim.
PHP ile ugrasiyorsaniz yavastan mysqli 'ye gecis yapin.

Ayrica bir hata donduruyor mu?
بسم الله الرحمن الرحيم
|ACEMİLER İÇİN İLK DURAK|Çözüldü|Kod etiketi|

alquirel

Küçük bir yanlış anlamayı düzeltmek lazım. SQL sorgusunun içinde sütun isimlerinin başına $ işareti koymak yanlış olur.

Benim gözüme çarpan asıl hatalı yazım şu oldu. $_POST dizisinin elemanlarını çağırırken tırnak işareti kullanmıyorsunuz. Mesela $_POST['ttarih'] şeklinde yazmanız lazım.

Sorgu fonksiyonunun sonrasını " or die( mysql_error() );" şeklinde bitirirseniz MySQL'in verdiği hatayı da görmüş oluruz.

empax

@alquirel, tirnaklari fark edememistim. Siz iyi fark etmissiniz :)
بسم الله الرحمن الرحيم
|ACEMİLER İÇİN İLK DURAK|Çözüldü|Kod etiketi|

karakayahakan


anladım ama benim post verisini direk sql sorgusu içine sokmam yanlış mı? yapılmaması gereken bir şey mi? yani her post verisini bir değişkene atayıp daha sonra mı sql sorgusu içine sokayım.?

krky

#5
Güvenli değil. Öncelikle POST veya GET ile gelen verilerin güvenlik amacıyla bazı filitrelerden geçirilmesi gerekir. Mecburi değildir ama hem güvenlik açısından hem de verileri şekillendirmek açısından önemlidir.


Örneğin formdan gelen verinin başında veya sonunda boşluk olabilir. Bu boşlukları silebilmek için trim($degisken) kullanırsın. Formdan gelen verinin string mi yoksa integer mi olduğunu kontrol etmek istersen is_int($degisken) kullanabilirsin. Ve en önemlisi sql injection olarak bilinen güvenlik açığını kapatmak için mysql_escape_string($degisken) kullanarak gerekli önlemleri alabilirsin. Tabii bu güvenlik önlemleri bununla sınırlı değil. Zamanla pek çok açık olabileceğini ve bu açıkları nasıl kapatabileceğimizi öğreniyoruz.

' ile " arasındaki farka da değineyim.

'  ' arasında sadece integer (sayı) veya string (metin) yazabilirsin. Değişkenleri yazamazsın. Örnek olarak '1' veya 'deneme'. Değişken yazabilmen için mysql_query(".... `tarih`=' ".$degisken." ' ") veya mysql_query('.... `tarih`=" '.$tarih.' " ') şeklinde kullanman gerekiyor.

"  " arasında değişken de yazabilirsin string de integer de. "$degisken", "1", "deneme"

auroraborealis

Her post verisini bir degiskene atayıp daha sonra SQL sorgusu içine dahil edersen düzenli bir kodlama olur. Daha sonra degişikliklerde ve düzenlemede kolaylık sağlar. Bu konuda @krky'nin anlattıklarına ek olarak yapacağın araştırmalar sana yol göstrecektir.