422 lines
16 KiB
PHP
422 lines
16 KiB
PHP
|
<?php
|
|||
|
class MySQL {
|
|||
|
var $debug; //дебажим?
|
|||
|
var $id; //возвращает или принимает id
|
|||
|
var $num; //возвращает колличество
|
|||
|
var $result; //возвращает результат
|
|||
|
var $or_by_desc;
|
|||
|
var $tmp;
|
|||
|
var $conn;
|
|||
|
var $db;
|
|||
|
|
|||
|
// Конструктор
|
|||
|
function __construct(){//тип базы, если SQLITE3 то остальные параметры не важны
|
|||
|
# code...
|
|||
|
if ( BD_TYPE=='SQLIET3' ){
|
|||
|
@mkdir( MYDIR . '/bd/', 0700 );
|
|||
|
//если бд есть то просто подключ. к ней
|
|||
|
// $this -> db = new SQLite3( MYDIR . '/bd/'. DB_NAME );
|
|||
|
$this -> conn = new PDO( 'sqlite:' . MYDIR . '/bd/'. BD_NAME );
|
|||
|
$sql = 'PRAGMA foreign_keys=on;';
|
|||
|
$this -> conn -> query ( $sql );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// работа с json
|
|||
|
function to_j($txt){
|
|||
|
return json_encode($txt, JSON_UNESCAPED_UNICODE);
|
|||
|
}
|
|||
|
|
|||
|
function from_j($txt){
|
|||
|
return json_decode($json, true);
|
|||
|
}
|
|||
|
|
|||
|
// Лог
|
|||
|
function to_log( $sql ){
|
|||
|
if ( $this -> debug == '1' ){
|
|||
|
require_once MYDIR . '/api/php/log.php';
|
|||
|
$log1 = new save_log;
|
|||
|
$log1 -> file_name = @MOD;
|
|||
|
$log1 -> print_log( $sql );
|
|||
|
}
|
|||
|
if ( $this -> debug == '2' ) echo $sql;
|
|||
|
}
|
|||
|
|
|||
|
function replacer_param_xml ($text) { // ФУНКЦИЯ очистки кода для xml
|
|||
|
$old1 = array("<", ">", "/");#Ищем вредное ">",, "<"
|
|||
|
$new1 = array("", "", "");#Меняем на полезное">", , "<"
|
|||
|
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
|
|||
|
$this -> tmp = $text;
|
|||
|
}
|
|||
|
|
|||
|
function clean ($text) { // ФУНКЦИЯ очистки кода для xml
|
|||
|
$old1 = array('"', "'");#Ищем вредное ">",, "<"
|
|||
|
$new1 = array('\"', "\'");#Меняем на полезное">", , "<"
|
|||
|
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
|
|||
|
return $text;
|
|||
|
}
|
|||
|
|
|||
|
function clear_json ($text) { // ФУНКЦИЯ очистки кода для xml
|
|||
|
$old1 = array('\"');#Ищем вредное ">",, "<"
|
|||
|
$new1 = array('"');#Меняем на полезное">", , "<"
|
|||
|
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
|
|||
|
return $text;
|
|||
|
}
|
|||
|
|
|||
|
/* коннект к бд */
|
|||
|
function connect($a, $b, $c, $baza_name) {
|
|||
|
@mkdir(MYDIR . '/bd/', 0700);
|
|||
|
//если бд есть то просто подключ. к ней
|
|||
|
$this->db=new SQLite3( MYDIR . '/bd/'. $baza_name );
|
|||
|
$sql="PRAGMA foreign_keys=on;";
|
|||
|
$this->db->query($sql);
|
|||
|
}
|
|||
|
|
|||
|
//Изменение базы
|
|||
|
function change_db( $baza_name ) {
|
|||
|
//echo $baza_name;
|
|||
|
$this -> connection = new PDO('mysql:host=localhost;dbname=' . $baza_name . ';charset=utf8', 'admin', '32143214');//исправить!
|
|||
|
$this->connection->exec("set names utf8");
|
|||
|
}
|
|||
|
|
|||
|
function get_massiv( $table, $where='', $order='', $limit='', $collums='*' ){
|
|||
|
$debug = $this -> debug;
|
|||
|
$or_by_desc = $this -> or_by_desc;
|
|||
|
/*where - массив колонок и желаемых значений*/
|
|||
|
$sql = 'SELECT ' . $collums . ' FROM `' . $table . '`';
|
|||
|
if ( $where ){
|
|||
|
$sql .= ' WHERE ';
|
|||
|
foreach ( $where as $key => $value ) @$str.=' `' . $key . '` = "' . $this->clean($value) . '" AND ';
|
|||
|
/* отрезаем лишнее */
|
|||
|
$len = strlen( $str )-4;
|
|||
|
$sql .= substr( $str, 0, $len );
|
|||
|
}
|
|||
|
/* выясняем сортировку */
|
|||
|
if ( $order ) $sql .= ' ORDER BY `' . $order . '` ';
|
|||
|
if ( $or_by_desc == 1 ) $sql .= ' DESC ';
|
|||
|
if ( $limit ) $sql .= ' LIMIT ' . $limit;
|
|||
|
/* если указан дебаг, пишем в лог */
|
|||
|
if ( $debug )$this -> to_log( $sql );
|
|||
|
$data = $this -> conn -> query( $sql ) -> fetchAll( PDO::FETCH_ASSOC );
|
|||
|
$this -> num = count( $data );
|
|||
|
$this -> result = $data;
|
|||
|
return $data;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* выборка по лайку */
|
|||
|
function get_massiv_like( $table, $where='', $order='', $limit='', $collums='*' ){
|
|||
|
$debug = $this -> debug;
|
|||
|
$or_by_decs = $this -> or_by_decs;
|
|||
|
/*where - массив колонок и желаемых значений*/
|
|||
|
$sql='SELECT ' . $collums . ' FROM `' . $table . '`';
|
|||
|
if ( $where ){
|
|||
|
$sql .= ' WHERE ';
|
|||
|
foreach ( $where as $key => $value ) @$str .= ' `' . $key . '` LIKE "%' . $value . '%" AND ';
|
|||
|
/* отрезаем лишнее */
|
|||
|
$len = strlen( $str )-4;
|
|||
|
$sql .= substr( $str, 0, $len );
|
|||
|
}
|
|||
|
/* выясняем сортировку */
|
|||
|
if ( $order ) $sql .= ' ORDER BY `' . $order . '` ';
|
|||
|
if ( $or_by_desc == 1 ) $sql .= ' DESC ';
|
|||
|
if ( $limit ) $sql .= ' LIMIT ' . $limit;
|
|||
|
/* если указан дебаг, пишем в лог */
|
|||
|
if ( $debug ) $this -> to_log( $sql );
|
|||
|
/* наконец то запрашиваем */
|
|||
|
$result = mysql_query( $sql );
|
|||
|
$this -> num = mysql_numrows( $result );
|
|||
|
while ( $postrow[] = mysql_fetch_array($result) );/*Кидаем в переменную*/
|
|||
|
$this -> result = $postrow;
|
|||
|
unset( $postrow );
|
|||
|
}
|
|||
|
|
|||
|
function free_sql( $sql ){
|
|||
|
if ( $this -> debug ) $this -> to_log( $sql );
|
|||
|
/* наконец то запрашиваем */
|
|||
|
$data = $this -> conn -> query( $sql ) -> fetchAll( PDO::FETCH_ASSOC );
|
|||
|
$this -> num = count( $data );
|
|||
|
$this -> result = $data;//когда нибудь убрать
|
|||
|
return $data;
|
|||
|
//$result = $this -> conn -> query( $sql );
|
|||
|
//if ( $result ) $res = $result -> fetchArray( SQLITE3_ASSOC );
|
|||
|
//return $res;
|
|||
|
}
|
|||
|
|
|||
|
function free_sql2($sql){
|
|||
|
if ($this -> debug)$this->to_log($sql);
|
|||
|
/* наконец то запрашиваем */
|
|||
|
$this->db->query($sql);
|
|||
|
//$this -> connection -> query($sql);
|
|||
|
}
|
|||
|
|
|||
|
/* простой запрос - одно значение, по одному запросу */
|
|||
|
function get_val( $table, $where, $collum ){
|
|||
|
$debug = $this -> debug;
|
|||
|
foreach ( $where as $key => $value ) @$str.=' `' . $key . '` = "' . $value . '" AND ';
|
|||
|
$len = strlen( $str )-4;
|
|||
|
$str2 = substr( $str, 0, $len );
|
|||
|
$sql = 'SELECT `' . $collum . '` FROM `' . $table . '` WHERE ' . $str2 . ' LIMIT 1';
|
|||
|
/* если указан дебаг, пишем в лог */
|
|||
|
if ( $debug ) $this -> to_log( $sql );
|
|||
|
$result = $this->db->query($sql);
|
|||
|
$res=$result->fetchArray(SQLITE3_ASSOC);
|
|||
|
return $res[$collum];
|
|||
|
}
|
|||
|
|
|||
|
/* Функция добавления контента */
|
|||
|
function add( $tab, $massiv ) {
|
|||
|
$debug = $this -> debug;
|
|||
|
foreach ( $massiv as $key => $value ) {
|
|||
|
if ( $key!='ok' ){
|
|||
|
$tabs .= '`' . $key . '`, ';
|
|||
|
$val .= "'" . $value . "', ";
|
|||
|
}
|
|||
|
}
|
|||
|
$tabs = substr( $tabs, 0, strlen( $tabs ) - 2 );
|
|||
|
$val = substr( $val, 0, strlen( $val ) - 2 );
|
|||
|
$sql = 'insert into `' . $tab . '` (' . $tabs . ') VALUES (' . $val . ')';
|
|||
|
if ( $debug ) $this -> to_log ( $sql );
|
|||
|
$this -> conn -> query( $sql );
|
|||
|
$this -> id = $this -> conn -> lastInsertId();//когда нибудь убрать
|
|||
|
return $this -> id;
|
|||
|
}
|
|||
|
|
|||
|
/* функция обновления таблиц по ИД */
|
|||
|
function update($tab, $id, $massiv) {
|
|||
|
$debug=$this->debug;
|
|||
|
foreach ($massiv as $key => $value) {
|
|||
|
if ($key!='ok') @$res.="`" . $key . "` = '" . $this->clean($value) . "', ";
|
|||
|
}
|
|||
|
$res=substr($res, 0, strlen($res)-2);
|
|||
|
$sql='UPDATE `' . $tab . '` SET ' . $res . ' WHERE `id` = "' . $id . '"';
|
|||
|
//mysql_query($sql);
|
|||
|
$this->db->query($sql);
|
|||
|
//$query = $this->connection->prepare($sql);
|
|||
|
//$query->execute();
|
|||
|
if ($debug)$this->to_log($sql);
|
|||
|
}
|
|||
|
|
|||
|
/* функция обновления таблиц по ИД в формате XML */
|
|||
|
function update_xml( $tab, $id, $massiv, $base64=0 ) {
|
|||
|
$debug = $this -> debug;
|
|||
|
if ( $base64 == 1 ){
|
|||
|
foreach ( $massiv as $key => $value ) {
|
|||
|
if ( $key!='ok' ) $res.='<' . $key . '>' . base64_encode( $value ) . '</' . $key . '>';
|
|||
|
}
|
|||
|
}else{
|
|||
|
foreach ( $massiv as $key => $value ) {
|
|||
|
if ( $key!='ok' ) $res.='<' . $key . '>' . $this -> clean( $value ) . '</' . $key . '>';
|
|||
|
}
|
|||
|
}
|
|||
|
$sql = 'UPDATE `' . $tab . '` SET `xml` = "' . $res . '" WHERE `id` = "' . $id . '"';
|
|||
|
$query = $this -> connection -> prepare( $sql );
|
|||
|
$query -> execute();
|
|||
|
if ( $debug ) $this -> to_log( $sql );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* Функция добавления контента */
|
|||
|
function add_xml($tab, $massiv, $base64) {
|
|||
|
$debug=$this->debug;
|
|||
|
if ($base64==1){
|
|||
|
foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . base64_encode($value) . '</' . $key . '>';}}
|
|||
|
else{
|
|||
|
foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . $value . '</' . $key . '>';}
|
|||
|
}
|
|||
|
$sql='insert into `' . $tab . '` (`xml`) VALUES ("' . $res . '")';
|
|||
|
//mysql_query($sql);
|
|||
|
if ($debug)$this->to_log($sql);
|
|||
|
//$this -> id = mysql_insert_id();
|
|||
|
|
|||
|
$query = $this->connection->prepare($sql);
|
|||
|
$query->execute();
|
|||
|
$this -> id = $db->lastInsertId();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* функция удаления по ИД */
|
|||
|
function del_id ( $tab, $id ) {
|
|||
|
$debug = $this -> debug;
|
|||
|
$sql='DELETE FROM `' . $tab . '` WHERE `id` = "' . $id . '"';
|
|||
|
//mysql_query( $sql );
|
|||
|
//$this -> connection -> query($sql);
|
|||
|
$this->db->query($sql);
|
|||
|
// $query = $this->connection->prepare($sql);
|
|||
|
// $query->execute();
|
|||
|
if ( $debug ) $this -> to_log ( $sql );
|
|||
|
}
|
|||
|
|
|||
|
/*счетчик записей*/
|
|||
|
function count_sql($tab, $where) {
|
|||
|
$debug=$this->debug;
|
|||
|
/*where - массив колонок и желаемых значений*/
|
|||
|
$sql='SELECT COUNT(*) FROM `' . $tab . '`';
|
|||
|
if ($where){
|
|||
|
$sql.=' WHERE ';
|
|||
|
foreach ($where as $key => $value) @$str.=' `' . $key . '` = "' . $value . '" AND ';
|
|||
|
/* отрезаем лишнее */
|
|||
|
$len = strlen( $str )-4;
|
|||
|
$sql .= substr( $str, 0, $len );
|
|||
|
}
|
|||
|
if ($debug)$this->to_log($sql);
|
|||
|
/* наконец то запрашиваем */
|
|||
|
$res=$this->db->query($sql);
|
|||
|
$row = $res->fetchArray();
|
|||
|
// print_r($row);
|
|||
|
$numRows = $row[0];
|
|||
|
return $row[0];
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* не в тему - но пусть письмо админу будет здесь*/
|
|||
|
function send_to_admin($tema, $txt, $email) {
|
|||
|
include_once MYDIR . '/api/php/sendmail.php';
|
|||
|
send_mime_mail( $_SERVER['SERVER_NAME'],
|
|||
|
'info@' . $_SERVER['SERVER_NAME'],
|
|||
|
'Вы',
|
|||
|
$email,
|
|||
|
'UTF-8', // кодировка, в которой находятся передаваемые строки
|
|||
|
'WINDOWS-1251', // кодировка, в которой будет отправлено письмо
|
|||
|
$tema,
|
|||
|
$txt);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* функция получения настроек модуля */
|
|||
|
function get_settings($mod){
|
|||
|
unset($a);
|
|||
|
$a['mod'] = $mod;
|
|||
|
$xml = $this -> get_val( 'settings', $a, 'xml' );
|
|||
|
require_once MYDIR . '/api/php/parsexml.php';
|
|||
|
$parce = new parsexml;
|
|||
|
$parce -> make_massiv ( $xml );
|
|||
|
$arr = $parce -> res;
|
|||
|
unset($tmp);
|
|||
|
foreach ( $arr as $key => $value ) $tmp[$key] = $value;
|
|||
|
return $tmp;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
Берем двухмерный массив данных
|
|||
|
$db = new MySQL;
|
|||
|
$db->connect('localhost','root','','b-install');
|
|||
|
$st['id']=1; - какие колонки с каким значением нужны
|
|||
|
$db -> debug = 2;// 1- пишет лог, 2 показывает на экране
|
|||
|
$db -> get_massiv ( 'pages', $st, $order, $limit ); //исполняем функцию с параметрами
|
|||
|
$massiv = $db->result; //получаем результат
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
/* Функция вынимает xml профиля юзера */
|
|||
|
function userxml($user_id){
|
|||
|
unset($a);
|
|||
|
$a['user_id']=$user_id;
|
|||
|
$this->get_val('users_profiles', $a, 'json');
|
|||
|
return $this->result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* Интернет-магазин */
|
|||
|
/* Берем нужные директории категорий */
|
|||
|
function get_cat_im($id){
|
|||
|
unset($tmp);
|
|||
|
$tmp['id']=$id;
|
|||
|
$tmp['public']=1;
|
|||
|
$tmp['show_mnu']=1;
|
|||
|
$this->get_massiv('m_groupe', $tmp, 'naim');
|
|||
|
return $this->result;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* Получаем итого заказа */
|
|||
|
|
|||
|
function zakaz_itog($zakaz_id){
|
|||
|
unset($tmp);
|
|||
|
$tmp['zakaz_id']=$zakaz_id;
|
|||
|
$tovar = $this -> get_massiv('cart', $tmp);
|
|||
|
$num = $this -> num;
|
|||
|
|
|||
|
for( $i = 0; $i < $num; $i++ ){
|
|||
|
unset($a);
|
|||
|
$a['id'] = $tovar[$i]['tovar_id'];
|
|||
|
$cena = $this -> get_val( 'm_tovar', $a, 'akccena' );
|
|||
|
if ( $cena < 1 ) $cena = $this -> get_val( 'm_tovar', $a, 'cena' );
|
|||
|
$pod_itog[$i] = $cena * $tovar[$i]['col'];
|
|||
|
unset($cena);
|
|||
|
}
|
|||
|
|
|||
|
return array_sum($pod_itog);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/* 06.05.2021 проверка прав доступа к нужной записи в нужной таблице */
|
|||
|
function check_access( $table, $id, $redirect=0 ){
|
|||
|
$dostup = 0; //Все нельзя
|
|||
|
//модератору и администратору все можно:
|
|||
|
if ( $_SESSION['dostup']=='a' || $_SESSION['dostup']=='m' ) $dostup = 1;
|
|||
|
if ( $dostup == 0 ){//Да, условие, чтобы при очевидном не делать лишнего обращения к БД
|
|||
|
//Берем ИД пользователя из БД и сравниваем с сессией
|
|||
|
$a['id'] = $id;
|
|||
|
$user_id = $this -> get_val( $table, $a, 'user_id' );
|
|||
|
if ( $user_id == $_SESSION['user_id'] ) $dostup = 1;
|
|||
|
}
|
|||
|
if ( $dostup == 0 && $redirect==1)
|
|||
|
header( 'Location: /403/' );
|
|||
|
else
|
|||
|
return $dostup;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* получаем сезон и выдергиваем картинку */
|
|||
|
function sezon_img(){
|
|||
|
if ( date("m")=='12' || date('m')=='01' || date('m')=='02' )$sezon='1';
|
|||
|
if ( date("m")=='03' || date('m')=='04' || date('m')=='05' )$sezon='2';
|
|||
|
if ( date("m")=='06' || date('m')=='07' || date('m')=='08' )$sezon='3';
|
|||
|
if ( date("m")=='09' || date('m')=='10' || date('m')=='11' )$sezon='4';
|
|||
|
|
|||
|
|
|||
|
@mkdir (MYDIR . '/files/template', 0700);
|
|||
|
@mkdir (MYDIR . '/files/template/sezon', 0700);
|
|||
|
@mkdir (MYDIR . '/files/template/sezon/1', 0700);
|
|||
|
@mkdir (MYDIR . '/files/template/sezon/2', 0700);
|
|||
|
@mkdir (MYDIR . '/files/template/sezon/3', 0700);
|
|||
|
@mkdir (MYDIR . '/files/template/sezon/4', 0700);
|
|||
|
|
|||
|
$src=MYDIR . '/files/template/sezon/' . $sezon;
|
|||
|
@include_once(MYDIR . '/api/php/list_file.php');
|
|||
|
$fl=list_file($src);
|
|||
|
//print_r($fl);
|
|||
|
@$count=count($fl);
|
|||
|
$rnd=rand(0, $count-1);
|
|||
|
define( 'SEZON_IMG', '/files/template/sezon/' . $sezon . '/' . $fl[$rnd] );
|
|||
|
|
|||
|
/*
|
|||
|
|
|||
|
в любое место шаблона поместить поле <input type="hidden" value="{$smarty.const.SEZON_IMG}" id="sezon_img">
|
|||
|
|
|||
|
в файл шаблона JS добавить строку
|
|||
|
// рандомный сезонный фон
|
|||
|
var sezon_img=$("#sezon_img").val();$("body").css({ "background-image": "url(" + sezon_img + ")", "background-attachment": "fixed", "background-size": "100%" });
|
|||
|
|
|||
|
|
|||
|
включить в настройках сайта рандомный фон по сезону
|
|||
|
*/
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
?>
|