• 13-02-2024, 14:02:26
    #10
    ilgili kısımları bununla değiştirin.
    if (empty($ad) || empty($mail) || empty($instagram) || empty($tel) || empty($mesaj) )
  • 13-02-2024, 14:03:43
    #11
    Mesajı düzenledim de eklediğim kodu tekrar dener misiniz

    BarisKarademir adlı üyeden alıntı: mesajı görüntüle
    farklı başka birşey yok hocam dediğim gibi, isterseniz kodun orijinal halini atıyım. Ben buna ek olarak Instagram Adresi ve Telefon Numarası bölümü eklemek istiyorum.
    Sıralama; Ad soyad, Mail, Instagram, Telefon, Mesaj

    <?php include("admin/ayar.php"); ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>BAŞVURU YAP</title>
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
            <!-- MATERIAL DESIGN ICONIC FONT -->
            <link rel="stylesheet" href="fonts/material-design-iconic-font/css/material-design-iconic-font.min.css">
            
            <!-- STYLE CSS -->
            <link rel="stylesheet" href="css/style.css">
        </head>
    
        <body>
    
            <div class="wrapper">
                <div class="inner">
                    <form action="" method="POST">
                        <h3>BAŞVURU</h3>
                        
                                
                    <?php
                
                if($_POST){
                
                $ad = $_POST["ad"];
                $mail = $_POST["mail"];
                $mesaj = $_POST["mesaj"];
                
                if(!$ad || !$mail || !$mesaj){            
                echo "Boş alan bırakmamalısınız.";
                }            
                else{            
                $kaydet = $db-> prepare("insert into iletisim set
            i_ad = ?,
                    i_mail = ?,
                    i_mesaj = ?
                ");
                $sonuc = $kaydet -> execute(array($ad,$mail,$mesaj));
                if($sonuc)
                {
                    echo "Başvurunuz Gönderilmiştir";
                }
                else{
                    echo "Daha sonra tekrar deneyin, başvurunuz gönderilmedi.";
                }        
                }
                }    
    //akosetr            
                ?>
                
                    
                        
                        <label class="form-group">
                
                            <input type="text" name="ad" class="form-control"  required>
                            <span>Ad Soyad</span>
                            <span class="border"></span>
                        </label>
                        <label class="form-group">
                            <input type="text" name="mail" class="form-control"  required>
                            <span for="">Mail Adresi</span>
                            <span class="border"></span>
                        </label>
                        <label class="form-group" >
                            <textarea name="mesaj" id="" class="form-control" required></textarea>
                            <span for="">Kendinizi tanıtınız (iş,okul,hobi vb.)</span>
                            <span class="border"></span>
                        </label>
                        <button>Başvuruyu Gönder
                            <i class="zmdi zmdi-arrow-right"></i>
                        </button>
                    </form>        
                </div>
            </div>        
        </body>
    </html>
  • 13-02-2024, 14:06:51
    #12
    ntka adlı üyeden alıntı: mesajı görüntüle
    ilgili kısımları bununla değiştirin.
    if (empty($ad) || empty($mail) || empty($instagram) || empty($tel) || empty($mesaj) )
    ruidemre adlı üyeden alıntı: mesajı görüntüle
    Mesajı düzenledim de eklediğim kodu tekrar dener misiniz
    maalesef else döndürüyor yine olmadı
  • 13-02-2024, 14:17:42
    #13
    Ayar dosyasından ve database ilgili tablodan ss atarsanız çözülebilir
  • 13-02-2024, 14:43:32
    #14
    ruidemre adlı üyeden alıntı: mesajı görüntüle
    Ayar dosyasından ve database ilgili tablodan ss atarsanız çözülebilir
    buyrun database

    -- phpMyAdmin SQL Dump
    -- version 5.0.3
    -- https://www.phpmyadmin.net/
    --
    -- Anamakine: 127.0.0.1
    -- Üretim Zamanı: 16 Şub 2021, 11:55:45
    -- Sunucu sürümü: 10.4.14-MariaDB
    -- PHP Sürümü: 7.4.11
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    START TRANSACTION;
    SET time_zone = "+00:00";
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
    
    --
    -- Veritabanı: `barisvkg_com`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Tablo için tablo yapısı `iletisim`
    --
    
    CREATE TABLE `iletisim` (
      `i_id` int(11) NOT NULL,
      `i_ad` varchar(50) NOT NULL,
      `i_mail` varchar(50) NOT NULL,
      `i_mesaj` varchar(555) NOT NULL,
      `i_okundu` int(5) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    --
    -- Tablo döküm verisi `iletisim`
    --
    
    INSERT INTO `iletisim` (`i_id`, `i_ad`, `i_mail`, `i_mesaj`, `i_okundu`) VALUES
    (10, 'Halil', 'halil@gmail.com', 'Lorem Ipsum, dizgi ve baskı endüstrisinde kullanılan mıgır metinlerdir. Lorem Ipsum, adı bilinmeyen bir matbaacının bir hurufat numune kitabı oluşturmak üzere bir yazı galerisini alarak karıştırdığı 1500\'lerden beri endüstri standardı sahte metinler olara', 0),
    (11, 'Mehmet', 'mehmet@gmail.com', 'leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop', 1);
    
    -- --------------------------------------------------------
    
    --
    -- Tablo için tablo yapısı `yonetici`
    --
    
    CREATE TABLE `yonetici` (
      `y_id` int(11) NOT NULL,
      `y_kad` varchar(50) NOT NULL,
      `y_pass` varchar(50) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    --
    -- Tablo döküm verisi `yonetici`
    --
    
    INSERT INTO `yonetici` (`y_id`, `y_kad`, `y_pass`) VALUES
    (1, 'admin', 'admin');
    
    --
    -- Dökümü yapılmış tablolar için indeksler
    --
    
    --
    -- Tablo için indeksler `iletisim`
    --
    ALTER TABLE `iletisim`
      ADD PRIMARY KEY (`i_id`);
    
    --
    -- Tablo için indeksler `yonetici`
    --
    ALTER TABLE `yonetici`
      ADD PRIMARY KEY (`y_id`);
    
    --
    -- Dökümü yapılmış tablolar için AUTO_INCREMENT değeri
    --
    
    --
    -- Tablo için AUTO_INCREMENT değeri `iletisim`
    --
    ALTER TABLE `iletisim`
      MODIFY `i_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=14;
    
    --
    -- Tablo için AUTO_INCREMENT değeri `yonetici`
    --
    ALTER TABLE `yonetici`
      MODIFY `y_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
    COMMIT;
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
  • 13-02-2024, 14:55:43
    #15
    Bu PHP kodunda yapılan işlemler, kullanıcıdan gelen bilgileri alıp bir veritabanına kaydetmeye yöneliktir. Kodu incelediğimde, gördüğüm bazı potansiyel hatalar ve eksiklikler şunlardır:
    1. Veritabanı Bağlantısı Kontrolü Eksik: admin/ayar.php dosyasında veritabanı bağlantısı kurulmuş olmalı. Ancak bu dosyanın içeriği gösterilmemiş, bu nedenle $db nesnesinin düzgün bir şekilde PDO veya mysqli gibi bir veritabanı nesnesi olarak ayarlanıp ayarlanmadığını kontrol etmek önemlidir.
    2. SQL Injection Güvenlik Açığı: Kullanıcı girdileri doğrudan SQL sorgusuna parametre olarak geçiriliyor. Bu, hazırlanan sorgular (prepared statements) kullanılarak yapıldığı için SQL injection saldırılarına karşı bir koruma sağlar. Bu iyi bir uygulamadır.
    3. Hata Yönetimi: $db->prepare() işlemi başarısız olursa, bu kod bu durumu ele almaz. PDO için hata modunun (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) ayarlanmış olması iyi bir pratiktir. Bu, hata oluştuğunda daha açıklayıcı mesajlar almanızı sağlar.
    4. action Attribütü Boş: Formun action attribütü boş bırakılmış. Bu durumda form, kendini işleyen PHP kodu ile aynı dosyada olduğu için sorun teşkil etmez. Form verileri bu dosyaya POST edilir.
    5. Güvenlik Önlemleri: Kullanıcı girdilerini doğrudan işlemeden önce daha fazla güvenlik önlemi alınabilir. Örneğin, htmlspecialchars veya benzeri fonksiyonlar kullanılarak XSS saldırılarına karşı önlem alınabilir.
    6. POST Kontrolü: if($_POST) kullanmak, POST isteği olup olmadığını kontrol etmek için yaygın bir yöntemdir ancak daha spesifik bir kontrol (if ($_SERVER['REQUEST_METHOD'] == 'POST')) daha açıklayıcı olabilir.
    Kodda belirgin bir "syntax error" veya mantıksal hata gözükmüyor. Ancak, kodunuzun doğru çalışabilmesi için admin/ayar.php dosyasında doğru bir PDO veritabanı bağlantısı yapılandırılması gerektiğini unutmayın. Ayrıca, kullanıcı girdilerinin doğruluğunu ve güvenliğini sağlamak için ek önlemler almanızı öneririm.
    ChatGpt den yardım almayı denediniz mi? Çoğu zaman işe yarıyor. Sizin kodu ChatGpt ye verdim hataları söylemesini istedim yukarıdakileri yazdı.
    Daha sonra hataları düzeltip tekrar kodu yazar mısın diye sordum. Şu kodu verdi, çalışıp çalışmayacağını bilmiyorum umarım işinize yarar.
    <?php
    include("admin/ayar.php");
    
    // Veritabanı bağlantısında hata modunu ayarlama
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $ad = htmlspecialchars(trim($_POST["ad"]));
        $mail = htmlspecialchars(trim($_POST["mail"]));
        $instagram = htmlspecialchars(trim($_POST["instagram"]));
        $tel = htmlspecialchars(trim($_POST["tel"]));
        $mesaj = htmlspecialchars(trim($_POST["mesaj"]));
        
        if(empty($ad) || empty($mail) || empty($instagram) || empty($tel) || empty($mesaj)) {
            echo "Boş alan bırakmamalısınız.";
        } else {
            try {
                $kaydet = $db->prepare("INSERT INTO iletisim (i_ad, i_mail, i_instagram, i_tel, i_mesaj) VALUES (?, ?, ?, ?, ?)");
                $sonuc = $kaydet->execute([$ad, $mail, $instagram, $tel, $mesaj]);
                
                if($sonuc) {
                    echo "Başvurunuz Gönderilmiştir";
                } else {
                    echo "Bir hata oluştu, daha sonra tekrar deneyin.";
                }
            } catch (PDOException $e) {
                echo "Veritabanı hatası: " . $e->getMessage();
            }
        }
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>BAŞVURU</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="fonts/material-design-iconic-font/css/material-design-iconic-font.min.css">
        <link rel="stylesheet" href="css/style.css">
    </head>
    <body>
        <div class="wrapper">
            <div class="inner">
                <form action="" method="POST">
                    <h3>BAŞVURU</h3>
                    <label class="form-group">
                        <input type="text" name="ad" class="form-control" required>
                        <span>Ad Soyad</span>
                        <span class="border"></span>
                    </label>
                    <label class="form-group">
                        <input type="email" name="mail" class="form-control" required>
                        <span>Mail Adresi</span>
                        <span class="border"></span>
                    </label>
                    <label class="form-group">
                        <input type="text" name="instagram" class="form-control" required>
                        <span>Instagram Adresi</span>
                        <span class="border"></span>
                    </label>
                    <label class="form-group">
                        <input type="text" name="tel" class="form-control" required>
                        <span>Telefon Numarası</span>
                        <span class="border"></span>
                    </label>
                    <label class="form-group">
                        <textarea name="mesaj" class="form-control" required></textarea>
                        <span>Kendinizi tanıtınız (iş, okul, hobiler vb.)</span>
                        <span class="border"></span>
                    </label>
                    <button type="submit">Başvuruyu Gönder <i class="zmdi zmdi-arrow-right"></i></button>
                </form>        
            </div>
        </div>        
    </body>
    </html>
  • 13-02-2024, 15:46:19
    #16
    BarisKarademir adlı üyeden alıntı: mesajı görüntüle
    buyrun database


    database de i_instagram ve i_tel yok ayrıca i_okundu varsayılan değerini null veya tanımlandığı gibi -> 0 yaparsanız problem çözülür gibi. Ek olarak varchar(x) değerleri bazı durumlarda yeterli olmayabilir bunları text türüne dönüştürürseniz daha iyi olur