• 03-07-2024, 14:14:37
    #1
    <p>Merhaba, kendimce geliştirdiğim sitemde bir hata çıktı, saatlerdir kafa yoruyorum sormadığım yapay zeka kalmadı hepsi aynı cevapları veriyor ama sorun bir türlü çözülmüyor.&nbsp;</p><p><br></p><p>Şöyle bir kod bulunuyor, bu html formlarından verileri çekip variableye alıyor ve o variableleri veritabanına aktarıyor. Fakat bir hata var ve bir türlü çözemedim. Yardımcı olabilecek herkese şimdiden teşekkürler.

    </p>
    $ucpname = $_POST['ucpname'];
    $charname = $_POST['charname'];
    $charstory = $_POST['charstory'];
    $age = (int) $_POST['age']; // age as integer
    $dogumyeri = $_POST['dogumyeri'];
    $tenrengi = (int) $_POST['tenrengi'];
    $cinsiyet = (int) $_POST['cinsiyet'];
    $sifre = $_POST['sifre'];
    $frage1 = $_POST['frage1'];
    $frage2 = $_POST['frage2'];
    $frage3 = $_POST['frage3'];
    $frage4 = $_POST['frage4'];
    $frage5 = $_POST['frage5'];
    $frage6 = $_POST['frage6'];
    $frage7 = $_POST['frage7'];
    $frage8 = $_POST['frage8'];
    $frage9 = $_POST['frage9'];
    $frage10 = $_POST['frage10'];
    $frage11 = $_POST['frage11'];
    $frage12 = $_POST['frage12'];
    $stmt = $conn->prepare("INSERT INTO xucp_whitelist (ucpname, charname, charstory, age, dogumyeri, tenrengi, cinsiyet, sifre, frage1, frage2, frage3, frage4, frage5, frage6, frage7, frage8, frage9, frage10, frage11, frage12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssisiissssssssssss", $ucpname, $charname, $charstory, $age, $dogumyeri, $tenrengi, $cinsiyet, $sifre, $frage1, $frage2, $frage3, $frage4, $frage5, $frage6, $frage7, $frage8, $frage9, $frage10, $frage11, $frage12);

    <p>
  • 03-07-2024, 14:16:34
    #2
    fatbotter.com
    Hatayı da yazar mısınız?
  • 03-07-2024, 14:17:21
    #3
    lookout adlı üyeden alıntı: mesajı görüntüle
    Hatayı da yazar mısınız?
    Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables in C:xampphtdocsusercpwhitelistindex.php:198 Stack trace: #0 C:xampphtdocsusercpwhitelistindex.php(198): mysqli_stmt->bind_param('sssisiissssssss...', 'deks1337', 'Deks_Michealson...', 'wqeqweqweqweqwe...', 34, 'Italya', 1, 1, 'deksbaba', 'ewqqewqeweqwqew...', 'qwqweeqqewqweqw', 'eqew', 'weqeweqw', 'qewqewqeweqwewq', 'qweqewqewww', 'qweqweqwe', 'qweqweqweq', 'weqwe', 'qweqweqweqweq', 'weqwe', 'qweqweqw') #1 {main} thrown in C:xampphtdocsusercpwhitelistindex.php on line 198

    198. satır
    $stmt->bind_param("sssisiissssssssssss", $ucpname, $charname, $charstory, $age, $dogumyeri, $tenrengi, $cinsiyet, $sifre, $frage1, $frage2, $frage3, $frage4, $frage5, $frage6, $frage7, $frage8, $frage9, $frage10, $frage11, $frage12);'a denk geliyor


    Unutmuşum, teşekürler
  • 03-07-2024, 14:19:31
    #4
    fatbotter.com
    Hatanın sebebi, `bind_param()` fonksiyonunda tür tanımı (type definition string) ve bağlanan değişkenlerin sayısının uyuşmamasıdır. Kısaca, `bind_param` fonksiyonuyla belirtilen tür tanımı dizgesi (örneğin, 'sssisiissssssssssss') ve sağlanan değişkenlerin sayısının eşleşmesi gerekiyor.

    Kodsatırınızda, tür tanımı dizgesinde 20 tane karakter ve değişken var, fakat iki fazladan 's' var.

    ```php
    $stmt = $conn->prepare("INSERT INTO xucp_whitelist (ucpname, charname, charstory, age, dogumyeri, tenrengi, cinsiyet, sifre, frage1, frage2, frage3, frage4, frage5, frage6, frage7, frage8, frage9, frage10, frage11, frage12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssisiissssssssssss", $ucpname, $charname, $charstory, $age, $dogumyeri, $tenrengi, $cinsiyet, $sifre, $frage1, $frage2, $frage3, $frage4, $frage5, $frage6, $frage7, $frage8, $frage9, $frage10, $frage11, $frage12);
    ```

    Belirttiğiniz kısımdaki "sssisiissssssssssss" tür tanımı dizgesinde 20 karakter var. Ancak şu şeklide olmalı:
    - 3 tane `s` (string)
    - 1 tane `i` (integer)
    - 1 tane `s` (string)
    - 1 tane `i` (integer)
    - 1 tane `i` (integer)
    - 1 tane `s` (string)
    - 12 tane `s` (string)

    Bu durumda dizgeniz şu hale gelmeli: "sssisiissssssssss" (18 karakter toplam).

    Bu durumda doğru kod şu olacaktır:

    ```php
    $stmt = $conn->prepare("INSERT INTO xucp_whitelist (ucpname, charname, charstory, age, dogumyeri, tenrengi, cinsiyet, sifre, frage1, frage2, frage3, frage4, frage5, frage6, frage7, frage8, frage9, frage10, frage11, frage12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssisiissssssssssss", $ucpname, $charname, $charstory, $age, $dogumyeri, $tenrengi, $cinsiyet, $sifre, $frage1, $frage2, $frage3, $frage4, $frage5, $frage6, $frage7, $frage8, $frage9, $frage10, $frage11, $frage12);
    ```

    Ancak, hata mesajından kaynaklanan uyumsuzluğu çözmek için, doğru parametre dizgisini ve parametre sayılarını kontrol ettiğinizden emin olun. İlave olarak veritabanı bağlantısı (`$conn`) ve `$_POST` verilerinin mevcut olduğundan emin olun.

    Bu kodu çalıştırdığınızda hata almamanız gerekir:

    ```php
    $ucpname = $_POST['ucpname'];
    $charname = $_POST['charname'];
    $charstory = $_POST['charstory'];
    $age = (int) $_POST['age']; // age as integer
    $dogumyeri = $_POST['dogumyeri'];
    $tenrengi = (int) $_POST['tenrengi'];
    $cinsiyet = (int) $_POST['cinsiyet'];
    $sifre = $_POST['sifre'];
    $frage1 = $_POST['frage1'];
    $frage2 = $_POST['frage2'];
    $frage3 = $_POST['frage3'];
    $frage4 = $_POST['frage4'];
    $frage5 = $_POST['frage5'];
    $frage6 = $_POST['frage6'];
    $frage7 = $_POST['frage7'];
    $frage8 = $_POST['frage8'];
    $frage9 = $_POST['frage9'];
    $frage10 = $_POST['frage10'];
    $frage11 = $_POST['frage11'];
    $frage12 = $_POST['frage12'];

    $stmt = $conn->prepare("INSERT INTO xucp_whitelist (ucpname, charname, charstory, age, dogumyeri, tenrengi, cinsiyet, sifre, frage1, frage2, frage3, frage4, frage5, frage6, frage7, frage8, frage9, frage10, frage11, frage12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssisiissssssssssss", $ucpname, $charname, $charstory, $age, $dogumyeri, $tenrengi, $cinsiyet, $sifre, $frage1, $frage2, $frage3, $frage4, $frage5, $frage6, $frage7, $frage8, $frage9, $frage10, $frage11, $frage12);

    // Execute statement
    $stmt->execute();
    $stmt->close();
    ```

    Bu kod, verileri `xucp_whitelist` tablosuna başarıyla ekleyecektir.
  • 03-07-2024, 14:21:36
    #5
    Parfasoft Ltd. Şti.
    query'de 20 parametre alıyorsun
    Ama 21 tane yerleştirmeye çalışıyorsun
  • 03-07-2024, 14:22:03
    #6
    lookout adlı üyeden alıntı: mesajı görüntüle
    Hatanın sebebi, `bind_param()` fonksiyonunda tür tanımı (type definition string) ve bağlanan değişkenlerin sayısının uyuşmamasıdır. Kısaca, `bind_param` fonksiyonuyla belirtilen tür tanımı dizgesi (örneğin, 'sssisiissssssssssss') ve sağlanan değişkenlerin sayısının eşleşmesi gerekiyor.

    Kodsatırınızda, tür tanımı dizgesinde 20 tane karakter ve değişken var, fakat iki fazladan 's' var.

    ```php
    $stmt = $conn->prepare("INSERT INTO xucp_whitelist (ucpname, charname, charstory, age, dogumyeri, tenrengi, cinsiyet, sifre, frage1, frage2, frage3, frage4, frage5, frage6, frage7, frage8, frage9, frage10, frage11, frage12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssisiissssssssssss", $ucpname, $charname, $charstory, $age, $dogumyeri, $tenrengi, $cinsiyet, $sifre, $frage1, $frage2, $frage3, $frage4, $frage5, $frage6, $frage7, $frage8, $frage9, $frage10, $frage11, $frage12);
    ```

    Belirttiğiniz kısımdaki "sssisiissssssssssss" tür tanımı dizgesinde 20 karakter var. Ancak şu şeklide olmalı:
    - 3 tane `s` (string)
    - 1 tane `i` (integer)
    - 1 tane `s` (string)
    - 1 tane `i` (integer)
    - 1 tane `i` (integer)
    - 1 tane `s` (string)
    - 12 tane `s` (string)

    Bu durumda dizgeniz şu hale gelmeli: "sssisiissssssssss" (18 karakter toplam).

    Bu durumda doğru kod şu olacaktır:

    ```php
    $stmt = $conn->prepare("INSERT INTO xucp_whitelist (ucpname, charname, charstory, age, dogumyeri, tenrengi, cinsiyet, sifre, frage1, frage2, frage3, frage4, frage5, frage6, frage7, frage8, frage9, frage10, frage11, frage12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssisiissssssssssss", $ucpname, $charname, $charstory, $age, $dogumyeri, $tenrengi, $cinsiyet, $sifre, $frage1, $frage2, $frage3, $frage4, $frage5, $frage6, $frage7, $frage8, $frage9, $frage10, $frage11, $frage12);
    ```

    Ancak, hata mesajından kaynaklanan uyumsuzluğu çözmek için, doğru parametre dizgisini ve parametre sayılarını kontrol ettiğinizden emin olun. İlave olarak veritabanı bağlantısı (`$conn`) ve `$_POST` verilerinin mevcut olduğundan emin olun.

    Bu kodu çalıştırdığınızda hata almamanız gerekir:

    ```php
    $ucpname = $_POST['ucpname'];
    $charname = $_POST['charname'];
    $charstory = $_POST['charstory'];
    $age = (int) $_POST['age']; // age as integer
    $dogumyeri = $_POST['dogumyeri'];
    $tenrengi = (int) $_POST['tenrengi'];
    $cinsiyet = (int) $_POST['cinsiyet'];
    $sifre = $_POST['sifre'];
    $frage1 = $_POST['frage1'];
    $frage2 = $_POST['frage2'];
    $frage3 = $_POST['frage3'];
    $frage4 = $_POST['frage4'];
    $frage5 = $_POST['frage5'];
    $frage6 = $_POST['frage6'];
    $frage7 = $_POST['frage7'];
    $frage8 = $_POST['frage8'];
    $frage9 = $_POST['frage9'];
    $frage10 = $_POST['frage10'];
    $frage11 = $_POST['frage11'];
    $frage12 = $_POST['frage12'];

    $stmt = $conn->prepare("INSERT INTO xucp_whitelist (ucpname, charname, charstory, age, dogumyeri, tenrengi, cinsiyet, sifre, frage1, frage2, frage3, frage4, frage5, frage6, frage7, frage8, frage9, frage10, frage11, frage12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssisiissssssssssss", $ucpname, $charname, $charstory, $age, $dogumyeri, $tenrengi, $cinsiyet, $sifre, $frage1, $frage2, $frage3, $frage4, $frage5, $frage6, $frage7, $frage8, $frage9, $frage10, $frage11, $frage12);

    // Execute statement
    $stmt->execute();
    $stmt->close();
    ```

    Bu kod, verileri `xucp_whitelist` tablosuna başarıyla ekleyecektir.
    Çalışmadı hocam, ekteki hatayı vermeye devam ediyor...
    Fatal error: Uncaught ArgumentCountError: The number of elements in the type definition string must match the number of bind variables in C:xampphtdocsusercpwhitelistindex.php:198 Stack trace: #0 C:xampphtdocsusercpwhitelistindex.php(198): mysqli_stmt->bind_param('sssisiissssssss...', 'deks1337', 'Deks_Michealson...', 'wqeqweqweqweqwe...', 23, 'Brezilya', 1, 1, 'deksbaba', 'qwwqqweqeweqw', 'qewewq', 'ewqwwqeeqwqewew...', 'qewewq', 'weqewq', 'eqwewqewqewq', 'qwqewqew', 'wqe', 'ewqqew', 'qewqewwqe', 'wqeew', 'qwqeqew') #1 {main} thrown in C:xampphtdocsusercpwhitelistindex.php on line 198
  • 03-07-2024, 14:30:28
    #7
    Dener misin hocam?
    <?php
    $ucpname = $_POST['ucpname'];
    $charname = $_POST['charname'];
    $charstory = $_POST['charstory'];
    $age = (int) $_POST['age']; // age as integer
    $dogumyeri = $_POST['dogumyeri'];
    $tenrengi = (int) $_POST['tenrengi'];
    $cinsiyet = (int) $_POST['cinsiyet'];
    $sifre = $_POST['sifre'];
    $frage1 = $_POST['frage1'];
    $frage2 = $_POST['frage2'];
    $frage3 = $_POST['frage3'];
    $frage4 = $_POST['frage4'];
    $frage5 = $_POST['frage5'];
    $frage6 = $_POST['frage6'];
    $frage7 = $_POST['frage7'];
    $frage8 = $_POST['frage8'];
    $frage9 = $_POST['frage9'];
    $frage10 = $_POST['frage10'];
    $frage11 = $_POST['frage11'];
    $frage12 = $_POST['frage12'];
    
    $conn = new mysqli($servername, $username, $password, $dbname);
    
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    
    $stmt = $conn->prepare("INSERT INTO xucp_whitelist (ucpname, charname, charstory, age, dogumyeri, tenrengi, cinsiyet, sifre, frage1, frage2, frage3, frage4, frage5, frage6, frage7, frage8, frage9, frage10, frage11, frage12) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param("sssisiissssssssssss", $ucpname, $charname, $charstory, $age, $dogumyeri, $tenrengi, $cinsiyet, $sifre, $frage1, $frage2, $frage3, $frage4, $frage5, $frage6, $frage7, $frage8, $frage9, $frage10, $frage11, $frage12);
    
    if ($stmt->execute()) {
        echo "Yeni kayıt başarıyla oluşturuldu";
    } else {
        echo "Hata: " . $stmt->error;
    }
    
    $stmt->close();
    $conn->close();
    ?>
  • 03-07-2024, 14:37:52
    #8
    Yardımcı olan herkese çok teşekkürler @ataliemre; hocam çözdü, kk