Есть форма обратной связи, на ней есть возможность менять тему: "Тема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
это в классе db
при создании объекта указываешь разные параметры(название ДБ)!
где-то так
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 написал(а):
Ну имелось ввиду одна база данных и несколько таблиц. Раньше я не так это все понимал.