Sphere 0.56b — MySQL Account Sistemi Kurulumu
UO-Developer.com — AppServ, phpMyAdmin, PHP kayıt formu ve Sphere aktarımıMerhaba arkadaşlar — hep beraber bir hesap sistemi yapalım. Vereceğim kodlar basittir; geliştirilebilir ve SphereServer'da geçmiştir. Web sitesinden kayıt olan kullanıcılar MySQL'e yazılır; Sphere periyodik olarak bu kayıtları account dosyasına aktarır.
Konu: MySQL tabanlı web kayıt + Sphere import | Seviye: Orta – İleri
İlgili: 56b Account Sistemi | Sphere 0.56b Win32 | Sphere, MySQL ve PHP
MySQL kurulum: projedeki Sphere MySQL Entegrasyonu rehberi | MySQL Kurulumu
İçindekiler
- Gereksinimler
- AppServ kurulumu
- phpMyAdmin — veritabanı ve accounts tablosu
- sphere.ini MySQL ayarları
- PHP kayıt sayfası
- Sphere — f_onserver_start ve f_acc_update
- Aktarım zamanlaması
- Güvenlik uyarıları
- Kontrol listesi
1. Gereksinimler
Veritabanı kullanacağımız için Sphere sürümünüzün 0.56b olması gerekir.
İndirme: Sphere Releases — işletim sisteminize uygun sürüm.
PHP kodları Linux hosting ortamında doğal çalışır. Windows'ta doğrudan PHP+Apache kurulumu yerine AppServ, XAMPP veya EasyPHP gibi paketler kullanılır; belirlenen www klasörü web kökü olur. Bu rehberde AppServ anlatılır.
AppServ: appserv.org — Download
2. AppServ Kurulumu
Adım 1 — Kurulum sihirbazı
- Server Name: localhost
- Administrator e-mail: e-posta adresiniz
- Port: varsayılan — genelde Apache 80, MySQL 3306
- MySQL root şifresi: kurulumda iki kez girin — phpMyAdmin için gerekli
- Charset: UTF-8 Unicode — Türkçe karakter desteği için bırakın
Adım 2 — Web kök klasörü
Kurulum sonrası C:\AppServ\www klasörü web alanınızdır. phpMyAdmin hariç varsayılan dosyaları silip account sistemi dosyalarını buraya koyacağız.
3. phpMyAdmin — Veritabanı ve Tablo
Adım 1 — Giriş
Tarayıcıda:
http://localhost/phpmyadminKullanıcı: root | Şifre: kurulumda belirlediğiniz şifre.
Adım 2 — Yetkiler
Yetkililer → parola kısmında Evet dışındaki gereksiz global yetkileri kapatın — veritabanlarına şifresiz erişim olmasın.
Adım 3 — Veritabanı oluşturma
Yeni veritabanı adı — örnek sphere. Kendi adınızı kullanabilirsiniz; sphere.ini ve PHP'de aynı olmalı.
Adım 4 — accounts tablosu
Veritabanını seçin → üst menü SQL → aşağıdaki sorguyu yapıştırın → Git:
CREATE TABLE `accounts` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(26) default NULL,
`password` tinytext,
`email` varchar(60) default NULL,
`plevel` varchar(26) default 'player',
`status` int(11) default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;status alanı: 0 = Sphere'e henüz aktarılmadı, 1 = aktarıldı.
4. sphere.ini MySQL Ayarları
56b MySQL özelliğini aktif edin:
// MySql configuration.
MYSQL=1
MySqlHost=localhost
MySqlUser=root
MySqlPassword=sifreniz
MySqlDatabase=sphere- MySqlPassword — AppServ kurulum şifresi
- MySqlDatabase — oluşturduğunuz veritabanı adı
libMySQL.dll 32-bit dosyası Sphere klasöründe olmalı — libMySQL.dll 32-bit
5. PHP Kayıt Sayfası
Basit örnek kayıt formu — captcha, çift e-posta, PIN vb. ile geliştirilebilir. Dosyayı C:\AppServ\www\index.php olarak kaydedin.
Uyarı: Örnek kod eğitim amaçlıdır; düz metin şifre ve eski mysql_* fonksiyonları içerir. Canlı shard'da mysqli/PDO ve hash kullanın — bkz. bölüm 9.
MySQL bağlantı bilgilerini dosyanın üstündeki değişkenlerde düzenleyin:
$mysql_user = "root";
$mysql_pass = "sifreniz";
$mysql_database = "sphere";
$mysql_host = "localhost";Tam kayıt sayfası örneği:
<html>
<head>
<title>Sphere Account Register</title>
<style>
body { color: #003300; font-family: Verdana, Arial, Serif; font-size: 10pt; }
input { border: 1px solid #003300; color: #003300; background: #DDDDDD;
font-family: Verdana, Arial, Serif; font-size: 10pt; }
tr { font-size: 10pt; }
a:link, a:visited, a:active { text-decoration: none; color: #003300; }
a:hover { text-decoration: none; color: #FF6600; }
</style>
</head>
<body>
<div align="center">
<?php
$mysql_user = "root";
$mysql_pass = "sifreniz";
$mysql_database = "sphere";
$mysql_host = "localhost";
?>
<FORM METHOD=POST ACTION="<?php echo $_SERVER['PHP_SELF']; ?>?act=register">
<table cellspacing=0 border=0>
<tr>
<td colspan=2 style="border: 1px solid #003300; background: #DDDDDD;">
<CENTER><A HREF="index.php">Sphere Account Register</A></CENTER></td>
</tr>
<tr>
<td style="border-left: 1px solid #003300"> User:</td>
<td style="border-right: 1px solid #003300"><INPUT TYPE="text" NAME="login"></td>
</tr>
<tr>
<td style="border-left: 1px solid #003300"> Password:</td>
<td style="border-right: 1px solid #003300"><INPUT TYPE="password" NAME="senha1"></td>
</tr>
<tr>
<td style="border-left: 1px solid #003300"> Retype Password:</td>
<td style="border-right: 1px solid #003300"><INPUT TYPE="password" NAME="senha2"></td>
</tr>
<tr>
<td style="border-left: 1px solid #003300"> Email:</td>
<td style="border-right: 1px solid #003300"><INPUT TYPE="text" NAME="email"></td>
</tr>
<tr>
<td style="border: 1px solid #003300; border-top: 0px;" colspan=2>
<CENTER><INPUT NAME="Register" VALUE="Register" TYPE="submit"></CENTER></td>
</tr>
</table>
</FORM>
<?php
if ($_GET['act'] == 'register')
{
$conn = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
mysql_select_db($mysql_database);
$user = anti_injection($_POST['login']);
$pass1 = anti_injection($_POST['senha1']);
$pass2 = anti_injection($_POST['senha2']);
$email = anti_injection($_POST['email']);
if (valida(Array($user,$pass1,$pass2,$email)) == true)
{
if ($pass1 == $pass2)
{
if (ereg("([0-9,a-z,A-Z])", $user))
{
if (ereg("^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$", $email))
{
$query = mysql_query("SELECT * FROM accounts WHERE login='$user'");
$num_rows = mysql_num_rows($query);
if ($num_rows == 0)
{
$query = mysql_query("SELECT * FROM accounts WHERE email='$email'");
$num_rows = mysql_num_rows($query);
if ($num_rows == 0)
{
$query = mysql_query("INSERT INTO accounts (login, password, email, status) VALUES ('$user','$pass1','$email','0')");
if (!$query)
echo ":: Error on trying to register account ::";
else
echo ":: Account added with sucess ::";
}
else
echo ":: Email is already exist in database ::";
}
else
echo ":: User is already exist in database ::";
}
else
echo ":: Invalid email type ::";
}
else
echo ":: Use only numbers(0-9) and letters(a-z) ::";
}
else
echo ":: The password is not equal ::";
}
}
function anti_injection($sql)
{
$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
$sql = addslashes($sql);
return $sql;
}
function valida($campos){
foreach($campos as $c){
if(empty($c)){
echo ":: Write all fields ::<br>";
return false;
}
}
return true;
}
?>
</div>
</body>
</html>Test: http://localhost/index.php — kayıt sonrası phpMyAdmin'de accounts tablosunda status=0 satır görünmeli.
6. Sphere — MySQL Bağlantısı
Genelde scripts/sphere_serv_triggers.scp içinde f_onserver_start fonksiyonu bulunur — sunucu açılışında çalışır.
Veritabanı bağlantı testi:
[FUNCTION f_onserver_start]
db.connect
if (<db.connected>)
serv.log Bilgi: Mysql baglantisi basarili.
else
serv.log Bilgi: Mysql baglantisi basarisiz
endif
return 1Orijinal metinde DB.CONNECT büyük harf geçer; çoğu 56b build'de db.connect küçük harf kullanılır — sunucu logundan hangisinin çalıştığını doğrulayın.
7. Sphere — Account Aktarımı (f_acc_update)
Aynı script dosyasına account aktarım fonksiyonunu ekleyin:
[FUNCTION f_acc_update]
if (<db.connected>)
db.query "SELECT * FROM accounts WHERE status='0'"
if (<db.row.numrows> > 0)
for r 0 <eval <db.row.numrows>-1>
serv.account add <db.row.<eval <local.r>>.login> <eval <db.row.<eval <local.r>>.password>>
db.execute "UPDATE accounts SET status='1' WHERE login='<db.row.<eval <local.r>>.login>'"
serv.log Bilgi: #<eval <local.r>> Account <db.row.<eval <local.r>>.login> yaratildi.
end
endif
endif
return 1f_acc_update web'den gelen hesapları Sphere'e aktarır. status=0 kayıtları alır, account oluşturur, status=1 yapar.
8. Aktarım Zamanlaması
Ne sıklıkla aktarılacağını siz belirlersiniz:
Her save'de bir:
[FUNCTION f_onserver_save]
serv.f_acc_update
return 1Zamanlayıcı ile — örnek 30 dakikada bir:
sphere.ini içinde timer ayarlıysa f_onserver_timer fonksiyonuna ekleyin:
[FUNCTION f_onserver_timer]
serv.f_acc_update
return 1Sunucu açılışında bir kez de çalıştırmak için f_onserver_start sonuna serv.f_acc_update ekleyebilirsiniz.
9. Güvenlik Uyarıları
Bu rehber bilinçli olarak basit tutulmuştur. Canlı kullanım öncesi:
- Şifreleri düz metin yerine hash saklayın — Sphere tarafında uyumlu doğrulama gerekir
- PHP mysql_* ve ereg kaldırıldı — PHP 7+ için mysqli veya PDO
- anti_injection yeterli değil — prepared statement kullanın
- valida fonksiyonu orijinalde hatalı döngü mantığı içerebilir — yukarıdaki sürüm düzeltildi
- Web + Sphere aynı makinede saldırı yüzeyini artırır — mümkünse web hosting ayrı
Gelişmiş sistemler: Sorter Account Sistemi | Forum: Client ve Account Sistemleri
10. Özet Kontrol Listesi
- [ ] Sphere 0.56b kurulu mu?
- [ ] AppServ / MySQL çalışıyor mu?
- [ ] sphere veritabanı ve accounts tablosu oluşturuldu mu?
- [ ] sphere.ini MYSQL=1 ve bilgiler doğru mu?
- [ ] libMySQL.dll Sphere klasöründe mi?
- [ ] index.php www klasöründe, MySQL bilgileri güncel mi?
- [ ] Web kayıt testi — status=0 satır oluşuyor mu?
- [ ] f_onserver_start bağlantı logu başarılı mı?
- [ ] f_acc_update eklendi ve zamanlandı mı?
- [ ] Sphere'de yeni account ile giriş denendi mi?
11. Sonuç
MySQL ile Sphere bağlantısı mantıken basittir: web formu veritabanına yazar, Sphere periyodik olarak okur ve account oluşturur. Birkaç rehber okuduktan sonra istatistik, online listesi ve benzeri verileri de aynı yöntemle aktarabilirsiniz.
Sorular: Sphere MySQL forumu | Account sistemi Sphere bağlantısı


@vincent
Snaity paylaşmıştı ben de nasıl entegre edebilirler diye döküman hazırladım.