Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

PHP'de Undefined Index hatası

<?php 
	$send = $_GET['send'];
	include('mysql.php');
	
	if($send == "gonder"){
		$username = $_POST['username'];
$password = $_POST['password'];


if ((!$username =="") and (!$password =="")) {
include("config.php");
$sql = "select * from uyeler where username='$username' and password='$password' ";
$kontrol = mysql_query($sql);
$kayitsayisi = mysql_num_rows($kontrol);
if ($kayitsayisi == "0") {
echo '<div class="btn btn-danger">Kullanıcı Adı veya Şifre yanlış</div>';
} else {
$kontrol_ok = mysql_fetch_array($kontrol);
setcookie ("username", "$kontrol_ok[username]");
header ("Location: index.php");
}
}
else {
echo 'Giriş Yapılamadı';
} } else { echo 'Giriş Yap'; } ?>

bi hata göremiyorum ama nedense Undefined Index hatası alıyorum.. $_POST ve $_GET işlemlerinde sorun yaşıyorum sanırsam.. nasıl çözebilirim
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • wdrleo adlı üyenin fotoğrafı
    10 yıl önce yazılmış
    10 yıl önce güncellenmiş
    14 cevap - 1 soru
    Kodunuzu localhostta çalıştırdığınızda bazı hostlar da alınabilir bu hata, aslında bir hata değil uyarı.
    Sayfa ilk yüklendiğinde henüz birşey POST veya GET edilmediyse size $_GET bir değere sahip değil $_POST bir değere sahip değil diyor. Ayrıca niye post edilip edilmediğini get ile kontrol ettiğinizi de anlayamadım onun yerine bu şekilde kullanabilirsiniz yine de get ile kontrol edeceğim diyorsanız o şekilde de düzenleyebilrim.

    Ayrıca boşluk kontrolleriniz sağlıksız !$degisken == "" gibi bir kontrol sağlıklı olmaz. Eğer 2 boşluk girilirse bu iş yapısı aşılmış olunur. Bunun yerine empty(); fonksiyonunu kullanın.

    mysql dosyası için include i önermiyorum çünkü include ederseniz mysql bağlantısında hata olsa da aşağıdaki kodlar çalışmaya devam eder. Ama require verirseniz hata oluştuğu zaman o satırda durur ve alttaki kodları okumaz bu da güvenliği sağlar.
    require_once derseniz de mysql dosyasının o sayfaya yanlışlıkla 2.kez dahil edilmesini engeller. Her sayfada 1 adet mysql dahil edilmesi yeterlidir zaten.

    Ayrıca belirtmeden geçemeyeceğim kodlarınız da SQL injection açığı var onu da giderirdim ama vaktim yok.

    Asıl konuda ise post ve get verilerini atamadan, almadan önce if komutunu ve isset fonksiyonunu kullanarak bunlar var mı diye kontrol ettirirseniz localhostta undefined hatasını almazsınız.

    Bir diğer konu cookie ile giriş işlemi yapmayın, session kullanın cookie lar görülebilir ve kullanıcı bunu düzenleyerek istediği kullanıcı gibi sisteme girebilir. Çok basittir cookie değerini değiştirmek ama session sunucu da tutulur ve kullanıcılar erişemez.
    İyi günler.


    <?php
    require_once("mysql.php");
    if(isset($_POST)){
        $username = $_POST['username'];
        $password = $_POST['password'];
    
        if ((!empty($username)) && (!empty($password))) {
            include("config.php");
            $sql = "select * from uyeler where username='$username' and password='$password' ";
            $kontrol = mysql_query($sql);
            $kayitsayisi = mysql_num_rows($kontrol);
            if ($kayitsayisi == "0") {
                echo '<div class="btn btn-danger">Kullanıcı Adı veya Şifre yanlış</div>';
            } else {
                $kontrol_ok = mysql_fetch_array($kontrol);
                setcookie ("username", "$kontrol_ok[username]");
                header ("Location: index.php");
            }
        }else {
            echo 'Giriş Yapılamadı';
        }
    }else{
        echo 'Giriş Yap';
    }
    ?>
    
    • spywaredz adlı üyenin fotoğrafı spywaredz
      <?php session_start();
       ob_start(); 
      	
      	
      	$send = htmlspecialchars(mysql_real_escape_string($_GET['send']));
      	require_once('mysql.php');
      	if(isset($_SESSION["login"])){ header("Location: index.php"); } else {
      		if($send == "gonder"){
      		
      		$username = htmlspecialchars(mysql_real_escape_string($_POST['username']));
      $password = htmlspecialchars(mysql_real_escape_string($_POST['password']));
      
      
      if (empty($username) and empty($password)) { echo '<div class="btn btn-danger" style="width:250px;">Tüm Alanları Doldurun</div>'; } else {
      $sql = "select * from uyeler where username='$username' and password='$password'";
      $kontrol = mysql_query($sql);
      $kayitsayisi = mysql_num_rows($kontrol);
      if ($kayitsayisi == "0") {
      echo '<div class="btn btn-danger" style="width:250px;">Kullanıcı Adı veya Şifre yanlış</div>';
      } else {
      $kontrol_ok = mysql_fetch_array($kontrol);
      $_SESSION["login"] = "true";
      $_SESSION["username"] = $username;
      $_SESSION["password"] = $password;
      
      header("Location: index.php"); 
      }} }
      
        else { echo 'Giriş Yap'; }}
       ob_end_flush();
        ?>
      


      dediğiniz gibi session'dan yaptım.. başka localhost programı yükledim bu şekilde Undefined Index olayıda çözüldü.. sql injection açıkları kapatıldı(gerçi localden çalışıcak bir sistem programlıyorum pek gerek yoktu ama)
      10 yıl önce yazılmış

Cevaplar

Hiç cevap bulunamadı.