PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (3): [1] 2 3 »
Найдено сообщений: 44
No0k
Отправлено: 14 Октября, 2016 - 19:51:33 • Тема: MVC и запрос к базе через модель • Форум: Объектно-ориентированное программирование
Ответов: 2 Просмотров: 1234
Начал изучать ОПП и попал в проблему. Я из класса Module пытаюсь сделать запрос в класс MySQL который инициализировал в классе Model. При запросе, я получаю не MySQL строки, а просто экземпляр класса. Вот код:
PHP:
скопировать код в буфер обмена
<?PHP
class Model
{
protected $config = array ( ) ; protected $db ;
public function __construct( $set )
{
$this -> config = $set ;
$this -> databaseConnect ( ) ;
}
protected function databaseConnect( )
{
$this -> db = new MySQL ( $this -> config ) ; }
}
class Module extends Model
{
/*
* Получаем модули
*/
public function get( )
{
$a = $this -> db -> query ( "SELECT COUNT(*) FROM `modules`" ) ;
return $a ;
}
}
$q = new Module( Vars:: get ( 'settings' ) ) ;
$q -> get ( ) ;
Когда я в классе Module вызываю $a = $this->db->query("SELECT COUNT(*) FROM `modules`"); моя IDE подсказывает "Метод query не найден"
Подскажите в чем проблема и как можно оптимизировать запросы?
No0k
Отправлено: 11 Марта, 2015 - 15:04:16 • Тема: Kohana - регистрация • Форум: CMS и фреймворки
Ответов: 4 Просмотров: 1460
Суть: когда ввожу ник такой как есть в базе или мыло, то должны выводится ошибки, а они не выводятся. PHP:
скопировать код в буфер обмена
public function action_registration( )
{
{
try {
// производим проверку всех полей
$object = Validation:: factory ( $this -> request -> post ( ) ) ;
$object
-> rule ( 'username' , 'not_empty' )
-> rule ( 'username' , 'min_length' , array ( ':value' , '4' ) ) -> rule ( 'password' , 'not_empty' )
-> rule ( 'password' , 'min_length' , array ( ':value' , '5' ) ) -> rule ( 'email' , 'email' ) ;
$user = ORM:: factory ( 'User' ) // если проверка пройдена - регистрируем
-> set ( 'email' , $this -> request -> post ( 'email' ) )
-> set ( 'username' , $this -> request -> post ( 'username' ) )
-> set ( 'password' , $this -> request -> post ( 'password' ) )
-> save ( ) ;
// даем новому пользователю роль для логина
$user -> add ( 'roles' , ORM
:: factory ( 'Role' , array ( 'name' => 'login' ) ) ) ;
// очищаем массив с POST
$to = $this -> request -> post ( 'email' ) ;
$subject = Kohana:: message ( 'account' , 'email.themes.registration' ) ;
$from = Kohana:: message ( 'account' , 'email.from' ) ;
$message = 'Вы успешно зарегистрировались с паролем - ' . $this -> request -> post ( 'password' ) ;
Email:: send ( $to , $from , $subject , $message , $html = false ) ; // отправляем пользователю сообщение с его паролем
Auth:: instance ( ) -> force_login ( $user ) ; // сразу же авторизуем его, без ввода логина и пароля
HTTP:: redirect ( '/user' ) ;
} catch ( ORM_Validation_Exception $e ) {
// если во время валидации возникли ошибки
$data [ 'messageReg' ] = Kohana:: message ( 'account' , 'errorReg' ) ;
$data [ 'errors' ] = $e -> errors ( 'models' ) ;
// берем значения ошибок из файла /application/messages/model/user.php
}
}
$data [ 'username' ] = array_key_exists ( 'username' , $this -> request -> post ( ) ) ?
htmlspecialchars ( $this -> request -> post ( 'username' ) ) : '' ; // вставляем данные в формы, если они были введены $this -> template -> content = View:: factory ( '/auth/registration_form' , $data ) ;
}
No0k
Отправлено: 18 Февраля, 2015 - 12:09:48 • Тема: Проверка наличия поля и авторизация • Форум: Вопросы новичков
Ответов: 0 Просмотров: 172
Добрый день. Делаю авторизацию через Steam.
Цитата: Логика:
Пользователь входит через steam, я получаю его steam_id, мне надо найти этот steam_id в уже зарегистрированных пользователях и есть есть, то авторизировать, если нет, то создать пользователя.
PHP:
скопировать код в буфер обмена
public function SteamAuth( ) {
try {
require ( 'openid.php' ) ;
$openid = new LightOpenID( 'shop' ) ;
if ( ! $user_id ) {
if ( ! $openid -> mode ) {
if ( isset ( $_GET [ 'login' ] ) ) { $openid -> identity = 'http://steamcommunity.com/openid' ;
header ( 'Location: ' . $openid -> authUrl ( ) ) ; }
echo "<form action=\" ?login\" method=\" post\" > <input type=\" image\" src=\" http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_small.png\" ></form>" ;
}
elseif ( $openid -> mode == 'cancel' ) {
echo Core:: msg_show ( __( 'SteamСanceledAuthentication' ) ) ;
}
else {
if ( $openid -> validate ( ) ) {
$id = $openid -> identity ;
$ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/" ;
$_SESSION [ 'steamid' ] = $matches [ 1] ;
$valid = new Validator
( $_SESSION [ 'steamid' ] , array ( 'steamid' => 'Индетификатор' ) ) ; $rules = array ( $_SESSION [ 'steamid' ] , 'in_list' , array ( 'table' => 'user' , 'row' => 'steamid' ) ) ; if ( $valid -> check ( $rules ) == TRUE ) {
//тут пользователь есть, надо найти его id и авторизировать
}
else {
}
}
else {
echo Core:: msg_show ( __( 'SteamBadCheck' ) ) ;
}
}
}
} catch ( ErrorException $e ) {
echo $e -> getMessage ( ) ;
}
}
Я вот нашел его steam_id и хочу авторизировать через его id, но как взять id не знаю. Подскажите пожалуйста. Или же другую логику, если есть лучше.
No0k
Отправлено: 13 Ноября, 2014 - 16:44:45 • Тема: Неизвестная переменная из класса. • Форум: Вопросы новичков
Ответов: 3 Просмотров: 248
esterio пишет: может $user_id нужно передать в characters .
Вы чуть не поняли, у меня в characters берется глобальная переменная $user и с нее я беру id.
Суть в том что если работать так:
PHP:
скопировать код в буфер обмена
<?PHP
//$headmod = 'okrestnosti';//фикс. места
include '../engine/includes/start.php' ;
include incDir. 'head.php' ;
Game:: start ( $user_id ) ;
Game:: going ( ) ;
$userPlace = $sql -> query ( "SELECT * FROM `place` WHERE `nick` = '" . $user [ 'nick' ] . "' LIMIT 1" ) -> fetch ( ) ;
$world = $sql -> query ( "SELECT * FROM `world` WHERE `city` = '$characters[city] ' and `x`='$userPlace[x] ' and `y`='$userPlace[y] '" ) -> fetch ( ) ;
?>
Выдает: Undefined variable: characters | Файл X:\home\dayz\www\pages\world.php | Линия - 10
No0k
Отправлено: 13 Ноября, 2014 - 16:17:31 • Тема: Неизвестная переменная из класса. • Форум: Вопросы новичков
Ответов: 3 Просмотров: 248
Можешь подсказать почему когда вывожу:
Game::start($user_id); потом делаю запрос к $characters - он выдает $characters неизвестной переменной
Class:
PHP:
скопировать код в буфер обмена
class Game {
static function start( $user_id ) {
if ( $user_id ) {
//return self::buff();
return self :: characters ( ) ;
}
else {
return __( 'Что бы играть нужно авторизоватся.' ) ;
}
}
static function characters( ) {
global $sql , $user ;
$characters = $sql -> query ( "SELECT * FROM `characters` WHERE `id` = '" . $user [ 'id' ] . "' LIMIT 1" ) -> fetch ( ) ;
return $characters ;
}
}
No0k
Отправлено: 13 Октября, 2014 - 10:10:56 • Тема: Как вытянуть имя в переменную из регулярки • Форум: Вопросы новичков
Ответов: 1 Просмотров: 116
Имею регулярное выражение:
$str = "у @example сегодня день рождения.";
$str = preg_replace("/@([\S]+)/", "<a href='/id".$id."'>@$1</a>", $str);
Ну вот, мне надо сделать так что бы когда кто-то вводит @%nick_user%, то мы ищем его ник в базе и присвиваем ссылку на id.
Как осуществить?
No0k
Отправлено: 28 Сентября, 2014 - 19:40:04 • Тема: Как узнать откуда юзер пришел • Форум: Вопросы новичков
Ответов: 4 Просмотров: 348
Мне надо узнать откуда юзер перешел по моей ссылке. Т.е. перешел с example.com на helpme.com и мне надо узнать что юзер пришел с example.com.
Как осуществить?
Пробовал: $_SERVER["HTTP_REFERER"] но выдает: Undefined index: HTTP_REFERER
No0k
Отправлено: 18 Сентября, 2014 - 22:25:04 • Тема: Проблемма с moriss.js • Форум: JavaScript & VBScript
Ответов: 0 Просмотров: 550
Сделал вот такой график:
CODE (
html ):
скопировать код в буфер обмена
<link rel = "stylesheet" href = "http://cdn.oesmith.co.uk/morris-0.5.1.css" >
<script src = "//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js" ></ script >
<script src = "../template/js/plugins/morris/morris.min.js" type = "text/javascript" ></ script >
<script type = "text/javascript" >
$(function() {
"use strict";
// AREA CHART
var area = new Morris.Area({
element: 'lol',
resize: true,
data: [{"hour":"22:00-23:00","host":1,"hits":3},{"hour":"23:00-24:00","host":0,"hits":20}],
xkey: 'hour',
ykeys: ['host', 'hits'],
labels: ['Поситетели', 'Переходи'],
lineColors: ['#a0d0e0', '#3c8dbc'],
hideHover: 'auto'
});
});
</ script >
<div class = "chart" style = "height:300px;" id = "lol" ></ div >
Получается вот что: Спойлер (Отобразить ) [img]https://pp.vk.me/c625817/v625817916/1e26/mC2yJgGfICY.jpg[/img]
Хотя я хочу что бы вместо: 0
1923-01
1922-12
1922-11
1922-10
1922-09
1922-08
1922-07
1922-06
1922-05
1922-04
1922-03
Были значения: hour из data. А что это за символы вобще хз, подскажите как правильно сделать?
No0k
Отправлено: 18 Сентября, 2014 - 21:15:56 • Тема: Как после каждого элемента ставить запятая, а перед последним нет • Форум: Вопросы новичков
Ответов: 2 Просмотров: 191
Мелкий пишет: No0k пишет: <script type="text/javascript">
Сформируйте массив и скормите json_encode. Получите строку, которую можно передать в data:без каких-либо изменений.
И довольно уже извращений с mktime, используйте штатный datetime.
И делать select * только ради num_rows - отвратительная идея. Сделайте select count(*) и fetchColumn и получите искомое число без сношения базы.
Ну и запрос в цикле здесь не нужен. select hour(`datetime`), count(0) from `tablename` where /*сегодня, весь день*/ group by 1
Я думал над json_encode, но моих знаний мало длят того что бы сделать массив с именами:
т.е. как сделать: {y: '2012 Q1', item1: 6810, item2: 1914}?
Над остальным сейчас буду работать, спасибо большое
No0k
Отправлено: 18 Сентября, 2014 - 20:57:20 • Тема: Как после каждого элемента ставить запятая, а перед последним нет • Форум: Вопросы новичков
Ответов: 2 Просмотров: 191
У меня есть вот гкод:
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
static function donut($div_name, $user_id) {
global $sql;
$site = $sql->query("SELECT `id` FROM `static_site` WHERE `id_user` = ".$user_id)-> fetch();
?>
<link rel="stylesheet" href="http://cdn.oesmith.co.uk/morris-0.5.1.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="../template/js/plugins/morris/morris.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
"use strict";
// AREA CHART
var area = new Morris.Area({
element: '<?= $div_name ; ?> ',
resize: true,
data: [
<?
for ( $hour = 0 ; $hour < 24 ; $hour ++ ) {
$hosts = $sql -> query ( "SELECT * FROM `stats_hosts` WHERE `time` BETWEEN '" . $start_time . "' AND '" . $finish_time . "' AND `id_site` = '" . $site [ 'id' ] . "'" ) -> num_rows ( ) ;
$hits = $sql -> query ( "SELECT * FROM `stats_hits` WHERE `time` BETWEEN '" . $start_time . "' AND '" . $finish_time . "' AND `id_site` = '" . $site [ 'id' ] . "'" ) -> num_rows ( ) ;
$hour = '0' . $hour ;
}
$f = '0' . ( $hour + 1) ;
}
else {
$f = $f + 1 ;
}
if ( $hosts > 0 || $hits > 0 ) { ?>
{y: 'Посещение с <?PHP echo $hour . ':00 по ' . ( $f ) . ':00' ; ?> ', item1: <?PHP echo $hosts ; ?> , item2: <?PHP echo $hits ; ?> }
<?
}
}
?>
],
xkey: 'y',
ykeys: ['item1', 'item2'],
labels: ['Поситетели', 'Переходи'],
lineColors: ['#a0d0e0', '#3c8dbc'],
hideHover: 'auto'
});
});
</script>
<?
return '<div class="chart" style="height:300px;" id="' . $div_name . '"></div>' ;
}
Как сделать что бы если в data больше 1 елемента ставилась запятая и на последнем не ставилась?
PHP:
скопировать код в буфер обмена
if($hosts > 0 || $hits > 0) {?>
{y: 'Посещение с <?PHP echo $hour . ':00 по ' . ( $f ) . ':00' ; ?> ', item1: <?PHP echo $hosts ; ?> , item2: <?PHP echo $hits ; ?> }
И да, можете подсказать как сделать этот код лучше
(Добавление)
Как после каждого элемента ставить запятая, а после последнего - нет*
Страниц (3): [1] 2 3 »
Powered by ExBB FM 1.0 RC1. InvisionExBB