Я все еще начинающий программист, поэтому я надеюсь, что вы дадите решение шаг за шагом.
Я пытаюсь создать частный сервер для флэш-игры, и у меня возникла проблема, которой я не имеюне знаю, как я могу решить это вообще.Я хочу связать игру с базой данных, и когда кто-то пытается создать учетную запись (зарегистрироваться) в игре, данные учетной записи, которые должны быть сохранены в базе данных (например, имя пользователя, пароль, цвет маски, дата рождения, дата регистрации,и т.д. ...) но это не происходит
Файл, который отвечает за этот шаг, называется "register.php", и я продолжаю получать эту ошибку:
Fatal error: Call to a member function get() on null in C:\appserv\www\Cocolani\php\req\register.php on line 4
проблеманаходится в этой строке:
$db = new database($obj->get("db_name"), $obj->get("db_server"), $obj->get("db_user"), $obj->get("db_password"), $obj->get("url_root"));
и это "register.php":
<?php
include_once("db.php");
include_once("settings.php");
$db = new database($obj->get("db_name"), $obj->get("db_server"), $obj->get("db_user"), $obj->get("db_password"), $obj->get("url_root"));
$FROM_EMAIL = $obj->getEmailFrom();
function generateTribeCurrency($ID, $db) {
// $db = new database();
// get init purse amount
$db->setQuery("SELECT init_purse_amount FROM `cc_def_settings`");
$row = $db->loadResult();
$init_purse_amount = $row->init_purse_amount;
// load tribe info
$db->setQuery("SELECT * FROM `cc_tribes`");
$tribeinfo = $db->loadResults();
$newstr = array();
foreach ($tribeinfo as $i) {
if ($ID == $i->ID) array_push($newstr, $init_purse_amount); else array_push($newstr, 0);
}
$newstr = implode(",", $newstr);
return $newstr;
}
$hackchk = false;
foreach($_POST as $POST) {
$POST = mysqli_real_escape_string($POST);
}
function remove_bad_symbols($s) {
return preg_replace(
array(0=>'#/#', 1=>'#\\\#', 2=>'#;#', 3=>'#{#', 4=>'#}#', 5=>'#<#', 6=>'#>#', 7=>'#@#', 8=>'#\'#', 9=>'# #', 10=>'#"#') // patterns
, '' // replacements
, $s);
}
$username = isset($_POST['username']) ? remove_bad_symbols($_POST['username']) : "";
$password = isset($_POST['password']) ? $_POST['password'] : "";
$email = isset($_POST['email']) ? $_POST['email'] : "";
$birthdate = isset($_POST['birthdate']) ? $_POST['birthdate'] : "";
$firstname = isset($_POST['firstname']) ? $_POST['firstname'] : "";
$lastname = isset($_POST['lastname']) ? $_POST['lastname'] : "";
$sex = isset($_POST['sex']) ? $_POST['sex'] : "";
$tribeid = isset($_POST['clan']) ? $_POST['clan'] : "";
$mask = isset($_POST['mask']) ? $_POST['mask'] : "";
$mask_color = isset($_POST['maskcl']) ? $_POST['maskcl'] : "";
$lang_id = isset($_POST['lang_id']) ? $_POST['lang_id'] : 0;
$error = '';
$purse = generateTribeCurrency((int) $tribeid, $db);
// get language suffix
if ($lang_id != 0) {
$db->setQuery("SELECT * FROM `cc_extra_langs` WHERE id='{$lang_id}'");
$res = $db->loadResult();
$lang = "_".$res->lang;
} else $lang = "";
$db->setQuery("SELECT one_email_per_registration FROM `cc_def_settings`");
$res = $db->loadResult();
$one_registration_per_email = ($res->one_email_per_registration == 1);
$email_check_ok = true;
if ($one_registration_per_email == true) {
$sql = "SELECT COUNT(*) AS counter FROM `cc_user` WHERE email='{$email}'";
// for several registrations per one email address -- no check
$db->setQuery($sql);
$res1 = $db->loadResult();
$email_check_ok = $res1->counter == "0";
}
// first check there is no username with this name already registered.
$db->setQuery("SELECT COUNT(*) AS counter FROM `cc_user` WHERE username='".$username."'");
$res = $db->loadResult();
if ($username && $email && $sex && $birthdate) {
if ($email_check_ok) {
if ($res->counter == "0") {
// check that there are no registrations from this same IP in the last 2 hours
$db->setQuery("SELECT COUNT(*) as counter FROM `cc_userreginfo` WHERE IP='".$_SERVER['REMOTE_ADDR']."' AND (DATE_SUB(CURDATE(), INTERVAL 2 HOUR)<register_date)");
$regcheck = $db->loadResult();
if (($regcheck != null && (int)($regcheck->counter) == 0) || $hackchk == false) {
// get number of already registered number of registrations with this email address
$query = $db->setQuery("SELECT count(*) as registered_num_emails FROM `cc_user` WHERE email='{$email}'");
$row = $db->loadResult();
$already_registered_num_emails = $row->registered_num_emails;
// get max number of accounts per email from settings table
$query = $db->setQuery("SELECT max_num_account_per_email from `cc_def_settings`");
$row = $db->loadResult();
$max_num_account_per_email = $row->max_num_account_per_email;
if ($already_registered_num_emails < $max_num_account_per_email) {
$uniqid = uniqid();
$newreq = "INSERT INTO `cc_user` (`ID`,`username`, `password`, `email`, `birth_date`, `first_name`, `last_name`, `sex`, `about`, `mask`, `mask_colors`, `clothing`, `tribe_ID` , `money`, `happyness`, `rank_ID`, `status_ID`, `lang_id`, `register_date`, uniqid, permission_id) VALUES ";
$newreq .= "(NULL, '{$username}', '{$password}', '{$email}', '{$birthdate}', '{$firstname}' , '{$lastname}', '{$sex}', '', '{$mask}', '{$mask_color}', '', '{$tribeid}', '{$purse}', 50, 0, 3, '{$lang_id}', NOW(), '{$uniqid}', 4)";
$db->setQuery($newreq);
$res = $db->runQuery();
if ($res) {
// add registration info into the userreginfo table as well.
$iid = $db->mysqlInsertID();
$db->setQuery("INSERT INTO `cc_userreginfo` (`ID`, `user_id`, `register_IP`, `register_date`, `last_update`) VALUES (NULL, ".$iid.",'".$_SERVER['REMOTE_ADDR']."', NOW(), NOW())");
$res2 = $db->runQuery();
$counter = ($regcheck != null) ? $regcheck->counter : 0;
echo 'response=true®='.$counter;
// ----------------------------------
// send confirmation email
// ----------------------------------
$cur_lang = ($lang != "") ? substr($lang, 1)."/" : "";
$msg = $obj->getTranslation(-13, $lang, "email_templates", "id", "content");
$msg = str_replace("%FIRST_NAME%", $firstname, $msg);
$msg = str_replace("%LAST_NAME%", $lastname, $msg);
$msg = str_replace("'", "'", $msg);
$msg = str_replace("%CONFIRM%", '<a href="'.$obj->get("url_root").'/'.$cur_lang.'registration-confirmed?confirmregistration='.$uniqid.'">confirm</a>', $msg);
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf8' . "\r\n";
$headers .= 'From: '.$FROM_EMAIL."\r\n";
//mail($email, $obj->getTranslation(-13, $lang, "email_templates", "id", "subject"), $msg, $headers);
include "../../admin/php_mailer/class.phpmailer.php";
$mail = new PHPMailer(); // defaults to using php "mail()"
$body = $msg;
$body = eregi_replace("[\]",'',$body);
$mail->SetFrom($FROM_EMAIL);
$mail->AddAddress($email);
$mail->Subject = $obj->getTranslation(-13, $lang, "email_templates", "id", "subject");
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
if(!$mail->Send()) {
die("Mailer Error: " . $mail->ErrorInfo);
} else {
//echo "Message sent!";
}
// ----------------------------------
} else {
echo 'response=false';
}
} else {
// get warning message from db
$db->setQuery("SELECT * FROM `cc_translations` WHERE caption='MAX_NUM_REGISTRATION_REACHED'");
$res = $db->loadResult();
echo 'error='.urlencode($res->{"name".$lang});
}
} else {
// get warning message from db
$db->setQuery("SELECT * FROM `cc_translations` WHERE caption='REGISTER_LATER'");
$res = $db->loadResult();
echo 'errorhide='.urlencode($res->{"name".$lang});
}
} else {
// get warning message from db
$db->setQuery("SELECT * FROM `cc_translations` WHERE caption='USERNAME_IN_USE'");
$res = $db->loadResult();
echo 'error='.urlencode($res->{"name".$lang});
}
} else {
//if ($one_registration_per_email == true)
$sql = "SELECT * FROM `cc_translations` WHERE caption='DUPLICATED_EMAIL'"; //else $sql = "SELECT * FROM `cc_translations` WHERE caption='DUPLICATED_REGISTRATION'";
// get warning message from db
$db->setQuery($sql);
$res = $db->loadResult();
echo 'error='.urlencode($res->{"name".$lang});
}
} else {
// get warning message from db
$db->setQuery("SELECT * FROM `cc_translations` WHERE caption='REGFORM_PROBLEM'");
$res = $db->loadResult();
echo 'error='.urlencode($res->{"name".$lang});
}
?>
примечание: "register.php" требует два файла, так что, возможно, ошибка в одном изих
settings.php:
<?php
$db_server = "localhost";
$db_user = "root";
$db_password = "qazqazqaz1";
$db_name = "coco";
$connect = mysqli_connect("$db_server","$db_user","$db_password","$db_name");
?>
db.php:
<code><?php
class database {
var $_debug = 0;
var $_sql = '';
var $_error = '';
var $_prefix = '';
var $_numrows = 0;
var $_DBhost = 'localhost';
var $_DBuser = "root";
var $_DBpass = "qazqazqaz1";
var $_DBname = "cocol";
var $url_root = "localhost/cocolani";
public function __construct($dbname = 'cocolani_battle', $dbuser = 'root', $dbpsw = 'pass1234', $dbhost = 'localhost', $urlroot = 'localhost/cocolani') {
$this->_DBname = 'cocolani_battle';
$this->_DBuser = 'root';
$this->_DBpass = 'pass1234';
$this->url_root = 'localhost/cocolani';
$this->_DBhost = 'localhost';
$this->_connection = mysqli_connect($this->_DBhost, $this->_DBuser, $this->_DBpass) or die("Couldn't connect to MySQL");
mysqli_select_db($this->_connection, $this->_DBname) or die("Select DB Error: ".mysqli_error());
}
public function __destruct() {
mysqli_close($this->_connection);
}
function debug($debug_level) {
$this->_debug = intval($debug_level);
}
function setQuery($sql) {
/* queries are given in the form of #__table need to replace that with the prefix */
$this->_sql = str_replace('#__', $this->_prefix.'_', $sql);
}
function getQuery() {
return "<pre>" . htmlspecialchars( $this->_sql) . "
";} функция prepareStatement ($ sql) {$ this-> sql = mysqli_prepare ($ this-> _ connection, $ sql); вернуть $ this-> sql;} функцию runQuery ($ num_rows = 0) {mysqli_select_db ($ this -> _ connection, $ this -> _ DBname) или die («Выбрать ошибку БД:» .mysqli_error()); $ this -> _ numrows = 0; $ result = mysqli_query ($ this -> _ connection, $ this -> _ sql); if ($ this -> _ debug> 1) echo "
" . htmlspecialchars( $this->_sql) . "
"; if (! $ result) {$ this -> _ error = mysqli_error ($ this -> _ connection);if ($ this -> _ debug) {echo 'Ошибка:'.$ this-> getQuery ().$ Это -> _ ошибка;} вернуть ложь;} if ($ num_rows) {$ this -> _ numrows = mysqli_num_rows ($ result);} вернуть $ результат;} / * Получить идентификатор вставки Mysql * / function mysqlInsertID () {$ insert_id = mysqli_insert_id ();return $ insert_id;} / * Экранирует специальные символы при вставке в db * / function db_input ($ string) {if (is_array ($ string)) {$ retArray = array ();foreach ($ string as $ key => $ value) {$ value = (get_magic_quotes_gpc ()? stripslashes ($ value): $ value);$ retArray [$ key] = mysqli_real_escape_string ($ value);} return $ retArray;} else {$ string = (get_magic_quotes_gpc ()? stripslashes ($ string): $ string);return mysqli_real_escape_string ($ string);}} function getError () {return $ this -> _ error;} / * Загрузка результатов в строку в формате csv * / function loadCsv () {if (! ($ Res = $ this-> runQuery ())) {return null;} $ csv_string = '';while ($ row = mysqli_fetch_row ($ res)) {$ line = '';foreach ($ row как $ value) {if ((! isset ($ value)) || ($ value == "")) {$ value = ",";} else {$ value = $ value."";$ value = str_replace ('"', '" "', $ value);} $ line. = $ value;} $ line = substr ($ line, 0, -1); $ csv_string. = trim ($ line). "\ n";} $ csv_string = str_replace ("\ r", "", $ csv_string); // $ csv_string. = implode (",", $ row). "\ n"; mysqli_free_result ($ res); return $ csv_string;} / * Загрузка нескольких результатов * / функция loadResults ($ key = '') {if (! ($ res = $ this-> runQuery ())) {return null;} $ array = array (); while ($ row = mysqli_fetch_object ($ res)) {if ($ key) {$ array [strtolower ($ row -> $ key)] = $ row;} else {$ array [] = $ row;}} mysqli_free_result($ res); вернуть $ массив;} функция loadResult () {if (! ($ res = $ this-> runQuery ())) {if ($ this -> _ debug) echo 'Ошибка:'. $ this->_error; return null;} $ row = mysqli_fetch_object ($ res); mysqli_free_result ($ res); return $ row;} / * Загрузить поле результата в массив * / function loadArray () {if (! ($ res = $this-> runQuery ())) {return null;} $ array = array (); while ($ row = mysql_fetch_row ($ res)) {$ array [] = $ row [0];} mysqli_free_result ($ res);Ретурмассив n $;}/ * Загрузить строку в ассоциативный массив * / function loadAssoc () {if (! ($ Res = $ this-> runQuery ())) {return null;} $ row = mysqli_fetch_assoc ($ res);mysqli_free_result ($ Рез);вернуть $ row;} / * Вернуть одно поле * / function loadField () {if (! ($ Res = $ this-> runQuery ())) {return null;} while ($ row = mysql_fetch_row ($ res)) {$ field = $ row [0];} mysqli_free_result ($ res);вернуть поле $;}?>
Я пытался решить ее самостоятельно, но потерял надежду, поэтому, пожалуйста, скажите мне точное решение по шагам.
спасибо.