PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (41): « 1 [2] 3 4 5 6 7 8 9 ... » В конец
Найдено сообщений: 609
-SCHATTEN-
Отправлено: 25 Апреля, 2008 - 11:26:21 • Тема: Класс для работы с БД • Форум: Пользовательские функции
Ответов: 20 Просмотров: 1172
Eihwaz пишет: Так что мечта о гарантированно валидных запросах таки останется мечтой
Не факт. В 5-й версии языка есть очень интересное свойство объектной модели. Оно позволяет работать с тем что возвращается методом. например :
PHP:
скопировать код в буфер обмена
<?
class database
{
private $select = NULL ;
private $where = NULL ;
public function __construct( ) {
//connecting to databse, selecting table
}
public function query( $sql ) {
//executing query
}
public function select( $feilds ) {
//operations
return $this ;
}
public function where( $where ) {
//operations
return $this ;
}
$sql = "SELECT " . $this -> select ;
$sql .= "WHERE " . $this -> where ;
}
}
}
?>
В итоге можно использовать вот так :
PHP:
скопировать код в буфер обмена
<?
$database = new database( ) ;
$database -> select ( params ) // тут возвращается обект базы данных
-> where ( params )
-> exec ( ) ; //выполняем запрос
?>
(Добавление)
Это я примерно написал как можно использовать классы в PHP 5. Так что ошибки искать нестоит, идею поймите ;)
(Добавление)
Точно так же можно делать с такими вещами как limit, join и т.д.
-SCHATTEN-
Отправлено: 16 Апреля, 2008 - 12:25:11 • Тема: Класс для работы с БД • Форум: Пользовательские функции
Ответов: 20 Просмотров: 1172
EuGen пишет: нужно сделать необязательным параметры where, order_by и limit; так как по синтаксису SELECT их указывать необязательно.
Согласен и код
Смысла неимеет, если не передать этот параметр функция напросто отвалится.
Так вроде ничего, тока сразу лучше юзать PHP docs и коменты вида :
PHP:
скопировать код в буфер обмена
<?
/****************************
* Удаляет данные из таблицы *
*****************************/
public function delete_from_table( $table , $where ) ?>
меняй на
PHP:
скопировать код в буфер обмена
<?
/**
* Удаляет данные из таблицы
*
* @param string $table имя таблицы в БД
* @param string $where условие WHERE для SQL запроса
* @return bool
*/
public function delete_from_table( $table , $where ) ...
?>
-SCHATTEN-
Отправлено: 14 Апреля, 2008 - 08:38:13 • Тема: Класс для работы с БД • Форум: Пользовательские функции
Ответов: 20 Просмотров: 1172
Да пожалста.
И мой тебе совет, если решил писать на классах, использую ООП . То не смотри на PHP 4 н для этого не преспособлен практически.
Но с другой стороны ещё очень много хостингов и платформ используют именно PHP 4
-SCHATTEN-
Отправлено: 12 Апреля, 2008 - 10:56:37 • Тема: Класс для работы с БД • Форум: Пользовательские функции
Ответов: 20 Просмотров: 1172
Подход оправдан, причем более чем. Такой подход гарантирует валидный SQL что избавит разработчика от необходимости искать ошибку в нем и даст шанст занятся PHP кодом.
Eihwaz пишет: Согласен, если имелось ввиду, что не имеет смысла ставить условие 'if', потому что функция query_execute либо вернет TRUE, либо сама выведет ошибку.
Да именно это я имел в виду.
Eihwaz пишет: Нет, в классе все запросы выполняются функцией query_execute, которая, в случае запроса, который привел к ошибке, пишет ошибку в браузер. Т.е., по-сути, тот же дебаггер. А если включен дебаг, то запрос не будет пытаться выполняться - просто выводится сообщение в браузер, вне зависимости от того, правильно он составлен или нет.
Я бы на твоем месте переделал этот метод чтобы метод query_execute возвращал BOOLEAN.
Если ты хочешь написать класс, то это должен быть один класс который можно использовать в разработке. В твоем случае у тебя подключается много сторонних вещей со своим дизайном и т.п. Этого недолжно быть. Хотя бы по 2-м причинам :
1) У разработчика должен быть набор мотодов которыми он пользуется и не задумывается о том что в случае ошибки всё пойдет нетак
2) В большинстве порталов есть свои обработчики ошибок и их вывод
(Добавление)
К вопросу о смысле использования такой модели :
Гораздо проще написать :
PHP:
скопировать код в буфер обмена
<?
$select = $db -> select ( )
-> from ( array ( 'p' => 'products' ) , -> join ( array ( 'l' => 'line_items' ) , 'p.product_id = l.product_id' ,
array ( 'line_items_per_product' => 'COUNT(*)' ) ) -> group ( 'p.product_id' )
-> having ( 'line_items_per_product > 10' ) ;
?>
чем
PHP:
скопировать код в буфер обмена
SELECT p
. "product_id" , COUNT ( * ) AS line_items_per_product
FROM
"products" AS p
JOIN "line_items" AS l
ON p. product_id = l. product_id
GROUP BY p. product_id
HAVING line_items_per_product > 10
-SCHATTEN-
Отправлено: 10 Апреля, 2008 - 14:28:29 • Тема: Класс для работы с БД • Форум: Пользовательские функции
Ответов: 20 Просмотров: 1172
Если запрос не выполнился, в браузер выводится сообщение с номером ошибки, текстом ошибки и текстом запроса, который вызвал ошибку.
Это если дебаг включен. А когда пишешь порталы часто возникает ситуация когда надо знать выполнился запрос или нет, и в зависимости от этого решать что делать дальше. А У тебя это проблемотично.
И я у тебя ненашел такой вещи как вернуть объект , у тебя тока массив можно получить
(Добавление)
Условие неимеет смысла. Потому что в $result вернется либо TRUE либо текст Ошибки.
(Добавление)
>Если последний параметр любой функции установить в false, то запрос будет выполняться.
Есть вероятность ошибки БД. поэтому и надо смотеть точно ли выполнился запрос или нет
-SCHATTEN-
Отправлено: 10 Апреля, 2008 - 11:55:30 • Тема: Класс для работы с БД • Форум: Пользовательские функции
Ответов: 20 Просмотров: 1172
Сильно не смотрел, так пробежался тока заметил подобные недочеты :
1) Когда код пишешь юзай рефакторинг, ато иногда в отступах путаешься.
2) При выполнении запросов данные нигде не проверяются, тоесть если при использовании не проверить то сайт можно сломать без проблем.
3) Как узнать выполнился ли запрос или нет ?
Потом покопаюсь мож ещё что найду
-SCHATTEN-
Отправлено: 09 Апреля, 2008 - 10:29:33 • Тема: Несколько классов может кому-нить помогут. • Форум: Пользовательские функции
Ответов: 0 Просмотров: 271
Начнем пожалуй с
PHP:
скопировать код в буфер обмена
<?PHP
class Encryption {
static $cypher = 'blowfish' ;
static $mode = 'cfb' ;
static $key = 'Тут пишем ключ для кодировки' ;
public static function encrypt( $plantext ) {
return $iv . $crypttext ;
}
public static function decrypt( $crypttext ) {
$iv = substr ( $crypttext , 0
, $ivsize ) ; $crypttext = substr ( $crypttext , $ivsize ) ; $plaintext = "" ;
if ( $iv ) {
}
return $plaintext ;
}
}
?>
(Добавление)
PHP:
скопировать код в буфер обмена
<?PHP
class CURL {
private $curl = NULL ;
private $url = NULL ;
function __construct( $url ) {
$this -> url = $url ;
}
function __destruct( ) {
}
/**
* This function use's for installing CURL
* parameters. If You need to use other
* params you can modify this function.
*
* All function You can see below.
*/
private function setOptions( ) {
$this -> setParams ( ) ;
$this -> showHeader ( ) ;
$this -> followLocation ( ) ;
$this -> setTimeOut ( 0) ;
}
public function setParams( ) {
}
public function showHeader( $show = false ) {
if ( $show ) {
} else {
}
}
public function followLocation( $follow = false ) {
if ( $follow ) {
} else {
}
}
public function setPost( $row ) {
$postdata = self :: parse ( $row ) ;
curl_setopt ( $this -> curl , CURLOPT_POSTFIELDS
, $postdata ) ; }
public function setTimeOut( $time ) {
}
public function getUrl( ) {
return $this -> url ;
}
public function getResource( ) {
return $this -> curl ;
}
public function send( ) {
return $html ;
}
private static function parse( $row ) {
$str = "" ;
foreach ( $row as $key => $value ) {
$str .= $key . "=" . $value . "&" ;
}
return $str ;
}
}
?>
(Добавление)
PHP:
скопировать код в буфер обмена
<?PHP
class Database {
public $_dbLocation = "localhost" ;
public $_dbUser = "user" ;
public $_dbPass = "pass" ;
public $_dbName = "dbname" ;
public $_dbr = null ;
public $_sql = "" ;
public $_sql_res = null ;
public $_resource = null ;
public $_error = null ;
public function __construct( $new = false ) {
if ( $this -> _resource
= @ mysql_connect ( $this -> _dbLocation
, $this -> _dbUser
, $this -> _dbPass
, $new ) ) { $this -> _error = " Could not connect to database !" ;
return NULL ;
}
}
$this -> _error = NULL ;
}
public function __destruct( )
{
}
public function haveError( ) {
if ( $this -> _error == NULL ) {
return FALSE ;
}
return TRUE ;
}
public function getLastId( )
{
$rows = null ;
return $rows ;
}
/**
* selecting database
*
* @param string $database
*/
public function selectDb ( $database ) {
}
private function escape( $var ) {
} else {
//$var = @mysql_real_escape_string($var);
}
return $var ;
}
/**
* Enter description here...
*
* @param SQL query $strQuery
* @param Database (optional) $database
* @return Error massage if exist
*/
public function query( $strQuery , $database = '' ) {
$strQuery = $this -> escape ( $strQuery ) ;
$this -> _sql_res = $strQuery ;
$sql = false ;
}
$this -> _error = null ;
return TRUE ;
} else {
$this -> _sql = null ;
return FALSE ;
}
}
public function gerErrorMsg( )
{
return $this -> _error;
}
/**
* Enter description here...
*
* @return Rows of query function ($this->query)
*/
public function fetchRow( ) {
if ( ! $this -> _sql || $this -> _sql == null ) {
return null ;
}
$rows = null ;
return $rows ;
}
/**
* Enter description here...
*
* @return List Array
*/
public function fetchArrayList( ) {
if ( ! $this -> _sql || $this -> _sql == null ) {
return null ;
}
$array [ ] = $row ;
}
return $array ;
}
/**
* Enter description here...
*
* @return Array of query function
*/
public function fetchArray( ) {
if ( ! $this -> _sql || $this -> _sql == null ) {
return null ;
}
return $row ;
}
/**
* Enter description here...
*
* @return One value of query function
*/
public function fetchOne( ) {
if ( ! $this -> _sql || $this -> _sql == null ) {
return null ;
}
$res = null ;
$res = $row [ 0] ;
}
return $res ;
}
/**
* Enter description here...
*
* @return Object array of query function
*/
public function fetchObjectList( ) {
if ( ! $this -> _sql || $this -> _sql == null ) {
return null ;
}
$array [ ] = $row ;
}
return $array ;
}
public function fetchObject( )
{
if ( ! $this -> _sql || $this -> _sql == null ) {
return null ;
}
return $row ;
}
/**
* Enter description here...
*
* @return String of query yau have set if query function
*/
public function returnSql( ) {
}
}
?>
(Добавление)
PHP:
скопировать код в буфер обмена
<?PHP
class Cookie {
private $created ;
private $userid ;
private $version ;
static $coockiename = 'USERAUTH' ;
static $myversion = '1' ;
static $expiration = '600' ;
static $resettime = '300' ;
static $warning = '300' ;
static $glue = '|' ;
function __construct( $userid = false ) {
if ( $userid ) {
$this -> userid = $userid ;
return ;
} else {
$buffer = $this -> _unpackage( $_COOKIE [ self :: $coockiename ] ) ;
} else {
throw new Exception( ) ;
}
}
}
public function set( ) {
$cookie = $this -> _package( ) ;
}
public function validate( ) {
if ( ! $this -> version || ! $this -> created || ! $this -> userid ) {
throw new Exception( "Неверный cookie фаил !" ) ;
}
if ( $this -> version != self :: $myversion ) {
throw new Exception( "Неверная версия cookie фаила !" ) ;
}
if ( time ( ) - $this -> created > self :: $expiration ) { throw new Exception( "Истекло время действия cookie фаила !" ) ;
} elseif ( time ( ) - $this -> created > self :: $resettime ) { $this -> set ( ) ;
}
}
private function _package( ) {
$parts = array ( self :: $myversion , time ( ) , $this -> userid ) ; $coockie = implode ( self :: $glue , $parts ) ; return Encryption:: encrypt ( $coockie ) ;
}
private function _unpackage( $cookie ) {
$buffer = Encryption:: decrypt ( $cookie ) ;
list ( $this -> version , $this -> created , $this -> userid ) = explode ( self :: $glue , $buffer ) ;
if ( $this -> version != self :: $myversion ||
! $this -> created ||
! $this -> userid ) {
throw new Exception( ) ;
}
}
private function _reissue( ) {
}
}
?>
(Добавление)
Сори, документация неочень написана, чуть позже примеры напишу как какой класс юзается
-SCHATTEN-
Отправлено: 06 Февраля, 2008 - 06:59:58 • Тема: Как сделать? • Форум: Корзина
Ответов: 4 Просмотров: 3399
grim
Это называется флеш, а как тока там заканчивается таймер, он вызывает скрипт который чистит базу.
-SCHATTEN-
Отправлено: 28 Января, 2008 - 08:21:55 • Тема: Вычислить и вывести какой пользователь (именно) • Форум: Программирование на PHP
Ответов: 2 Просмотров: 302
PHP:
скопировать код в буфер обмена
//Меняем $_SESSION на $_GET и выводим в зависимости от логина который был запрошен в адресе.
//Проверям задано ли имя пользователя, если нет то берем своё из сессии
if ( ! empty ( $_GET [ 'login' ] ) ) { $login = $_GET [ 'login' ] ;
} else {
$login = $_SESSION [ 'login' ] ;
}
// Получаем данные из БД о пользователе
$query = "SELECT * FROM `users` WHERE login='" . $login . "'" ;
//
echo '<div class="quote_conteiner">' ;
echo 'ID: ' . $user [ 'id' ] . '' ;
echo '<br/>' ;
echo 'Ник: ' . $user [ 'login' ] . '' ;
echo '<br/>' ;
echo 'Постов: ' . $user [ 'posts' ] . '' ;
echo '<br/>' ;
echo 'Имя: ' . $user [ 'name' ] . '' ;
echo '<br/>' ;
echo 'Пол: ' . $user [ 'sex' ] . '' ;
echo '<br/>' ;
echo 'Дата рождения: ' . $user [ 'bday' ] . '-' . $user [ 'bmonth' ] . '-' . $user [ 'byear' ] . 'г.' ;
echo '<br/>' ;
echo 'О себе: ' . $user [ 'osebe' ] . '' ;
echo '<br/>' ;
//echo 'Пароль: '.$user['pass'].'';
//echo '<br/>';
echo '</div>' ;
echo '<div class="quote_conteiner">' ;
echo '<a href="index.php">Главная</a><br/>' ;
echo '</div>' ;
соответственно страница с выводом топика будет выглядеть так :
PHP:
скопировать код в буфер обмена
$result = mysql_query ( "SELECT * FROM `mess` ORDER by `ltime` desc LIMIT 3" ) ; echo ( "Сообщений нет." ) ;
else
{
{
echo '---' ;
echo '<br/>' ;
echo 'Дата: ' . date ( "[d/m]-(H:i:s)" , $row [ 'ltime' ] ) ; echo '<br/>' ;
echo 'Имя: <a href="ank_r.php?login=' . $row [ 'login' ] . '"><b>' . $row [ 'login' ] . '</b></a>' ;
echo '<br/>' ;
echo 'Текст: <i>' . $row [ 'msg' ] . '</i>' ;
echo '<br/>' ;
} ;
}
-SCHATTEN-
Отправлено: 23 Января, 2008 - 08:37:23 • Тема: Как в PHP одновременно можно сделать запрос в БД MySQL? • Форум: SQL и Архитектура БД
Ответов: 1 Просмотров: 32
CODE (
text ):
скопировать код в буфер обмена
SELECT `DealerCode`, `DealerContractCode`, `DealerContractDate`, `LastName`, `FirstName`, `SecondName`, `SimBPlan`, `SimNumber`
FROM `customer_register`
where `cert`='".$_POST['cert_slc']."' AND `DealerContractDate` BETWEEN ".$date_a." AND ".$date_b." ORDER BY ".$orderby."
(Добавление)
Делайте код читабельным. и нормально вопрос ставьте, ато непонятно что нужно.
Страниц (41): « 1 [2] 3 4 5 6 7 8 9 ... » В конец
Powered by ExBB FM 1.0 RC1. InvisionExBB