PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (13): « 1 2 3 [4] 5 6 7 8 9 ... » В конец
Найдено сообщений: 195
nepster
Отправлено: 02 Августа, 2013 - 03:18:50 • Тема: Несколько вопросов для повышения квалификации • Форум: Вопросы новичков
Ответов: 4 Просмотров: 186
Все примет, вот хотелось бы узнать пару нюансов по работе с веб приложениями. Хотелось бы подискутировать и увидеть мнения/советы/решения коллег.
За ранее большое спасибо за ответы!
1) AJAX Запрос? Оптимизация!
Собственно работаю с ajax. Есть форма нужно защититься от "дрожащих рук клиента". Тоесть пока выполняется запрос заблокировать все остальные кнопки, чтобы не могли зажать ентер к примеру и "задедосить" сервер (пусть даже случайно).
Пример в приложенном файле
Кнопку заблокировать легко, а как заблокировать ссылку на момент загрузки ?
Или как кто решает проблему, затягивает экран прозрачной темной пленкой на момент загрузки ?
2) hidden поля
Кто в каких целях использует inpute type="hidden", приведите пожалуйста примеры ?
3) как правильно обрабатывать данные php
к примеру есть форма, которая посылает данные на сервер.
Кто как делает валидацию данных ?
4) Как лучше хранить денежное значение в базе и работать на сервере ?
5) Собственно вопрос про 0 и false
Ситуация когда нужно проверить есть ли значение в переменно и оно равно 0
Мой вариант решения:
А как Вы решаете данную задачу?
6) достаточно ли принудительно указать тип данных для предотвращения sql инъекции
И достаточно ли для строки:
nepster
Отправлено: 15 Июля, 2013 - 03:02:20 • Тема: Выборка за день SQL • Форум: Работа с СУБД
Ответов: 2 Просмотров: 976
Подскажите пожалуйста как сделать выборку данных за день именно c 00:00 по 00:00
(а не за 24 часа)
nepster
Отправлено: 10 Июля, 2013 - 10:32:43 • Тема: Переворот картинок • Форум: Вопросы новичков
Ответов: 3 Просмотров: 170
нет, если просмотреть прямой адрес
site.ru/1.jpg изображение перевернуто
если смотреть на изображение из папки на сервере www к примеру, то все нормально.
Никаких css стилей не применялось
nepster
Отправлено: 10 Июля, 2013 - 00:15:36 • Тема: Переворот картинок • Форум: Вопросы новичков
Ответов: 3 Просмотров: 170
собственно столкнулся с такой проблемой, гружу на сервер файл (картинку).
Грузится все хорошо и при этом по какой-то причине вертикальные картинки переворачиваются горизонтально.
Тоесть через <img> тек вертикальная картинка отображается горизонтально
При открытии прямого адреса тоже самое.
Проверяю картинку на сервере, с ней все в порядке. Подскажите в чем может быть проблема ?
nepster
Отправлено: 24 Июня, 2013 - 05:18:56 • Тема: Поиск в многомерном массиве • Форум: Вопросы новичков
Ответов: 1 Просмотров: 123
Подскажите пожалуйста есть ли безвелосипедный способ решения подобной задачи:
есть многомерный массив
нужно узнать, есть ли в нем значение к примеру "red"
тоесть функции достаточно вернуть true, если такое значение есть и false, если такого значения во всем массиве нет
nepster
Отправлено: 08 Июня, 2013 - 14:15:56 • Тема: Отправка данных и обработка AJAX формы (jQUERY+Form Plugin) • Форум: JavaScript & VBScript
Ответов: 0 Просмотров: 1619
Собственно представляю свою реализацию:
собственно сама форма:
CODE (
html ):
скопировать код в буфер обмена
<!doctype html>
<html >
<head >
<meta charset = "utf-8" / >
<title > HTML 5</ title >
<script type = "text/javascript" src = "jquery.js" ></ script >
<script type = "text/javascript" src = "js.js" ></ script >
<script src = "http://malsup.github.com/jquery.form.js" ></ script >
<style type = "text/css" >
input[type=text],input[type=email],input[type=password], select
{
width:300px;
padding:5px;
border: solid 1px silver;
}
textarea
{
width:400px;
min-height:100px;
padding:5px;
border: solid 1px silver;
}
input[type=radio], input[type=checkbox]
{
padding:5px;
}
/* подсвечиваем поле с ошибкой */
input.error-field, select.error-field, textarea.error-field
{
border: solid 1px red;
}
/* Класс для обработки ошибок */
.error
{
padding:0px;
margin-top: 2px;
margin-bottom: 10px;
color:red;
}
/* Класс для загруки */
.loader
{
display: none;
}
</ style >
</ head >
<body >
<div style = "border: solid 2px black; width:500px; float:left;" >
<form action = "js.php" method = "post" id = "reg-form" name = "reg-form" enctype = "multipart/form-data" >
<input type = "hidden" name = "token" value = "123456" / >
<input type = "hidden" name = "obj_id" value = "123" / >
<div class = "form_item" >
<input type = "text" name = "login" / >
<label > - Логин</ label >
<div class = "error" ></ div >
</ div >
<div class = "form_item" >
<input type = "password" name = "password" / >
<label > - Пароль</ label >
<div class = "error" ></ div >
</ div >
<div class = "form_item" >
<input type = "email" name = "email" / >
<label > - Почта</ label >
<div class = "error" ></ div >
</ div >
<div class = "form_item" >
<input type = "text" name = "test" / >
<label > - Тест</ label >
<div class = "error" ></ div >
</ div >
<div class = "form_item" >
<input type = "file" name = "img[]" / >
<input type = "file" name = "img[]" / >
<label > - Файл</ label >
<div class = "error" ></ div >
</ div >
<div class = "form_item" >
<select name = "choice" >
<option value = "1" > Выбор 1</ option >
<option value = "2" > Выбор 2</ option >
<option value = "3" > Выбор 3</ option >
<option value = "4" > Выбор 4</ option >
<option value = "5" > Выбор 5</ option >
</ select >
<div class = "error" ></ div >
</ div >
<div class = "form_item" >
<textarea cols = "20" rows = "5" name = "text" ></ textarea >
<div class = "error" ></ div >
</ div >
<div class = "form_item" >
<input type = "checkbox" name = "checkbox1" / > 1 и
<input type = "checkbox" name = "checkbox2" / > 2
<div class = "error" ></ div >
</ div >
<div class = "form_item" >
<input type = "radio" name = "radio" value = "1" / > 1 и
<input type = "radio" name = "radio" value = "2" / > 2
<div class = "error" ></ div >
</ div >
<div class = "loader" > Загрузка...</ div >
<div class = "error" ></ div >
<div id = "message" ></ div >
<div class = "form_item" ><input type = "submit" value = "test" id = "test_1" / ></ div >
</ form >
</ div >
<script type = "text/javascript" >
$('#test_1').click(function(event)
{
var form_obj = '#reg-form'; // объект формы
// почистить форму от ошибок
FormGiveItClean(form_obj, new Object());
var options =
{
beforeSubmit:ResponseRequest, success:ResponseSuccess, error:ResponseError, complete: ResponseComplete,
dataType: 'JSON', clearForm: false, resetForm: false//, timeout: 3000
};
$(form_obj).ajaxForm(options);
function ResponseSuccess(response, code, xhr, $form)
{
if(parseInt(response.status) === 1)
{
alert('OK');
}
else
RequestError(form_obj, new Object(), response); // обработчик ошибок полей формы
}
});
</ script >
</ body >
</ html >
файл js.js
CODE (
javascript ):
скопировать код в буфер обмена
// обработка при ошибки AJAX запроса
function ResponseError( response, code, xhr, $form)
{
if ( code == 'parsererror' )
{
alert ( 'Возникла ошибка, некорректный формат JSON' ) ;
}
else
{
alert ( 'Возникла неизвестная ошибка!' ) ;
}
}
// обработка при старте AJAX запроса
function ResponseRequest( formData, jqForm, options)
{
// показать загрузку
$( jqForm) .find ( '.loader' ) .css ( { 'display' : 'block' } ) ;
// отключаем кнопку
$( jqForm) .find ( 'input[type=submit]' ) .attr ( 'disabled' , 'disabled' ) ;
return true ;
}
// обработка при завершении AJAX запроса
function ResponseComplete( response, code, jqForm)
{
// скрыть загрузку
$( jqForm) .find ( '.loader' ) .css ( { 'display' : 'none' } ) ;
// включаем кнопку
$( jqForm) .find ( 'input[type=submit]' ) .removeAttr ( 'disabled' ) ;
}
// обработчик полей при ошибке
function FormGiveItClean( form_obj, params_form)
{
var form_obj = form_obj || "AJAX-FROM" ;
var class_fitem = params_form.class_fitem || '.form_item' ;
var class_error = params_form.class_error || '.error' ;
var addClassErr = params_form.addClassErr || 'error-field' ;
$( form_obj) .each ( function ( i, field)
{
// во всей форме чистим поля для ошибок
$( this ) .find ( class_error) .html ( '' ) ;
// во всей форме чистим поля для ошибок
$( this ) .find ( 'input' ) .removeClass ( addClassErr) ;
$( this ) .find ( 'textarea' ) .removeClass ( addClassErr) ;
} ) ;
}
// обработчик полей при ошибке
function RequestError( form_obj, params_form, msg)
{
var form_obj = form_obj || "AJAX-FROM" ;
var class_fitem = params_form.class_fitem || '.form_item' ;
var class_error = params_form.class_error || '.error' ;
var addClassErr = params_form.addClassErr || '.error-field' ;
// выборка поля с ошибкой
var form_error_field = "[name=" + msg.error .field + "]" ;
var num_element = 0 ; // номер ошибочного поля. По умолчанию 0, для полей без массива
// ПРОВЕРЯЕМ НАЛИЧИНЕ МАССИВА
var a = /\[(.*[\s\S]*?)\]/ .exec ( msg.error .field ) ;
if ( a != null )
{
// проверяем и экранируем скобки массива
if ( msg.error .field .indexOf ( a[ 0 ] ) + 1 )
{
msg.error .field = msg.error .field .replace ( a[ 0 ] , '' ) ;
// выборка ошибочного поля
form_error_field = "[name=" + msg.error .field + '\\ [\\ ]' + "]" ;
num_element = a[ 1] ; // элемент массива, в котором ошика
}
}
// обрабатываем ошики для поля
if ( $( form_obj) .find ( form_error_field) .length )
{
// поднимаем скрол вверх
var destination = $( form_obj) .find ( form_error_field) .eq ( num_element) .offset ( ) .top ;
jQuery( form_obj) .animate ( { scrollTop: destination} , 300) ;
// устанавливаем фокус
$( form_obj) .find ( form_error_field) .eq ( num_element) .focus ( ) ;
// сообщение о ошибке
// удаляем точку в классе
addClassErr = addClassErr.substr ( 1) ;
$( form_obj) .find ( form_error_field) .eq ( num_element) .addClass ( addClassErr) ;
// выводим сообщение об ошибке
if ( $( form_obj) .find ( form_error_field) .eq ( num_element) .parent ( class_fitem) .children ( class_error) .length )
{
// сообщение о ошибке под полем
$( form_obj) .find ( form_error_field) .eq ( num_element) .parent ( class_fitem) .children ( class_error) .html ( msg.error .message ) ;
}
else if ( $( form_obj + ' > ' + class_error) .length )
{
// сообщение о ошибке под формой
$( form_obj + ' > ' + class_error) .html ( msg.error .message ) ;
}
else
{
// удаляем точку в классе
class_error = class_error.substr ( 1) ;
// сообщение о ошибке под формой
$( '<div>' + msg.error .message + '</div>' ) .eq ( num_element) .addClass ( class_error) .appendTo ( form_obj) ;
}
}
}
Тестовый файл PHP
Естественно проверка формы тестовая и использовать такую валидацию у себя в проекте не стоит
PHP:
скопировать код в буфер обмена
<?PHP
//header('Content-Type: application/json; charset=utf8');
// Аналог json_encode
function json_encode_utf8( $arr )
{
$is_list = false ;
if ( count ( $arr ) < 1
) return '{}' ;
//Find out if the given array is a numerical array
$max_length = count ( $arr ) ;
if ( ( $keys [ 0] == 0) and ( $keys [ $max_length ] == $max_length ) ) { //See if the first key is 0 and last key is length - 1
$is_list = true ;
for ( $i = 0 ; $i < count( $keys ) ; $i ++ ) { //See if each key correspondes to its position
if ( $i != $keys [ $i ] ) { //A key fails at position check.
$is_list = false ; //It is an associative array.
break ;
}
}
}
foreach ( $arr as $key => $value ) {
if ( is_array ( $value ) ) { //Custom handling for arrays if ( $is_list ) $parts [ ] = json_encode_utf8( $value ) ; /* :RECURSION: */
else $parts [ ] = '"' . $key . '":' . json_encode_utf8( $value ) ; /* :RECURSION: */
} else {
$str = '' ;
if ( ! $is_list ) $str = '"' . $key . '":' ;
//Custom handling for multiple data types
elseif ( $value === false ) $str .= 'false' ; //The booleans
elseif ( $value === true ) $str .= 'true' ;
else $str .= '"' . addslashes ( $value ) . '"' ; //All other things // :TODO: Is there any more datatype we should be in the lookout for? (Object?)
$parts [ ] = $str ;
}
}
if ( $is_list ) return '[' . $json . ']' ; //Return numerical JSON
return '{' . $json . '}' ; //Return associative JSON
}
// проверяем данные формы
function CheckFormData( )
{
if ( ! $_REQUEST [ 'token' ] )
{
return 'ERROR_INCCORECT|TOKEN' ;
}
else if ( ! $_REQUEST [ 'obj_id' ] )
{
return 'ERROR_INCCORECT|OBJ_ID' ;
}
else if ( ! $_REQUEST [ 'login' ] )
{
return 'ERROR_INCCORECT|LOGIN' ;
}
else if ( ! $_FILES [ 'img' ] )
{
return 'ERROR_INCCORECT|IMG[1]' ;
}
else if ( ! $_REQUEST [ 'password' ] )
{
return 'ERROR_INCCORECT|PASSWORD' ;
}
else if ( ! $_REQUEST [ 'email' ] )
{
return 'ERROR_INCCORECT|EMAIL' ;
}
else if ( ! $_REQUEST [ 'test' ] )
{
return 'ERROR_INCCORECT|TEST' ;
}
else if ( ! $_REQUEST [ 'choice' ] )
{
return 'ERROR_INCCORECT|CHOICE' ;
}
else if ( ! $_REQUEST [ 'text' ] )
{
return 'ERROR_INCCORECT|TEXT' ;
}
else if ( ! $_REQUEST [ 'text2' ] )
{
return 'ERROR_INCCORECT|TEXT2' ;
}
else if ( ! isset ( $_REQUEST [ 'checkbox1' ] ) ) {
return 'ERROR_INCCORECT|CHECKBOX1' ;
}
else if ( ! isset ( $_REQUEST [ 'radio' ] ) ) {
return 'ERROR_INCCORECT|RADIO' ;
}
}
function Result
( $implementation , $data = array ( ) ) {
// результат
$result [ 'status' ] = 0 ;
if ( $implementation === true )
{
$result [ 'status' ] = 1 ;
if ( $data )
$result [ 'data' ] = $data ;
}
else
{
// языковой файл
include 'ru.php' ;
// КОД ОШИБКИ, ПРИМЕР: ERROR_INCCORECT|LOGIN
// ГДЕ ПОСЛЕДНИЙ ЭЛЕМЕНТ - НАЗВАНИЕ ПОЛЯ
// РАЗБИВАЕМ КОД ОШИБКИ
$field = explode ( '|' , $implementation ) ;
{
$message = $lang [ 'DEFAULT' ] ;
}
else
$message = $lang [ $implementation ] ;
$result [ 'error' ] = array ( 'code' => $implementation , 'message' => $message , 'field' => $field ) ; }
return json_encode_utf8( $result ) ;
}
/*
print_r($_POST);
print_r($_GET);
print_r($_FILES);
print_r($_REQUEST);*/
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
// обрабатываем данные формы
$implementation = CheckFormData( ) ;
// формируем результат
$result = Result( $implementation ) ;
// ответ в формате JSON
echo $result ;
Жду ваших отзывов и комментариев. Очень буду благодарен, если укажите на ошибки или поделитесь советом и своими правками
nepster
Отправлено: 07 Июня, 2013 - 21:00:52 • Тема: Perfect Money подтверждение средств • Форум: Вопросы новичков
Ответов: 4 Просмотров: 502
а как вариант парсить почтовый адрес ?
к примеру в базе таблица по токенам оплаты и статус.
И крон, который каждые 10 минут проверяет письма с оплатой.?
nepster
Отправлено: 07 Июня, 2013 - 18:24:38 • Тема: Perfect Money подтверждение средств • Форум: Вопросы новичков
Ответов: 4 Просмотров: 502
Столкнулся с такой проблемой:
пользователь заходит на сайт, начинает работать с Perfect Money
его кидает на их сайт, он выбирает счета делает все дела, оплачивает.
Далее такая дилемма:
на сайте Perfect Money есть кнопка продолжить, есть ее нажать после оплаты, пользователя вернет на сайт и пройдет проверка статуса его оплаты.
До этого момента все хорошо и отлично работает.
Теперь момент, если пользователь берет закрывает браузер/закрывает сайт Perfect Money/ не наживает продолжить, а просто делает шаг назад/ в общем все случаи, когда он не нажимает на кнопку продолжить.
Тогда проверить статус его оплаты невозможно.
Либо Это дикий фейл Perfect Money, либо есть возможность проверить статус оплаты как-то по другому ?
там приходят письма о статусе оплаты на указанную почту, будет ли логично постоянно парсить ящик? или все-же есть еще какой-то способ ?
Страниц (13): « 1 2 3 [4] 5 6 7 8 9 ... » В конец
Powered by ExBB FM 1.0 RC1. InvisionExBB