PHP MYSQL Update Sorunu

Sitemdeki alanları admin dashboarddan değiştirmek için mysql kullanıyorum, lakin kaydet butonuna basınca bir türlü kaydetme işlemi yapamıyorum localhost şu anda bu isteği işleme alamıyor. HTTP ERROR 500 hatası ile karşılaşıyorum. Mysqlde yenii olduğum için şuanki bilgimle kodlarda sıkıntı olduğunu farkettim lakin baktığımda hiçbir sorun göremedim.

Kodları silip sadece echo komutu ile kontrol ettiğimde hiçbir sorun almıyorum. Buda bende mysql update kodlarımda sorun olduğu fikri uyandırdı. Lakin yeni olduğum için kodlarda bir sıkıntı bulamadım.

<?php

include 'baglan.php';

if(isset($_POST['ayarkaydet']))
{
 $id = 0;

 $ayarkaydet = mysql_query("update ayarlar set ayar_baslik='".$_POST['ayar_baslik']."',
             ayar_aciklama='".$_POST['ayar_aciklama']."',
             ayar_akelime='".$_POST['ayar_akelime']."',
             ayar_footer='".$_POST['ayar_footer']."',
             ayar_telefon='".$_POST['ayar_telefon']."',
             ayar_fax='".$_POST['ayar_fax']."',
             ayar_mail='".$_POST['ayar_mail']."',
             ayar_adres='".$_POST['ayar_adres']."',
             ayar_facebook='".$_POST['ayar_facebook']."',
             ayar_twitter='".$_POST['ayar_twitter']."' where ayar_id='$id'");


 if (mysql_affected_rows()) 
 {
     
     header("Location: ../ayarlar.php"); 
 }

 else
 {
    header("Location: ../ayarlar.php"); 
 }

}

?>

Hatayla ilgili daha detayli bir bilgi var mi?

Web sunucusunun error.log dosyasinda olabilir. nginx ise /var/log/nginx/error.log’da bulunabilir.

$_POST’taki degerleri query kodundan ayiran parameterized query yontemi kullanilmamis; herhangi birinin icindeki bir ' karakteri butun query’i bozabilir (ve daha kotusu, database’i kotu amacli kisilerin manipulasyonuna acabilir.)

Bunun verdigi query ciktisini bizimle veya database sunucusunun kendisiyle paylasir misin? Query calisiyor mu?

1 Beğeni

error.log dosyasını kontrol ettiğimde aşağıdaki hatayı alıyorum. $_POST ile başlayan paragrafta ne demek istediğinizi anlayamadım. Biraz daha açıklayabilir misiniz?

Dosyaları localhostta(AppServ) çalıştırıyorum.

Mysqlden dosya çekme işleminde herhangi bir sorun yaşamıyorum, çünkü admin panelinde mysqlden çektiğim verileri görebiliyorum ve herhangi bir hata almıyorum. Aşağıdaki resimde de çektiğim verileri görebiliyorum:

Lakin kaydet butonuna bastığımda beni islem.php’ye gönderdiğinde aşağıdaki hatayı alıyorum:

denme

error.log dosyasına baktığımda ise böyle bir hata aldığımı görüyorum:

[Mon Jan 31 10:42:57.942401 2022] [php7:error] [pid 5772:tid 1120] [client ::1:52234] PHP Fatal error:  Uncaught Error: Call to undefined function mysql_query() in C:\\AppServ\\www\\tamirci\\admin\\fettings\\islem.php:9\nStack trace:\n#0 {main}\n  thrown in C:\\AppServ\\www\\tamirci\\admin\\fettings\\islem.php on line 9, referer: http://localhost/tamirci/admin/ayarlar.php

PHP’ye mysql modulu yuklenmemis. MySQL sunucusuyla konusmak imkansiz.

mysqli diye bir modul vardi sanki, o yuklu ve onu kullanmak gerekiyor olabilir mi?

Italik kelimeleri arastirman lazim. Parameterized query ve/veya SQL injection nedir bilirsen anlatabilirim ancak. (Veya muhtemelen anlatmama gerek kalmaz.)

1 Beğeni

Update sorununu çözdüm. Dediğiniz gibi tırnak işaretlerinin gazabına uğramışım. Hatayı düzelttim. Ayriyeten çok sık hata almamın sebebi Mysqlde update yaparken (’) tek tırnak işaretini veri tabanına göndermiyor olmasıymış. Default olarak benim footer kısmında da tek tırnak işareti olduğu için kodlardaki hatayı gidersem bile hala hata alıyordum, Bu da beni deli ediyor ve PHPden soğutuyordu. Neyse ki hatayı anladım ve yeni gelişmeler kaydettim.

Lakin şimdide şöyle bir sorunla karşılaştım. Login sayfası yaptığımda ve sorgulama yapacağımda text boxlara girilen değeri php ile çekdiğimde ve bu değerleri veri tabanında karşılaştırmaya çalıştığımda geri dönen sonuçla karşılaşmadığını görüyorum.

$admin_kadi=$_POST['admin_kadi'];
$admin_sifre=$_POST['admin_sifre'];

Bu kodlar ile POST olarak gönderdiğim veriyi alıp almadığımı

echo "Kullanıcı adı: $admin_kadi";
echo "Kullanıcı şifre: $admin_kadi"

Bu kodlar ile görebiliyorum. Sayfayı post olarak gönderdiğimde gelen veride sayfaya yazdığım kullanıcı adını ve şifresini alıyor.

Hataya gelecek olursak, bu çekilen verilerle veri tabanında karşılaştırma yaptığımda herhangi bir sonuç alamıyorum. Mesela o karşılaşmaya ait kaç tane row olduğunu bulmaya çalıştığımda bana eşleşen veriyi göndermiyor. Kodum bu:

if ($admin_kadi && $admin_sifre) {
      $sorgula=mysqli_query("SELECT * FROM admin WHERE admin_kadi='$admin_kadi' AND admin_sifre='$admin_sifre'");
      $verisay=mysqli_num_rows($sorgula);
      echo "Eşleşen row: '$verisay'";

Lakin burada eşleşen row: 1 değerini almam gerekirken eşleşen row: değerini yani $verisaydan herhangi bir değer dönmediğini farkediyorum. Buda login sayfamı yapmamı engelliyor.

Hata olarakta şu ikisini alıyorum(ikiside aynı zamanda geliyor):

[Mon Jan 31 23:29:11.457200 2022] [php7:warn] [pid 2644:tid 1120] [client ::1:62232] PHP Warning:  mysqli_query() expects at least 2 parameters, 1 given in C:\\AppServ\\www\\tamirci\\admin\\fettings\\islem.php on line 52, referer: http://localhost/tamirci/admin/login.php
[Mon Jan 31 23:29:11.458199 2022] [php7:warn] [pid 2644:tid 1120] [client ::1:62232] PHP Warning:  mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\\AppServ\\www\\tamirci\\admin\\fettings\\islem.php on line 53, referer: http://localhost/tamirci/admin/login.php

Sanırım biraz uzun oldu kusura bakmayın. Önceki hatama verdiğiniz destek için teşekkür ederim.