<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. </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>
PHP bilen hocalarım yardımcı olabilir mi?
7
●282
- 03-07-2024, 14:17:21Fatal 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 198lookout adlı üyeden alıntı: mesajı görüntüle
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:31Hatanı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:22:03Çalışmadı hocam, ekteki hatayı vermeye devam ediyor...lookout adlı üyeden alıntı: mesajı görüntüle
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:28Dener 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(); ?>