PHP Hatası Nasıl Çözülür?

mehmetxs

Yoctopat
Katılım
25 Şubat 2023
Mesajlar
7
Daha fazla  
Cinsiyet
Erkek
Merhaba arkadaşlar, fotoğraflardan da gördüğünüz gibi PHP'ye yeni yeni öğreniyorum. Bu hataya uğraştım fakat çözemedim.
Screenshot_3.png


Screenshot_4.png
 
Kodda bir hata yok. 1 değerini almış ve if else bloğunuzda işleme tabii tutmuş. Kullanıcının girdiği değer ile numaralar dizinizi bir döngü içerisinde kontrol edip başarılı veya başarısız çıktısını ekrana çıkarmış. Sizin bu koddan beklediğiniz neydi? Anladığım kadarıyla kod çalışıyor fakat sizin beklediğiniz gibi değil.
 
Kod'da ufak yazım hataları vardı, sadece onlarda önemsiz. Kısaca, kod'da hata yok. Eğer isteğinizi açıklarsanız daha yardımcı olabiliriz. Ekstradan şu iki farklı veri yapısı ile yazılan kodu deneyin.

Kod:
<?php
$ogrenciler = array(
    array("numara" => "1", "isim" => "Ali", "not" => 90),
    array("numara" => "2", "isim" => "Berat", "not" => 40),
    array("numara" => "3", "isim" => "Berke", "not" => 50),
    array("numara" => "4", "isim" => "Emre", "not" => 30)
);

if(isset($_POST["submit"])){
    $aranan_numara = $_POST["numara"];
    $ogrenci = null;

    foreach ($ogrenciler as $o) {
        if ($o["numara"] == $aranan_numara) {
            $ogrenci = $o;
            break;
        }
    }

    if ($ogrenci != null) {
        echo "Öğrenci adı: " . $ogrenci["isim"] . "<br>";
        echo "Öğrenci numarası: " . $ogrenci["numara"] . "<br>";
        echo "Öğrenci notu: " . $ogrenci["not"] . "<br>";
    } else {
        echo "Öğrenci bulunamadı.";
    }
}
?>

<form method="POST">
    <caption>Öğrenci Paneli</caption>
    <br>
    <input type="text" style="width: 220px" placeholder="Öğrencinin numarasını giriniz." name="numara" id="numara">
    <br>
    <input type="submit" name="submit" value="Öğrenciyi Ara">
</form>

Kod:
<?php
$ogrenciler = [
    (object) [
        'numara' => '1',
        'isim' => 'Ali',
        'not' => 90,
    ],
    (object) [
        'numara' => '2',
        'isim' => 'Berat',
        'not' => 40,
    ],
    (object) [
        'numara' => '3',
        'isim' => 'Berke',
        'not' => 50,
    ],
    (object) [
        'numara' => '4',
        'isim' => 'Emre',
        'not' => 30,
    ],
];

if (isset($_POST["submit"])) {
    $aranan_numara = $_POST["numara"];
    $ogrenci = null;

    foreach ($ogrenciler as $o) {
        if ($o->numara == $aranan_numara) {
            $ogrenci = $o;
            break;
        }
    }

    if ($ogrenci != null) {
        echo "Öğrenci adı: " . $ogrenci->isim . "<br>";
        echo "Öğrenci numarası: " . $ogrenci->numara . "<br>";
        echo "Öğrenci notu: " . $ogrenci->not . "<br>";
    } else {
        echo "Öğrenci bulunamadı.";
    }
}
?>

<form method="POST">
    <caption>Öğrenci Paneli</caption>
    <br>
    <input type="text" style="width: 220px" placeholder="Öğrencinin numarasını giriniz." name="numara" id="numara">
    <br>
    <input type="submit" name="submit" value="Öğrenciyi Ara">
</form>
 
İstediğim şey şu yani 0 numaralı öğrenciyi girdiğimde 1 kere çalışıp 1 kere Başarılı diyor fakat 2,3 numaralı öğrencileri girdiğimde for döngsü olduğu için 4 kere çalışıyor ve ilk başlarda başarısırız hatası veriyor ben bu başarısırız hatalı gizleyip sadece başarılı gözükmesini istiyorum.
 
İstediğim şey şu yani 0 numaralı öğrenciyi girdiğimde 1 kere çalışıp 1 kere başarılı diyor fakat 2,3 numaralı öğrencileri girdiğimde for döngsü olduğu için 4 kere çalışıyor ve ilk başlarda başarısırız hatası veriyor ben bu başarısırız hatalı gizleyip sadece başarılı gözükmesini istiyorum.

O zaman for döngüsü içerisinde else kullanmayın. Aklıma şu an for döngüsü üstünde bir değişken oluşturmak geldi. Bu değeri örneğin varsayılan olarak 0 değerine eşitleyin. Eğer kullanıcının aradığı değer diziniz içerisinde varsa if bloğu içerisinde for döngüsü üstünde oluşturduğunuz değişkenin değerini 1 arttırın. Daha sonra for döngüsü dışında bir if bloğu ile bu değişkenin değerini kontrol edin. Değer eğer 0 ise başarısız 1 ise başarılı sonucunu ekrana çıkarabilirsiniz.
 
İstediğim şey şu yani 0 numaralı öğrenciyi girdiğimde 1 kere çalışıp 1 kere Başarılı diyor fakat 2,3 numaralı öğrencileri girdiğimde for döngsü olduğu için 4 kere çalışıyor ve ilk başlarda başarısırız hatası veriyor ben bu başarısırız hatalı gizleyip sadece başarılı gözükmesini istiyorum.
PHP'de in_array fonksiyonu var, onu kullanarak $_POST["numara"]'nın dizi içerisinde olup olmadığını kontrol edebilirsin. Ya da başarısız hatalarını göstermek istiyorsan direkt for döngüsü içerisindeki else'i sil ve başarısız yazmasın?
 
O zaman for döngüsü içerisinde else kullanmayın. Aklıma şu an for döngüsü üstünde bir değişken oluşturmak geldi. Bu değeri örneğin varsayılan olarak 0 değerine eşitleyin. Eğer kullanıcının aradığı değer diziniz içerisinde varsa if bloğu içerisinde for döngüsü üstünde oluşturduğunuz değişkenin değerini 1 arttırın. Daha sonra for döngüsü dışında bir if bloğu ile bu değişkenin değerini kontrol edin. Değer eğer 0 ise başarısız 1 ise başarılı sonucunu ekrana çıkarabilirsiniz.

Dediğiniz gibi yaptım istediğim gibi çalıştı sağ olun bir de diğer arkadaşınkini de denemek istiyorum hangisi pratik gelirse bundan sonra onu uygulayacağım herkesin yardımı için teşekkürler.

PHP'de in_array fonksiyonu var, onu kullanarak $_POST["numara"]'nın dizi içerisinde olup olmadığını kontrol edebilirsin. Ya da başarısız hatalarını göstermek istiyorsan direkt for döngüsü içerisindeki Else'i sil ve başarısız yazmasın?

Sanırım bir yerde yanlışlık yaptım.
 

Dosya Ekleri

  • indir (1).png
    indir (1).png
    40,7 KB · Görüntüleme: 53
  • Screenshot_6.png
    Screenshot_6.png
    20,5 KB · Görüntüleme: 40
Son düzenleme:
Dediğiniz gibi yaptım istediğim gibi çalıştı sağ olun bir de diğer arkadaşınkini de denemek istiyorum hangisi pratik gelirse bundan sonra onu uygulayacağım herkesin yardımı için teşekkürler.

Yardımcı olabildiysem ne mutlu :) Her bir sorun birçok farklı yolla çözülebilir. Burada en önemli şey mantığı kavramanızdır. Kesinlikle kodları ezberlemeye çalışmayın. İşlerin temelini anlamaya çalışın.
 
Yardımcı olabildiysem ne mutlu :) her bir sorun birçok farklı yolla çözülebilir. Burada en önemli şey mantığı kavramanızdır. Kesinlikle kodları ezberlemeye çalışmayın. İşlerin temelini anlamaya çalışın.

Haklısınız dediğiniz şey mantıklı geldi aslında neden düşünememişim bilmiyorum aklıma gelmedi :)
 

Technopat Haberler

Geri
Yukarı