p006/api/php/sqlite.php

422 lines
16 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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("", "", "");#Меняем на полезное"&gt;", , "&lt;"
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
$this -> tmp = $text;
}
function clean ($text) { // ФУНКЦИЯ очистки кода для xml
$old1 = array('"', "'");#Ищем вредное ">",, "<"
$new1 = array('\"', "\'");#Меняем на полезное"&gt;", , "&lt;"
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
return $text;
}
function clear_json ($text) { // ФУНКЦИЯ очистки кода для xml
$old1 = array('\"');#Ищем вредное ">",, "<"
$new1 = array('"');#Меняем на полезное"&gt;", , "&lt;"
$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%" });
включить в настройках сайта рандомный фон по сезону
*/
}
}
?>