PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (13): [1] 2 3 4 5 6 7 8 9 ... » В конец
Найдено сообщений: 191
gheka
Отправлено: 27 Декабря, 2017 - 02:12:48 • Тема: Вывод названия во iframe fancybox • Форум: JavaScript & VBScript
Ответов: 0 Просмотров: 710
Здравствуйте, использую fancybox 3, но столкнулся с проблемой, не могу ни как понять как вывести название во открывшимся iframe. Нигде об этом информации не нашел.
Содержимое открывается, с этим проблем нет, но вот, что нужно в писать в параметры, что бы вывести TITLE никак не пойму.
В моём случае это title="name iframe"
Делаю так.
ссылка:
CODE (
javascript ):
скопировать код в буфер обмена
< a data- fancybox data- type = "iframe" title= "name iframe" data- src= "depositphotos_25226481-Video-audio-and-multimedia-buttons-set.jpg" href= "javascript:;" >
External page
</ a>
Параметры:
CODE (
javascript ):
скопировать код в буфер обмена
$( "[data-fancybox]" ) .fancybox ( {
toolbar : false ,
smallBtn : true ,
autoSize: true ,
helpers : {
title : {
show_title: true ,
type : 'inside'
} ,
buttons : { }
} ,
iframe : {
css : {
}
} ,
} ) ;
Подскажите пожалуйста, всё голову уже сломал.
gheka
Отправлено: 09 Декабря, 2016 - 21:51:41 • Тема: Составить запрос на выборку • Форум: Вопросы новичков
Ответов: 6 Просмотров: 235
Вообщем нашёл решение сам, выкладываю может кому пригодится.
Сразу скажу это не лучший вариант если выборка будет производиться с таблицей с большим количеством строк (записей)
В моём случае записей будет максимум 50-70 поэтому для меня это решение лучше чем создавать дополнительные 2 связующие таблицы.
gheka
Отправлено: 09 Декабря, 2016 - 18:03:22 • Тема: Составить запрос на выборку • Форум: Вопросы новичков
Ответов: 6 Просмотров: 235
Мелкий пишет: Нормальная форма - это такой термин в реляционных СУБД.
Попытка записать что-нибудь в одно поле через разделитель приносит только головную боль в дальнейшем.
Ну даже не знаю, никаких проблем у меня с эти раньше не возникало, делал элементарно.
Получал данные из поля таблицы пример поле USER_ID (6,8,9,5)
но тут такой вариант не совсем подходит
gheka
Отправлено: 09 Декабря, 2016 - 17:12:30 • Тема: Составить запрос на выборку • Форум: Вопросы новичков
Ответов: 6 Просмотров: 235
Здравствуйте.
Не знаю можно ли составить такой запрос или нет, надеюсь можно.
Есть таблица USER
с полями id, name и role
в поле ROLE записываются набор чисел через запятую (пример 2,5,33,66)
И суть такая нужно составить запрос что бы можно было вывести всех пользователей из таблицы USER где например ROLE не равняется 5
Этот запрос естественно не подходит
Подскажите можно ли составит такой запрос?
gheka
Отправлено: 19 Ноября, 2016 - 13:05:07 • Тема: Блокировка выполнения транзакции до её завершения • Форум: Вопросы новичков
Ответов: 6 Просмотров: 388
Мелкий пишет: gheka пишет: Как в этом случае?
Вы обязаны перенести запрос, на основании данных которого определяется дальнейшая логика в транзакцию и захватывать необходимые блокировки.
Т.е. этот пример идентичен предыдущему и безопасный для конкурентного доступа код будет идентичен.
К примеру есть страница такая.
В комментариях указаны этапы
PHP:
скопировать код в буфер обмена
// ------------ 1 ЭТАП ------------
// Проверяем есть ли открытые банки
$sql = "SELECT `id`,`sum` FROM `bank` WHERE `status`=? LIMIT 0,1" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 1
) ) ;
if ( $rows = $stmt -> fetch ( PDO:: FETCH_NUM ) ) {
// Если есть выводим кнопку ПОЛУЧИТЬ БАНК
$id = $rows [ 0] ; // К промеру ID 100
$sum = $rows [ 1] ; // К примеру сумма 500
// ВЫВОДИМ КНОПКУ
echo "<form action='' method='post'>
<input type='submit' name='receive_bonus' value='ПОЛУЧИТЬ БАНК'>
</form>" ;
// ------------ 2 ЭТАП ------------
// Проверим нажал ли пользователь кнопку
if ( $_POST [ 'receive_bonus' ] == TRUE ) {
try {
/* Начало транзакции, отключение автоматической фиксации */
$dbh -> beginTransaction ( ) ;
// ------------ 3 ЭТАП ------------
// Пополняем баланс пользователя который нажал кнопу
$sql = "UPDATE `user` SET `balanse`=balanse+? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( $sum , $id_user ) ) ;
// ------------ 4 ЭТАП ----------------------
// Обновляем статус на 0 (банк закрыт)
$sql = "UPDATE `bank` SET `status`=? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 0
, $id ) ) ;
/* Фиксация изменений */
$dbh -> commit ( ) ;
}
catch ( Exception $e ) {
$dbh -> rollBack ( ) ;
die ( "Ошибка : " . $e -> getMessage ( ) ) ; }
}
} else {
echo "НЕТ ОТКРЫТЫХ БАНКОВ" ;
}
И Если допустим 2 пользователя зашли на страницу получения банка
Тоесть выполнился 1 этап
Они одновременно нажали на кнопку ПОЛУЧИТЬ БАНК
SELTCT выполнился и пустил обоих на 2-3 этап (Так как банк ещё открыт)
то обоим пользователям зачислится на баланс 500 руб
И только после этого выполнится 4 этап обновится статус банка на 0 (закрыт)
gheka
Отправлено: 19 Ноября, 2016 - 08:40:08 • Тема: Блокировка выполнения транзакции до её завершения • Форум: Вопросы новичков
Ответов: 6 Просмотров: 388
Мелкий пишет: SELECT ... FOR UPDATE
Захватит эксклюзивную блокировку на строку, соответственно до завершения этой транзакции остальные update или select for update (а так же select for share) будут ждать завершения транзакции.
Ну в этом примере да. Но это просто тестовый пример. Может быть и другие варианты.
Вот пример где SELECT не задействован в транзакции
PHP:
скопировать код в буфер обмена
// Статус 1 (открыт)
$sql = "SELECT `id`,`sum` FROM `bank` WHERE `status`=? LIMIT 0,1" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 1
) ) ;
if ( $rows = $stmt -> fetch ( PDO:: FETCH_NUM ) ) {
$id_invoice = $rows [ 0] ;
$sum = $rows [ 1] ;
try {
/* Начало транзакции, отключение автоматической фиксации */
$dbh -> beginTransaction ( ) ;
$sql = "UPDATE `user` SET `balanse`=balanse+? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( $sum , $id_user ) ) ;
// ДРУГИЕ ДЕЙСТВИЕ
// Обновляем статус на 0 (закрыт)
$sql = "UPDATE `bank` SET `status`=? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 0
, $id_invoice ) ) ;
/* Фиксация изменений */
$dbh -> commit ( ) ;
}
catch ( Exception $e ) {
$dbh -> rollBack ( ) ;
die ( "Ошибка : " . $e -> getMessage ( ) ) ; }
}
Как в этом случае?
gheka
Отправлено: 18 Ноября, 2016 - 23:43:12 • Тема: Блокировка выполнения транзакции до её завершения • Форум: Вопросы новичков
Ответов: 6 Просмотров: 388
Здравствуйте
Есть транзакция с выполнением нескольких запросов подряд.
Суть примера такая.
Есть таблица bank с полями
id
sum Сумма банка
тип таблиц InnoDB
Любой авторизованный пользователь нажимает на кнопку ПОЛУЧИТЬ БАНК и выполняется скрипт ниже
ПРИМЕР
PHP:
скопировать код в буфер обмена
try {
/* Начало транзакции, отключение автоматической фиксации */
$dbh -> beginTransaction ( ) ;
// Статус 1 (открыт)
$sql = "SELECT `id`,`sum` FROM `bank` WHERE `status`=? LIMIT 0,1" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 1
) ) ;
if ( $data = $stmt -> fetchAll ( PDO:: FETCH_NUM ) ) {
$id_invoice = $rows [ 0] ;
$sum = $rows [ 1] ;
$sql = "UPDATE `user` SET `balanse`=balanse+? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( $sum , $id_user ) ) ;
// ДРУГИЕ ДЕЙСТВИЕ
// Обновляем статус на 0 (закрыт)
$sql = "UPDATE `bank` SET `status`=? WHERE `id`=?" ;
$stmt = $dbh -> prepare ( $sql ) ;
$stmt -> execute ( array ( 0
, $id_invoice ) ) ; }
/* Фиксация изменений */
$dbh -> commit ( ) ;
}
catch ( Exception $e ) {
$dbh -> rollBack ( ) ;
die ( "Ошибка : " . $e -> getMessage ( ) ) ; }
Тоесть выполняется запрос в базу bank и вытаскивается первая попавшееся запись со СТАТУСОМ 1 (статус 1 - банк открыт, статус 0 - банк закрыт)
Сумма из этого банка зачисляется на счёт этого пользователя.
После чего банк закрывается Статус банка с определённый id обновляется на 0
ВОПРОС
Мне нужно защитить данную транзакцию от двойной записи.
тоесть если 2 пользователя одновременно нажмут на кнопку ПОЛУЧИТЬ БАНК то один и тот же банк может зачислится обоим пользователям.
В том случае если транзакция не успеет завершится и статус таблицы bank ещё не изменится на 0
Надеюсь я понятно объяснил что я хочу.
Подскажите каким образом мне это сделать?
Читал про уровни изоляции
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
но как их применить так и не понял.
gheka
Отправлено: 23 Апреля, 2016 - 23:53:07 • Тема: Формирование подписи INTERKASSA • Форум: Вопросы новичков
Ответов: 5 Просмотров: 907
shevket пишет: gheka пишет: Проблема решена тему можно закрыть
ТОЧНО такая же проблема. Пожалуйста, подскажите в чём ошибку допускаем?
видимо не правильно всё таки формовал подпись в файле RESULT
Сделал так.
PHP:
скопировать код в буфер обмена
$LMI_HASH = isset ( $_POST [ 'ik_sign' ] ) ?
strval ( $_POST [ 'ik_sign' ] ) : '' ; $dataSet = $_POST ; // Записываем в переменную $dataSet полученный массив от interkassa
unset ( $dataSet [ 'ik_sign' ] ) ; // Удаляем из массива строку ik_sign ksort ( $dataSet , SORT_STRING
) ; // Сортирует массив по ключам array_push ( $dataSet , $SecretKeyInterkassa ) ; // Добавляет СЕКРЕТНЫЙ КЛЮЧ INTERKASSA в конец массива $signString = implode ( ':' , $dataSet ) ; // Объединяет элементы массива в строку через : (двоеточие) $code = base64_encode ( hash ( 'sha256' , $signString , true ) ) ; // кодирует данные способом MIME base64. Алгоритм формирования подписи sha256
// Сверяем подписи
// Верная подпись продолжаем выполнение скрипта
} else {
// Не верная подпись, останавливаем работу скрипта
}
И ВСЁ ЗАРАБОТАЛО.
gheka
Отправлено: 22 Февраля, 2016 - 04:01:42 • Тема: Вопрос по защите от sql инекции • Форум: Работа с СУБД
Ответов: 1 Просмотров: 581
Здравствуйте
Вопрос такой.
Какой запрос безопаснее 1 или 2 или разници нет?
1 запрос
CODE (
SQL ):
скопировать код в буфер обмена
$name = 'Миша'
$city = 'Москва' ;
$STH = $DBH-> ( "INSERT INTO folks (name, city) value (:name, :city)" ) ;
$data = array( 'name' => $name, 'city' => $city ) ;
$STH-> execute( $data) ;
2 запрос
CODE (
SQL ):
скопировать код в буфер обмена
$name = 'Миша'
$city = 'Москва' ;
$STH = $DBH-> ( "INSERT INTO folks (name, city) value (?, ?)" ) ;
$data = array( $name, $city ) ;
$STH-> execute( $data) ;
gheka
Отправлено: 05 Февраля, 2016 - 23:09:36 • Тема: Проверка существования таблицы в базе данных. PDO • Форум: Вопросы новичков
Ответов: 5 Просмотров: 1813
Здравствуйте.
Подскажите пожалуйста как проверить наличие таблицы в базе данных средствами PDO?
Раньше работал с просто mysqli и проверял так
CODE (
SQL ):
скопировать код в буфер обмена
$table = 'user' ;
$res = mysqli_query ( $LinkToBD, "SELECT * FROM `" . $table . "` LIMIT 1" ) ;
$error = mysqli_errno( $LinkToBD ) ;
RETURN ( $error != '1146' && $res = true) ;
А теперь перехожу на PDO
и не как не могу понять как реализовать подобное в PDO
что бы при наличии такой таблицы возвращало например TRUE а при отсутствии FALSE
Делаю так:
CODE (
SQL ):
скопировать код в буфер обмена
$table = 'user' ;
$sql = "SELECT * FROM `" . $table . "` LIMIT 1" ;
$stmt = $dbh-> query( $sql ) ;
$stmt-> errorCode( ) ;
Но так получается если такая таблица есть то выводит 00000 а если нет то фатальную ошибку.
(Добавление)
Нашёл некоторое решения.
Может кому пригодится.
CODE (
SQL ):
скопировать код в буфер обмена
$table = 'user' ;
$sql = "SELECT 1 FROM `" . $table . "` LIMIT 1" ;
$stmt = $dbh-> query( $sql ) ;
IF ( $stmt ) {
RETURN TRUE; // Если есть таблица
} else {
RETURN FALSE; // Если нет таблицы
}
Если есть более правильный вариант напишите.
gheka
Отправлено: 26 Ноября, 2015 - 01:08:41 • Тема: защита от sql инъекции • Форум: Вопросы новичков
Ответов: 3 Просмотров: 164
DeepVarvar пишет: PDO + prepared statement
(Добавление)
В майскули препаред тоже есть.
Но это решение для запроса написанного другим способом.
У меня процедурный стиль и в этом случае подготовку запроса не выполнить. Или я не прав?
Подскажите пожалуйста.
Страниц (13): [1] 2 3 4 5 6 7 8 9 ... » В конец
Powered by ExBB FM 1.0 RC1. InvisionExBB