• 08-11-2023, 20:27:08
    #1
    Merhabalar,

    Başlık karmaşık biliyorum.

    Localde çalıştığımızda kodda herhangi bir sıkıntı olmadığını görüyoruz. Bunu başka local sunucularda da denedik. Lakin projeyi online sunucuya alınca birkaç sorunla karşılaşıyoruz. Birkaç sorunun sebebi de aslında aynı hata.

    Aşağıdaki kod localde bizim yazdığımız ve hatasız şekilde çalışan kod:

    <?php for ($i = 0; $i < 8; $i++) { ?>
        <?php
        $query = $pdo->prepare("SELECT {$belgeler[$i]} FROM ihbarlar WHERE id=?");
        $query->execute([$_GET["id"]]);
        $ihbarcek = $query->fetch(); ?>
        <div class="form-group">
            <label for="exampleInputFile"><?= $belgeler[$i]; ?></label>
            <div class="input-group">
                <div class="custom-file">
                    <input name="file<?= $i + 1; ?>" type="file" class="custom-file-input is-<?= (isset($ihbarcek[$belgeler[$i]])) ? "valid" : "warning"; ?>" id="exampleInputFile" accept=".jpg,.jpeg">
                    <label class="custom-file-label" for="exampleInputFile"><?= (isset($ihbarcek[$belgeler[$i]])) ? "Dosya Mevcut" : ".jpg  formatında olmasına dikkat edin!"; ?></label>
                </div>
            </div>
        </div>
    <?php } ?>
    Yukarıdaki kodu online sunucuya attığımızda hata alıyoruz. Hata ise, yukarıdaki kodun başına gelince kodu kesiyor ve kendisinden sonra gelen hiçbir kodu çalıştırmıyor. 561. satırdan sonraki kodlar gözükmüyor. Resim aşağıdadır:

    Lakin kodu aşağıdaki gibi düzelttiğimde kodun sıkıntısız şekilde çalıştığını görüyorum.
    <?php for ($i = 0; $i < 8; $i++) { ?>
        <?php
        $query = $pdo->prepare("SELECT {$belgeler[$i]} FROM ihbarlar WHERE id=?");
        $query->execute([$_GET["id"]]);
        $ihbarcek = $query->fetch();
        $belge = $belgeler[$i];
        $kosul = isset($ihbarcek->$belge); ?>
        <div class="form-group">
            <label for="exampleInputFile"><?= $belge; ?></label>
            <div class="input-group">
                <div class="custom-file">
                    <input name="file<?= $i + 1; ?>" type="file" class="custom-file-input is-<?= (strlen($ihbarcek->$belge) >= 1) ? "valid" : "warning"; ?>" id="exampleInputFile" accept=".jpg,.jpeg">
                    <label class="custom-file-label" for="exampleInputFile"><?= (strlen($ihbarcek->$belge) >= 1) ? "Dosya Mevcut" : ".jpg formatında olmasına dikkat edin!"; ?></label>
                </div>
            </div>
        </div>
    <?php } ?>
    İki kodun tek farkı koşulları direkt yazmak yerine değişkene kaydedip öyle koşula sokmam. Daha doğrusu ben şuana kadar böyle çözebildim.
    Bu soruna ilk defa yaşıyorum sebebi ne olabilir.

    Not: Hosting şirketi ile iletişime geçtim lakin yazılım departmanları olmadığı için sonuç veremediler. Deneme amaçlı profree host'da denedim onda da aynı hatayı aldım.
  • 08-11-2023, 20:43:01
    #2
    Kodların gözükmediği yerden itibaren PHP kodunda hata var. Onu kontrol edin.
  • 08-11-2023, 20:46:05
    #3
    batukay adlı üyeden alıntı: mesajı görüntüle
    Kodların gözükmediği yerden itibaren PHP kodunda hata var. Onu kontrol edin.
    Kodun gözükmediği yerden itibaren başlayan php kodu konudaki php kodudur hocam. O yüzden php kodunu konuya ekledim.
  • 08-11-2023, 20:46:09
    #4
    hostingdeki php sürümü nedir, <? kısa kodu yerine <?php olarak deneyin
  • 08-11-2023, 20:53:43
    #5
    ajans.dev adlı üyeden alıntı: mesajı görüntüle
    hostingdeki php sürümü nedir, <? kısa kodu yerine <?php olarak deneyin
    Söylediğiniz gibi kodu aşağıdaki gibi değiştirdim ancak yine bir sonuç elde edemedim:
    <?php
    for ($i = 1; $i < 17; $i++) {
        $query = $pdo->prepare("SELECT * FROM ihbarlar WHERE id=?");
        $query->execute([$_GET["id"]]);
        $evraklar = $query->fetch();
        if (isset($evraklar[$belgeler[$i - 1]])) { ?>
            <div class="filtr-item col-sm-2" data-category="<?php echo $i ?>" data-sort="black sample">
                <a href="<?php echo "https://" . $_SERVER["HTTP_HOST"] . "/assets/img/evraklar/" . $evraklar[$belgeler[$i - 1]] ?>" data-toggle="lightbox" data-title="sample 1 - black">
                    <img src="<?php echo "https://" . $_SERVER["HTTP_HOST"] . "/assets/img/evraklar/" . $evraklar[$belgeler[$i - 1]] ?>" class="img-fluid mb-2" alt="black sample" />
                </a>
            </div>
    <?php }
    } ?>
    Hostingdeki php sürümü(her iki hostingdeki): 8.2

  • 08-11-2023, 20:59:33
    #6
    Yapmak istediğiniz işlemin mantığını veritabanı yapısını yazarsanız yardımcı olmaya çalışayım
  • 08-11-2023, 22:20:57
    #7
    $ihbarcek->$belge
    isset($ihbarcek[$belgeler[$i]])

    bu 2 kod birbirinden farklı hocam. Birisi array diğeri object döndürür. Sadece değişkene atama değil yani.
  • 09-11-2023, 01:24:22
    #8
    Error reporting açarak php'nin 561. satırda verdiği hatayı görün, ondan sonra bakalım nedenine. Çok yüksek ihtimalle Undefined index hatası var bir yerde.

    Ayrıca for döngüsü içinde sorgu kullanmak kötü bir tercih, kodunuzu optimize etmenizi öneririm.
  • 09-11-2023, 18:05:21
    #9
    omergunay adlı üyeden alıntı: mesajı görüntüle
    $ihbarcek->$belge
    isset($ihbarcek[$belgeler[$i]])

    bu 2 kod birbirinden farklı hocam. Birisi array diğeri object döndürür. Sadece değişkene atama değil yani.
    Doğru ama bu, kodun çalışmasına engel oluşturur mu?

    fatihemre adlı üyeden alıntı: mesajı görüntüle
    Error reporting açarak php'nin 561. satırda verdiği hatayı görün, ondan sonra bakalım nedenine. Çok yüksek ihtimalle Undefined index hatası var bir yerde.

    Ayrıca for döngüsü içinde sorgu kullanmak kötü bir tercih, kodunuzu optimize etmenizi öneririm.
    Herhangi bir hata oluşmuyor ne warning ne de fatal error. error.log dosyasına baktım yine bir hata çıktısı göremiyorum.
    For içinde döngü kullanmazsam eğer nasıl koşullu ifadelere göre işlem yapabilirim? Öneriniz nedir?