Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

prepare bind_param insert çalışmıyor

Konu, 'PHP' kısmında kaanavsar tarafından paylaşıldı.

Etiketler:
  1. kaanavsar

    kaanavsar Yeni Üye

    Kayıt:
    7 Şubat 2018
    Mesajlar:
    20
    Beğenilen Mesajlar:
    0
    Şehir:
    istanbul
    selam arkadaşlar,
    prepare ve bind param kullanarak veritabanına formdan gelen verileri eklemeye çalışıyorum,
    formu doldurup gönder butonuna bastıktan sonra boş bir sayfa geliyor ve verileri kaydetmiyor.
    uyarı falanda yok kodlarımdaki hata ne ?

    PHP:
        <?php
        $id                     
    $_POST['id'];
        
    $name                 test_input($_POST['name']);
        
    $email                 test_input($_POST['email']);
        
    $title                 test_input($_POST['title']);
        
    $message            test_input($_POST['message']);
        
    $secure_code    test_input($_POST['secure_code']);
        
    $date                time();
        
    $active               "N";
        
    $ip                    $_SERVER['REMOTE_ADDR'];
               
        
    $img = new Securimage();
          
    $security $img->check($secure_code);
       
        if(
    $_POST['submit']){
            
    $error "";
            if (empty(
    $_POST["name"])) {
            
    $error .= "<li>Ad & Soyad Girmediniz.</li>";
            }
            if (!
    preg_match("/^[a-zA-Z ]*$/",$name)) {
            
    $error .= "<li>Adınızda yalnızca harf ve boşluk olmalı.</li>";
            }
            if (empty(
    $_POST["email"])) {
            
    $error .= "<li>E-Mail Adresinizi Girmediniz.</li>";
            }
            if (!
    filter_var($emailFILTER_VALIDATE_EMAIL)) {
                      
    $error .= "<li>Tanımlanamayan e-posta</li>";
            }
            if (empty(
    $_POST["title"])) {
            
    $error .= "<li>Mesaj İçin Başlık Girmediniz.</li>";
            }
            if (empty(
    $_POST["message"])) {
            
    $error .= "<li>Mesaj Girmediniz.</li>";
            }
            if(
    $security !=true){
            
    $error .= "<li>Güvenlik Kodunu Yanlış Girdiniz.</li>";
            }
           
            if(
    $error){
            echo 
    "<span style='color:red'>".$error."</span>";
            }else{
     
           
    $stmt $conn->prepare("INSERT INTO comments(id, type, title, name, email, active, date, comment, ip) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");

          
    $stmt->bind_param("ssssssssd"$id$type$title$name$email$active$date$comment$ip);
          
    $stmt->execute();

          echo 
    "New records created successfully";

         
    $stmt->close();
         
    $conn->close();
             }
        }
    ?>
     
  2. MaviAteş

    MaviAteş Aktif Üye

    Kayıt:
    23 Mart 2007
    Mesajlar:
    440
    Beğenilen Mesajlar:
    5
    Meslek:
    Bilgisayar Sistemleri Öğretmeni
    Şehir:
    Başakşahir, İstanbul
     
    Son düzenleme: 7 Mart 2018
  3. exe676

    exe676 Üye

    Kayıt:
    29 Ağustos 2011
    Mesajlar:
    33
    Beğenilen Mesajlar:
    1
    merhaba öncelikle mysql kullandığını varsayarak şu alana göz atmanı tavsiye ederim : MySQL Data Types

    tablo yapını bilmediğim için kendimce bir yapı hazırladım.
    [​IMG]
    tablo notları :
    -"id" sütununu ne için kullanıyorsun bilmiyorum ama tahminimce mesaj idsi olacak. bunu elle girmek sıkıntı. otomatik artarak değer vermeye ayarlı yaptım ve sorgudan sildim. onun yerine "tid" sütununu ekledim.
    -email varchar 254 çünkü : max email uzunluğu diye biliniyor.
    -date int-unsigned. çünkü : unix time modunda sayısal tarih tutma taraftarıyım. unsigned olmasının sebebi sadece pozitif sayılar tutarak 11 karaktere kadar çıkabilmek.

    bunun dışındakileri bana uygun şekilde seçtim.

    ayrıca :
    -posttan gelen verileri değişkene koyduğun yerleri post varmı kontrolü kısmının içine sokman daha mantıklı olur. post tetiklenmediği için hatalar verebilir ve gereksiz bir seçim.
    -"type" sütununu sorguya eklemişsin ama ortada değer atanmış bir değişken yok. onu ekledim.
    -yorum verisini php tarafında "message" diye tanımlarken veritabanında c"omment" diye tanımlamışsın. ben "comment" tanımında toparladım.
    -bildiğim kadarı ile PDO da bind_param değil de bindParam metodu mevcut. Muhtemelen mysql_i kullanıyorsun. tavsiyem PDO kullanman yönünde.

    # php dosyası : denf5 - Ghostbin
    # sql dosyası : a5hyw - Ghostbin

    # sql+php indirme linki : denemePDOInsert.zip
     
  4. netmaster

    netmaster Üye

    Kayıt:
    19 Kasım 2007
    Mesajlar:
    249
    Beğenilen Mesajlar:
    0
    Selam exe eline emeğine sağlık kardeşim,
    Ben dışardayım telden baktım, sabah denerim.
    Mysql - php 7.2.2 kullanıyor server.

    SQL tablom şu şekilde:
    Comment_id (yorum idisidir) oto eklenir.
    id (ait olduğu makalenin id’sidir) .
    Type (makale veya haber) hangi tür yazıya ait olduğudur.
    hidden input’dan geliyor.
    active ‘N’ onay değil.

    Diğerlerini biliyorsun zaten, telden bu kadar yardımcı olabiliyorum.

    TŞK tekrar.
     
  5. kaanavsar

    kaanavsar Yeni Üye

    Kayıt:
    7 Şubat 2018
    Mesajlar:
    20
    Beğenilen Mesajlar:
    0
    Şehir:
    istanbul
    @exe676 Güvenlik kodu sürekli olarak yanlış hatası veriyor :(

    PHP:
    $id $_POST['id']; // int length 11
        
    $type 'news'// tinyint length 3
        
    $name test_input($_POST['name']); // length 255
        
    $email test_input($_POST['email']); // email address max length : 254, length 254
        
    $title test_input($_POST['title']); // length 255
        
    $comment test_input($_POST['comment']); // text
        
    $date time(); // int length 11
        
    $active 'N'// 0 pasif, 1 aktif, 2... diye kullanabilirsin. tablo yapısında varsayılan olarak bu değer 0
        
    $ip $_SERVER['REMOTE_ADDR']; // length 45
        
    $img = new Securimage();
          
    $security $img->check($secure_code);
        
    $error "";
      
        if (empty(
    $_POST["name"])) {$error .= "<li>Ad & Soyad Girmediniz.</li>";}
        if (!
    preg_match("/^[a-zA-Z ]*$/"$name)) {$error .= "<li>Adınızda yalnızca harf ve boşluk olmalı.</li>";}
        if (empty(
    $_POST["email"])){$error .= "<li>E-Mail Adresinizi Girmediniz.</li>";}
        if (!
    filter_var($emailFILTER_VALIDATE_EMAIL)) {$error .= "<li>Tanımlanamayan e-posta</li>";}
        if (empty(
    $_POST["title"])) {$error .= "<li>Mesaj İçin Başlık Girmediniz.</li>";}
        if (empty(
    $_POST["comment"])) {$error .= "<li>Mesaj Girmediniz.</li>";}
        if (empty(
    $_POST["secure_code"])) {$error .= "<li>Güvenlik kodunu Giriniz.</li>";}
        if(
    $security !=true){$error .= "<li>Güvenlik Kodunu Yanlış Girdiniz.</li>";}
        if(
    $error){
            echo 
    "<span style='color:red'>".$error."</span>";
        }else{ 
     
  6. B.pasali

    B.pasali Üye

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    78
    Beğenilen Mesajlar:
    1
    sana ufak bir örnek yazıp kaçıyorum... ordan yola çıkarak sorunsuz yapabilirsin... hem böylelikle bindValue kullanımı öğrenmiş kullanmış olursun
    PHP:
    $sql $db->prepare('INSERT INTO sonuc SET mac_id=:id, firma=:f, bir=:bir, sifir=:sifir, iki=:iki');
    $sql->bindValue(":id",$id);
    $sql->bindValue(":f",$firma);
    $sql->bindValue(":bir",$bir);
    $sql->bindValue(":sifir",$sifir);
    $sql->bindValue(":iki",$iki);
    $sql->execute(); 
     
  7. kaanavsar

    kaanavsar Yeni Üye

    Kayıt:
    7 Şubat 2018
    Mesajlar:
    20
    Beğenilen Mesajlar:
    0
    Şehir:
    istanbul
    mysql kullanıyorum kardeşim yapı farklı gibi php5.. mysqli
    Güvenlik kodunu kaldırınca kaydediyor ama eksik kaydediyor

    son kaydettiğim resim bu linkte resim yükleyemiyorum

    PHP:
        $stmt $conn->prepare("INSERT INTO comments(id, type, title, comment, name, email, date, ip, active) VALUES (id, type, title, comment, name, email, date, ip, active)");
        
    $stmt->bind_param("sssssssss"$id$type$title$comment$name$email$date$ip$active);
        
    $id "id";
        
    $type "news";
        
    $title "title";
        
    $comment "comment";
        
    $name "name";
        
    $email "email";
        
    $date "date('Y-m-d');";
        
    $ip "ip";
        
    $active "N";

        
    $sonuc $stmt->execute();
        
            if(
    $sonuc){
                echo 
    "Yeni yorum başarılı bir şekilde kaydedildi.";
            }else{
                
    printf("Errormessage: %s\n"$conn->error);
            }
        
            
    $stmt->close();
            
    $conn->close(); // pdo bildiğim kadarıyla zaten bağlantıyı otomatik kapatıyor.
        
    }
     
    Son düzenleme: 7 Mart 2018
  8. kaanavsar

    kaanavsar Yeni Üye

    Kayıt:
    7 Şubat 2018
    Mesajlar:
    20
    Beğenilen Mesajlar:
    0
    Şehir:
    istanbul
    Çözümü böyle buldum arkadaşlar çalışıyor ama bana birşeyler yanlış geliyor, eski tarz sql sorgusuda aynı işi yapıyordu zaten :mad:

    ihtiyacı olan kullansın

    PHP:
        $stmt $conn->prepare("INSERT INTO comments(id, type, title, comment, name, email, date, ip, active) VALUES ('$id','$type','$title','$comment','$name','$email','$date','$ip','$active')");
        
    $stmt->bind_param("sssssssss"$id$type$title$comment$name$email$date$ip$active);

        
    $stmt->execute();
       
        if (
    $conn->errno 0) {
            die(
    "<b>Sorgu Hatası:</b> " $conn->error);
        } else {
            echo 
    "<b>Yorumunuz alındı onaylandıktan sonra yayınlacaktır:</b> ";

                     }
               
    $sorgu->close();
               
    $baglanti->close();
              }
        }  
    Eski tarz sql sorgusuda aynı işi görüyordu boşuna yük yapmışlar fazladan kod :mad:

    PHP:
           $sql "INSERT INTO comments(id, type, title, name, email, active, date, comment, ip) VALUES('$id','$type','$title','$name','$email','$active','$date','$comment','$ip')";

          if (
    $conn->query($sql) === TRUE) {
        echo 
    "Yorumunuz alındı onaydan sonra yayınlacaktır";
    } else {
        echo 
    "Error: " $sql "<br>" $conn->error;
    }

    $conn->close();
             }
        }