영카트 다중DB 상품 등록시 질문 드립니다. 채택완료
안녕하세요. 제가 영카트로 A,B쇼핑몰 두개를 만들었는데요 A쇼핑몰을 메인으로 잡고 A에 상품을 등록하면 B에도 같이 등록이 되게 하고 있습니다. 현재는 상품을 등록하면 A,B동시에 등록은 되는 상태까진 작업이 되어있는데요 문제는 이미지가 등록이 되지 않고 있습니다. A쇼핑몰에는 이미지가 정상적으로 업로드가 되고 shop_order테이블에 파일명도 저장이 되어서 B쇼핑몰은 파일 업로드가 안되어 상품 이미지 경로를 A쇼핑몰의 url과 경로를 소스에 강제로 넣어서 A쇼핑몰의 이미지를 불러올 생각을 했습니다. 그런데 A쇼핑몰 shop_order테이블에는 파일명이 저장이 되는데 B쇼핑몰에는 파일명이 저장이 안되네요.....다른 정보는 다 이상없이 저장이 되는데 파일명만 저장이 안되고 있습니다.....ㅠㅠ
일단 제가 작업한 소스부터 보여드릴께요. 모두 A쇼핑몰에서 작업했습니다.
goods_form_update.php
global.lib.php
// DB 연결
function sql_connect($host, $user, $pass, $db=TB_MYSQL_DB)
{
if(function_exists('mysqli_connect') && TB_MYSQLI_USE) {
$link = mysqli_connect($host, $user, $pass, $db);
// 연결 오류 발생 시 스크립트 종료
if(mysqli_connect_errno()) {
die('Connect Error: '.mysqli_connect_error());
}
} else {
$link = mysql_connect($host, $user, $pass);
}
return $link;
}
function sql_connect2($host2, $user2, $pass2, $db2=TB_MYSQL_DB2)
{
if(function_exists('mysqli_connect') && TB_MYSQLI_USE) {
$link2 = mysqli_connect($host2, $user2, $pass2, $db2);
// 연결 오류 발생 시 스크립트 종료
if(mysqli_connect_errno()) {
die('Connect Error: '.mysqli_connect_error());
}
} else {
$link2 = mysql_connect($host2, $user2, $pass2);
}
return $link2;
}
// DB 선택
function sql_select_db($db, $connect)
{
if(function_exists('mysqli_select_db') && TB_MYSQLI_USE)
return @mysqli_select_db($connect, $db);
else
return @mysql_select_db($db, $connect);
}
// DB 선택
function sql_select_db2($db, $connect)
{
if(function_exists('mysqli_select_db') && TB_MYSQLI_USE)
return @mysqli_select_db($connect, $db);
else
return @mysql_select_db($db, $connect);
}
function sql_set_charset($charset, $link=null)
{
global $tb;
if(!$link)
$link = $tb['connect_db'];
if(function_exists('mysqli_set_charset') && TB_MYSQLI_USE)
mysqli_set_charset($link, $charset);
else
mysql_query(" set names {$charset} ", $link);
}
// mysqli_query 와 mysqli_error 를 한꺼번에 처리
// mysql connect resource 지정 - 명랑폐인님 제안
function sql_query($sql, $error=TB_DISPLAY_SQL_ERROR, $link=null)
{
global $tb;
if(!$link)
$link = $tb['connect_db'];
// Blind SQL Injection 취약점 해결
$sql = trim($sql);
// union의 사용을 허락하지 않습니다.
//$sql = preg_replace("#^select.*from.*union.*#i", "select 1", $sql);
$sql = preg_replace("#^select.*from.*[\s\(]+union[\s\)]+.*#i ", "select 1", $sql);
// `information_schema` DB로의 접근을 허락하지 않습니다.
$sql = preg_replace("#^select.*from.*where.*`?information_schema`?.*#i", "select 1", $sql);
if(function_exists('mysqli_query') && TB_MYSQLI_USE) {
if($error) {
$result = @mysqli_query($link, $sql) or die("$sql" . mysqli_errno($link) . " : " . mysqli_error($link) . "error file : {$_SERVER['SCRIPT_NAME']}");
} else {
$result = @mysqli_query($link, $sql);
}
} else {
if($error) {
$result = @mysql_query($sql, $link) or die("$sql" . mysql_errno() . " : " . mysql_error() . "error file : {$_SERVER['SCRIPT_NAME']}");
} else {
$result = @mysql_query($sql, $link);
}
}
return $result;
}
function sql_query2($sql, $error=TB_DISPLAY_SQL_ERROR, $link=null)
{
global $tb;
if(!$link)
$link = $tb['connect_db2'];
// Blind SQL Injection 취약점 해결
$sql = trim($sql);
// union의 사용을 허락하지 않습니다.
//$sql = preg_replace("#^select.*from.*union.*#i", "select 1", $sql);
$sql = preg_replace("#^select.*from.*[\s\(]+union[\s\)]+.*#i ", "select 1", $sql);
// `information_schema` DB로의 접근을 허락하지 않습니다.
$sql = preg_replace("#^select.*from.*where.*`?information_schema`?.*#i", "select 1", $sql);
if(function_exists('mysqli_query') && TB_MYSQLI_USE) {
if($error) {
$result = @mysqli_query($link, $sql) or die("$sql" . mysqli_errno($link) . " : " . mysqli_error($link) . "error file : {$_SERVER['SCRIPT_NAME']}");
} else {
$result = @mysqli_query($link, $sql);
}
} else {
if($error) {
$result = @mysql_query($sql, $link) or die("$sql" . mysql_errno() . " : " . mysql_error() . "error file : {$_SERVER['SCRIPT_NAME']}");
} else {
$result = @mysql_query($sql, $link);
}
}
return $result;
}
function insert($table,$values)
{
$count=count($values);
if(!$count) return false;
$i=1;
while(list($index,$key)=each($values)){
if($i==$count){
$field=$field.$index;
if($index=='passwd')
{ $value=$value."password('".trim($key)."')"; }
else
{ $value=$value."'".trim($key)."'"; }
}
else{
$field=$field.$index.",";
if($index=='passwd')
{ $value=$value."password('".trim($key)."'),"; }
else
{ $value=$value."'".trim($key)."',"; }
}
$i++;
}
$sql = "insert into $table ($field) VALUES ($value)"; // 실제 쿼리 생성
return sql_query($sql);
}
function insert2($table,$values)
{
$count=count($values);
if(!$count) return false;
$i=1;
while(list($index,$key)=each($values)){
if($i==$count){
$field=$field.$index;
if($index=='passwd')
{ $value=$value."password('".trim($key)."')"; }
else
{ $value=$value."'".trim($key)."'"; }
}
else{
$field=$field.$index.",";
if($index=='passwd')
{ $value=$value."password('".trim($key)."'),"; }
else
{ $value=$value."'".trim($key)."',"; }
}
$i++;
}
$sql = "insert into $table ($field) VALUES ($value)"; // 실제 쿼리 생성
return sql_query2($sql);
}
function update($table,$values,$where="")
{
$count=count($values);
if(!$count)return false;
$i=1;
while( list($index,$key)=each($values) ){
if($i==$count)
{
if($index=='passwd')
{ $value=$value.$index."=password('".trim($key)."') "; }
else
{ $value=$value.$index."='".trim($key)."' "; }
}
else
{
if($index=='passwd')
{ $value=$value.$index."=password('".trim($key)."'), "; }
else
{ $value=$value.$index."='".trim($key)."', "; }
}
$i++;
}
$sql = "update $table SET $value ".$where; // 실제 쿼리 생성
return sql_query($sql);
}
function update2($table,$values,$where="")
{
$count=count($values);
if(!$count)return false;
$i=1;
while( list($index,$key)=each($values) ){
if($i==$count)
{
if($index=='passwd')
{ $value=$value.$index."=password('".trim($key)."') "; }
else
{ $value=$value.$index."='".trim($key)."' "; }
}
else
{
if($index=='passwd')
{ $value=$value.$index."=password('".trim($key)."'), "; }
else
{ $value=$value.$index."='".trim($key)."', "; }
}
$i++;
}
$sql = "update $table SET $value ".$where; // 실제 쿼리 생성
return sql_query2($sql);
}
common.php
connect_db = sql_connect(TB_MYSQL_HOST, TB_MYSQL_USER, TB_MYSQL_PASSWORD) or die('MySQL Connect Error!!!');
$select_db = sql_select_db(TB_MYSQL_DB, $connect_db) or die('MySQL DB Error!!!');
$connect_db2 = sql_connect2(TB_MYSQL_HOST2, TB_MYSQL_USER2, TB_MYSQL_PASSWORD2) or die('MySQL Connect Error!!!');
$select_db2 = sql_select_db2(TB_MYSQL_DB2, $connect_db2) or die('MySQL DB Error!!!');
// mysql connect resource $tb 배열에 저장 - 명랑폐인님 제안
$tb['connect_db'] = $connect_db;
$tb['connect_db2'] = $connect_db2;
dbconfig.php
goods_form_update의
if($_POST['simg_type']) { // URL 입력
$value['simg1'] = $_POST['simg1'];
$value['simg2'] = $_POST['simg2'];
$value['simg3'] = $_POST['simg3'];
$value['simg4'] = $_POST['simg4'];
$value['simg5'] = $_POST['simg5'];
$value['simg6'] = $_POST['simg6'];
} else {
for($i=1; $idel($_POST['simg'.$i.'_del']);
$value['simg'.$i] = '';
}
if($_FILES['simg'.$i]['name']) {
//$value['simg'.$i] = $upl->upload($_FILES['simg'.$i]); B쇼핑몰은 이미지 업로드 안되도록 주석처리
}
}
}
이 부분이 문제 같은데 $_POST['simg1']을 찍어보면 아무것도 넘어오지 않습니다.
위의 A쇼핑몰 부분에서 찍어보면 파일명이 제대로 나오는데 말이죠;;;;
어디가 잘못되어서 A에는 파일명이 나오는데 B부분에서는 파일명이 안나오는걸까요;;;;
답변 1개
코드로 답을 드릴 내용은 아닌것같고
개념만 설명드리면
쇼핑몰A에 상품1을 등록하면
쇼핑몰B에 상품1을 복제등록(DB는 성공)
이미지 등록은 쇼핑몰A의 이미지를 읽어서
복제처리 ->등록기능과 유사
쇼핑몰B의 상품1에 해당되는 정보에
복제시 생성한 이름기록
완료입니다.
실제 이미지 등록시 실패가 많이 나타날수있으니
천천히 테스트를 하시면서 등록처리하셔야 합니다.
답변에 대한 댓글 3개
쇼핑몰 B의 1로 복제를 하는게 가장 좋은데
변경이 발생할경우 또 복제를 해야 하는상황이되구요
한 서버라면
data 영역의 item 영역을 쇼핑몰 B에서 쇼핑몰A의 data/item 을 심볼릭링크로 보는방법도있고
처리/해결하신 방법대로 A의를 바라보게 하는것도 방법입니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인