[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обращение к разным базам Mysql
ArtKuz
Всем привет.
Есть форма обратной связи, на ней есть возможность менять тему: "Тема1", "Тема2". Надо чтобы при смене темы происходила работа с разными базами.
Раньше была только "Тема1" и код выглядел так:

<?php
require_once dirname(__FILE__) . '/class.dblayer.php';

function getEmailSubject()
{
global $_POST;

$messageType = '';
if ($_POST['subject'] == 'cartridge')
{
$messageType = "Тема1";
}

return "Сообщение с сайта '".$messageType."' от ".$_POST['name'];
}

function getEmailMessageBody()
{
global $_POST, $_SERVER;
$client = getDbClient();
if (is_null($client))
$client = '';
else
$client = "(".$client.")";

$message = '
Имя : '
.$_POST['name'].'<br />
Компания: '
.$_POST['company'].'<br />
Телефон: '
.$_POST['email'].'<br />
<br/>
IP: '
.$_SERVER['REMOTE_ADDR'].' '.$client.'<br /><br />

Тема1:<br/>'
.$_POST['number'].'<br /><br/>
Сообщение:<br /><br /> '
.nl2br($_POST['message']).' ';
return $message;
}

function logMessage()
{
global $_POST, $_SERVER;
$number = mysql_real_escape_string($_POST['number']);
$name = mysql_real_escape_string($_POST['name']);
$company = mysql_real_escape_string($_POST['company'])."(".$_SERVER['REMOTE_ADDR'].")";
$phone = mysql_real_escape_string($_POST['phone']);
$comment = mysql_real_escape_string($_POST['message']);
$message = substr($message, 0, 255);

//SET @@session.time_zone='+05:00'; insert into tempo (created) values (now())
$sql = "INSERT INTO issue (created, number, name, company, phone, status, comment) VALUES (now(),'$number','$name','$company','$phone',0, '$comment')";
$db = new db();
$result = $db->q($sql);
}

function getDbClient()
{
global $_SERVER;
$addr = $_SERVER['REMOTE_ADDR'];
if ($_SERVER['REMOTE_ADDR'] == '')
{
return '';
}

$db = new db();
$result = $db->q("SELECT ip,name FROM clients WHERE ip LIKE '%$addr%'");
while ($row = mysql_fetch_assoc($result)) {
$ip_array = explode(",", $row["ip"]);
foreach($ip_array as $ip)
{
if (trim($ip) == $addr)
{
return $row["name"];
}
}
}

return NULL;
}
?>

После добавления "Тема2" - я немного изменил код, но почему то в базу данных "Тема1" перестали заноситься данные и заносились только в "Тема2".

<?php
require_once dirname(__FILE__) . '/class.dblayer.php';

function getEmailSubject()
{

global $_POST;

$subjectType['cartridge'] = "Тема1";
$subjectType['application'] = "Тема2";

$messageType = $subjectType[$_POST['subject']] | "";

return "Сообщение с сайта '".$messageType."' от ".$_POST['name'];
}

function getEmailMessageBody()
{
global $_POST, $_SERVER;
$client = getDbClient();
if (is_null($client))
$client = '';
else
$client = "(".$client.")";

$message = '
Имя : '
.$_POST['name'].'<br />
Компания: '
.$_POST['company'].'<br />
Телефон: '
.$_POST['email'].'<br />
<br/>
IP: '
.$_SERVER['REMOTE_ADDR'].' '.$client.'<br /><br />

Тема1:<br/>'
.$_POST['number'].'<br /><br/>
Тема2: <br/>'
.$_POST['term'].'<br /><br/>
Сообщение:<br /><br /> '
.nl2br($_POST['message']).' ';
return $message;
}

function logMessage()
{
global $_POST, $_SERVER;
$number = mysql_real_escape_string($_POST['number']);
$name = mysql_real_escape_string($_POST['name']);
$company = mysql_real_escape_string($_POST['company'])."(".$_SERVER['REMOTE_ADDR'].")";
$phone = mysql_real_escape_string($_POST['phone']);
$comment = mysql_real_escape_string($_POST['message']);
$message = substr($message, 0, 255);

//SET @@session.time_zone='+05:00'; insert into tempo (created) values (now())

if($_POST['subject'] == 'cartridge')
$sql = "INSERT INTO issue (created, number, name, company, phone, status, comment) VALUES (now (),'$number','$name','$company','$phone',0, '$comment')";
else if($_POST['subject'] == 'application')
$sql = "INSERT INTO application (created, name, performer, company, phone, status, term, comment, complet) VALUES (now(), '$name', ' ', '$company', '$phone', 0, '$term', '$comment', ' ')";
$db = new db();
$result = $db->q($sql);
}

function getDbClient()
{
global $_SERVER;
$addr = $_SERVER['REMOTE_ADDR'];
if ($_SERVER['REMOTE_ADDR'] == '')
{
return '';
}

$db = new db();
$result = $db->q("SELECT ip,name FROM clients WHERE ip LIKE '%$addr%'");
while ($row = mysql_fetch_assoc($result)) {
$ip_array = explode(",", $row["ip"]);
foreach($ip_array as $ip)
{
if (trim($ip) == $addr)
{
return $row["name"];
}
}
}

return NULL;
}
?>

Люди, помогите поправить код пожалуйста.
Заранее благодарю.



Спустя 2 часа, 20 минут, 4 секунды (16.07.2010 - 08:53) vagrand написал(а):
Хех, а где код конекта к БД?

Спустя 2 часа, 23 минуты, 7 секунд (16.07.2010 - 11:16) ArtKuz написал(а):
Цитата (vagrand @ 16.07.2010 - 05:53)
Хех, а где код конекта к БД?

Вот это чтоли?

<?
define("CONTACTFORM_FROM_EMAILADDRESS", "no-reply@it-ekb.ru");
define("CONTACTFORM_TO_EMAILADDRESS", "vm@it-ekb.ru");

define("DB_HOST", "ubrok.mysql");
define("DB_USER", "ubrok_mysql");
define("DB_PASS", "etz2ib9j");
define("DB_PORT", "3306");
define("DB_DATABASE", "ubrok_it");

?>

Или это?

<?php
/**
*
@name dbconnection
*
@access private
*
@abstract proviedes a basic set for a connection
*
@param All needed access data for the db connection will be provided
* by a config file.
* You can change the constant values to anything you like.
* This class uses an exception called "mysqlex", in which
* $ex->getMessage() is replaced by mysql_error()
* and
* $ex->getCode() is replaced by mysql_errno()
*/


abstract class dbconnection {

/**
*
@name host
*
@access protected
*/

protected $host;

/**
*
@name user
*
@access protected
*/

protected $user;

/**
*
@name pass
*
@access protected
*/

protected $pass;

/**
*
@name port
*
@access protected
*/

protected $port;

/**
*
@name database
*
@access protected
*/

protected $database;


/**
*
@name constructor
*
@access public
*
@param no parameters
*/

public function __construct() {

$this->host = DB_HOST; //change this to whatever needed
$this->user = DB_USER;
$this->pass = DB_PASS;
$this->port = DB_PORT;
$this->database = DB_DATABASE;
}

/**
*
@name return_connection
*
@access protected
*
@param n parameters
* returns the connection resource
*/

protected function return_connection() {

try {
if(!$link = mysql_connect($this->host.":".$this->port, $this->user, $this->pass)) {
throw new Exception();
}
else {
if(!$return = mysql_select_db($this->database,$link)) {
throw new Exception();
}
else {
return $link;
}
}
}


/**
*
@todo Exception catches missing!
*/

catch (Exception $ex) {
}
}

}



/**
*
@name db
*
@access private
*/


class db extends dbconnection {

/**
*
@name conn
*
@var contains the resouce returned from the dbconnection
*/

private $conn;

/**
*
@name last result
*
@var provied the last positive query result
*/

public $lastresult;


/**
*
@name construct
*/


public function __construct() {

parent::__construct();
$this->conn = $this->return_connection();
}


/**
*
@name query
*
@var database query
*
@param string
*
@access public
*/

public function q($sql_input) {

try {
if(!@$result = mysql_query($sql_input,$this->conn)) {
throw new Exception();
}
else {
return $result;
}
}


catch (Exception $ex) {
}
}



/**
*
@name return 3d array result
*
@var query result
*
@param resource id
*
@access public
*/


public function get3darray($resource) {
try {
if(!@mysql_fetch_array($resource))
throw new Exception();

else {
$i = 0;
while($temp = mysql_fetch_array($resource)) {
$return[$i] = $temp;
$i++;
}
}

return $return;
}

catch (Exception $ex) {
}

}

}

?>

Спустя 29 минут, 10 секунд (16.07.2010 - 11:45) inpost написал(а):
Сначала качаем чужой код с одного сайта, потом на другом сайте выдавая за свой говоришь "Поменяйте мне", а где же твоя работа? Без труда не вытянешь и рыбки из пруда, знаешь такое?

Спустя 23 минуты, 27 секунд (16.07.2010 - 12:08) ArtKuz написал(а):
Цитата (inpost @ 16.07.2010 - 08:45)
Сначала качаем чужой код с одного сайта, потом на другом сайте выдавая за свой говоришь "Поменяйте мне", а где же твоя работа? Без труда не вытянешь и рыбки из пруда, знаешь такое?

Нет, все обстоит иначе. Был готовый сайт. Меня попросили добавить в него еще одну базу. Базу создал, данные из нее корректно отображаются, корректно редактируются в специальной форме. Но вот на этоn этапе никак не получается, такое ощущение, что косяк где-то тут:

if($_POST['subject'] == 'cartridge')
$sql = "INSERT INTO issue (created, number, name, company, phone, status, comment) VALUES (now (),'$number','$name','$company','$phone',0, '$comment')";
else if($_POST['subject'] == 'application')
$sql = "INSERT INTO application (created, name, performer, company, phone, status, term, comment, complet) VALUES (now(), '$name', ' ', '$company', '$phone', 0, '$term', '$comment', ' ')";
$db = new db();
$result = $db->q($sql);

Спустя 5 минут, 51 секунда (16.07.2010 - 12:14) inpost написал(а):
Совершенно верно, $db = new db(); - это обращение к классу, который подключает базу данных! Создай отдельный класс подключения с другим именем (db2), и подсоеденяйся к нему $db = new db2();

Спустя 3 минуты, 36 секунд (16.07.2010 - 12:18) ArtKuz написал(а):
Цитата (inpost @ 16.07.2010 - 09:14)
Совершенно верно, $db = new db(); - это обращение к классу, который подключает базу данных! Создай отдельный класс подключения с другим именем (db2), и подсоеденяйся к нему $db = new db2();

Как и где надо это прописать?
Вот так?

if($_POST['subject'] == 'cartridge')
$sql = "INSERT INTO issue (created, number, name, company, phone, status, comment) VALUES (now (),'$number','$name','$company','$phone',0, '$comment')";

$db = new db();
$result = $db->q($sql);

else if($_POST['subject'] == 'application')
$sql = "INSERT INTO application (created, name, performer, company, phone, status, term, comment, complet) VALUES (now(), '$name', ' ', '$company', '$phone', 0, '$term', '$comment', ' ')";

$db = new db2();
$result = $db->q($sql);


Спустя 8 минут, 33 секунды (16.07.2010 - 12:26) inpost написал(а):
Этим коротким изменением ты ничего не добьешься! Тут надо и классы добавлять, и скрипт дописывать... вообщем, стоит тебе в этом поработать! Если, конечно, проблем с этим у тебя нету)

Спустя 2 минуты, 53 секунды (16.07.2010 - 12:29) ArtKuz написал(а):
Цитата (inpost @ 16.07.2010 - 09:26)
Этим коротким изменением ты ничего не добьешься! Тут надо и классы добавлять, и скрипт дописывать... вообщем, стоит тебе в этом поработать! Если, конечно, проблем с этим у тебя нету)

Вот с этим у меня как раз и проблемы. PHP я знаю очень поверхностно. Можешь помочь?

Спустя 47 минут, 54 секунды (16.07.2010 - 13:17) tomash написал(а):
Зачем отдельный клас? В функцию-конструктор просто передавай параметры соединения!

Спустя 18 минут, 28 секунд (16.07.2010 - 13:36) ArtKuz написал(а):
Цитата (tomash @ 16.07.2010 - 10:17)
Зачем отдельный клас? В функцию-конструктор просто передавай параметры соединения!

Где имеено и что надо прописать? Что за конструктор? Подскажите пожалуйста.

Спустя 30 минут, 28 секунд (16.07.2010 - 14:06) tomash написал(а):
это в классе dbconnection
public function __construct($db_database) { 

$this->host = DB_HOST;
$this->user = DB_USER;
$this->pass = DB_PASS;
$this->port = DB_PORT;
$this->database = $db_database;
}

это в классе db
public function __construct($db_database = DB_DATABASE) { 

parent::__construct($db_database);
$this->conn = $this->return_connection();
}

при создании объекта указываешь разные параметры(название ДБ)!
$dbname1 = 'db1';//db1 - имя БД
$dbname2 = 'db2';
$db1 = new db($dbname1);
$db2 = new db($dbname2 );

где-то так

Спустя 2 дня, 21 час, 46 минут, 7 секунд (19.07.2010 - 11:52) ArtKuz написал(а):
Спасибо за ответы.
В итоге вот что я изменил и все заработало:

if($_POST['subject'] == 'cartridge')
$sql = "INSERT INTO issue (created, number, name, company, phone, status, comment) VALUES (now(), '$number', '$name', '$company', '$phone', 0, '$comment')";
if($_POST['subject'] == 'application')
$sql = "INSERT INTO application (created, name, performer, company, phone, status, term, comment, complet) VALUES (now(), '$name', ' ', '$company', '$phone', 0, '$term', '$comment', ' ')";
$db = new db();
$result = $db->q($sql);
echo $_POST['subject'];
echo $sql;

Спустя 5 минут, 26 секунд (19.07.2010 - 11:58) inpost написал(а):
О_о
Ты изменил названия таблицам в одной базе данных!!!
А вопрос стоял про несколько баз данных!!!

Спустя 54 минуты, 47 секунд (19.07.2010 - 12:52) ArtKuz написал(а):
Ну имелось ввиду одна база данных и несколько таблиц. Раньше я не так это все понимал.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.