Sabahtan beri çözemiyorum json.parse verip duruyor çıldırmak üzereyim lütfen yardım
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
if (isset($_SESSION['isLogged']) && $_SESSION['isLogged'] === true) {
echo json_encode(['status' => 'redirect', 'url' => BASE_URL . '/Home']);
exit; // Sonlandır
}
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require '/xampp/htdocs/PHPMailer/src/Exception.php';
require '/xampp/htdocs/PHPMailer/src/PHPMailer.php';
require '/xampp/htdocs/PHPMailer/src/SMTP.php';
// PDO bağlantısı
global $DBSettings;
$pdo = new PDO("odbc:DRIVER={$DBSettings['driver']};SERVER={$DBSettings['server']};DATABASE={$DBSettings['game_db']};charset=UTF-8", $DBSettings['uid'], $DBSettings['pass']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Çıkış tamponlamasını başlat
ob_start();
// JSON yanıt türünü belirt
header('Content-Type: application/json');
// Kullanıcı kaydı işlemi
if (isset($_POST['strUserID'])) {
$strUserID = trim($_POST['strUserID']);
$Mail = trim($_POST['Mail']);
$Password = trim($_POST['Password']);
$RePassword = trim($_POST['RePassword']);
$PhoneNumber = trim($_POST['PhoneNumber']);
// Form doğrulama
if (!$strUserID || !$Mail || !$Password || !$RePassword || !$PhoneNumber) {
echo json_encode(['status' => 'error', 'message' => 'Lütfen tüm alanları doldurunuz.']);
ob_end_flush();
exit;
} else if ($Password !== $RePassword) {
echo json_encode(['status' => 'error', 'message' => 'Lütfen iki şifrenizi de aynı giriniz.']);
ob_end_flush();
exit;
}
// Kullanıcı, telefon ve mail var mı kontrol et
$stmt = $pdo->prepare("SELECT COUNT(*) as count FROM DATA WHERE strUserID = :strUserID");
$stmt->execute([':strUserID' => $strUserID]);
if ($stmt->fetchColumn() > 0) {
echo json_encode(['status' => 'error', 'message' => 'Bu kullanıcı adı zaten kullanılıyor.']);
ob_end_flush();
exit;
}
$stmt = $pdo->prepare("SELECT COUNT(*) as count FROM DATA WHERE PhoneNumber = :PhoneNumber");
$stmt->execute([':PhoneNumber' => $PhoneNumber]);
if ($stmt->fetchColumn() > 0) {
echo json_encode(['status' => 'error', 'message' => 'Bu telefon numarası zaten kayıtlı.']);
ob_end_flush();
exit;
}
$stmt = $pdo->prepare("SELECT COUNT(*) as count FROM DATA WHERE Mail = :Mail");
$stmt->execute([':Mail' => $Mail]);
if ($stmt->fetchColumn() > 0) {
echo json_encode(['status' => 'error', 'message' => 'Bu e-posta adresi zaten kayıtlı.']);
ob_end_flush();
exit;
}
// 6 basamaklı rastgele bir kod oluştur
$verificationCode = rand(100000, 999999);
// Kullanıcının e-postasına doğrulama kodunu gönder
$mail = new PHPMailer(true);
try {
// E-posta ayarları
$mail->isSMTP();
$mail->Host = 'SMTP';
$mail->SMTPAuth = true;
$mail->Username = 'USER';
$mail->Password = 'PASS';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port = 465;
$mail->setFrom('MAİL', 'Kayıt Onayı');
$mail->addAddress($Mail);
$mail->isHTML(true);
$mail->Subject = 'Kayıt Onayı';
$mail->Body = "Kayıt işleminizi tamamlamak için doğrulama kodunuz: {$verificationCode}";
if (!$mail->send()) {
echo json_encode(['status' => 'error', 'message' => 'Email gönderimi başarısız. Hata: ' . $mail->ErrorInfo]);
ob_end_flush();
exit;
}
// Kullanıcının bilgilerini ve doğrulama kodunu veritabanına kaydet
$stmt = $pdo->prepare("INSERT INTO DATA (strUserID, Mail, Password, PhoneNumber, VerificationCode, isVerified) VALUES (:strUserID, :Mail, :Password, :PhoneNumber, :VerificationCode, 0)");
$stmt->execute([
':strUserID' => $strUserID,
':Mail' => $Mail,
':Password' => password_hash($Password, PASSWORD_BCRYPT), // Şifreyi hashle
':PhoneNumber' => $PhoneNumber,
':VerificationCode' => $verificationCode
]);
echo json_encode(['status' => 'success', 'message' => 'Kayıt başarılı! E-postanıza gönderilen doğrulama kodunu giriniz.']);
ob_end_flush();
exit;
} catch (Exception $e) {
echo json_encode(['status' => 'error', 'message' => 'E-posta gönderimi başarısız. Hata: ' . $e->getMessage()]);
ob_end_flush();
exit;
}
}
if (json_last_error() !== JSON_ERROR_NONE) {
echo json_encode(['status' => 'error', 'message' => 'JSON encode hatası: ' . json_last_error_msg()]);
ob_end_flush();
exit;
}
// Kullanıcı doğrulama işlemi
if (isset($_POST['verificationCode'])) {
$inputCode = trim($_POST['verificationCode']);
$strUserID = $_SESSION['strAccountID'];
// Veritabanından doğrulama kodunu kontrol et
$stmt = $pdo->prepare("SELECT VerificationCode, isVerified FROM DATA WHERE strUserID = :strUserID");
$stmt->execute([':strUserID' => $strUserID]);
$checkCode = $stmt->fetch(PDO::FETCH_ASSOC);
if ($checkCode['isVerified'] == 1) {
echo json_encode(['status' => 'error', 'message' => 'Bu hesap zaten doğrulanmış.']);
ob_end_flush();
exit;
} else if ($checkCode['VerificationCode'] == $inputCode) {
// Kullanıcıyı doğrula
$stmt = $pdo->prepare("UPDATE DATA SET isVerified = 1 WHERE strUserID = :strUserID");
$stmt->execute([':strUserID' => $strUserID]);
// Oyun veritabanına kullanıcıyı ekleyelim
$GetHash = $pdo->query("SELECT dbo.HashPasswordString('{$Password}') as HashPW")->fetch(PDO::FETCH_OBJ);
$stmt = $pdo->prepare("INSERT INTO USER (strAccountID, strPasswd) VALUES (:strUserID, :strPasswd)");
$stmt->execute([
':strUserID' => $strUserID,
':strPasswd' => $GetHash->HashPW
]);
$_SESSION['isLogged'] = true;
$_SESSION['strUserID'] = $strUserID;
echo json_encode(['status' => 'success', 'message' => 'Hesabınız başarıyla doğrulandı.']);
ob_end_flush();
exit;
} else {
echo json_encode(['status' => 'error', 'message' => 'Geçersiz doğrulama kodu.']);
ob_end_flush();
exit;
}
}
ob_end_flush();
?>