Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript: ExtJS
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Pro100Tom
69 / 28 / 11
Регистрация: 29.10.2012
Сообщений: 339
#1

Из ExtJs в PHP

09.08.2013, 11:06. Просмотров 1721. Ответов 7
Метки нет (Все метки)

Как в этой секции
Javascript
1
2
3
4
5
6
7
8
save: function () {
        Ext.Ajax.request({
            url: 'data/Save.php',
            success: function () {          
                store.commitChanges();
            }
        });
    }
передать значение переменной в php файл так, чтобы, используя такой синтакс
PHP
1
2
$stmt = $dbh->prepare("INSERT INTO Users (name, numbers) VALUES ('".$_POST['name']."','".$_POST['numbers']."')");
    $stmt->execute();
это значение переменной добавилось бы в базу данных.

Добавлено через 17 часов 8 минут
Тем, кому надо:
Javascript
1
2
3
4
5
6
7
8
9
save: function () {
        Ext.Ajax.request({
            url: 'data/Save.php',
            params:"name="+ encodeURIComponent("tommy"),   
            success: function () {              
                store.commitChanges();
            }
        });
    }
PHP
1
2
$stmt = $dbh->prepare("INSERT INTO Users (name, numbers) VALUES ('".$_POST['name']."','".$_POST['numbers']."')");
    $stmt->execute();
Добавлено через 6 минут
А если много параметров, то так:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
save: function () {
        Ext.Ajax.request({
            url: 'data/Save.php',
            params:{
                name: "tommy",
                numbers: "1,2,3"
            },  
            success: function () {              
                store.commitChanges();
            }
        });
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2013, 11:06
Ответы с готовыми решениями:

Extjs 3.4 BorderLayout
Всем здраствуйте, вообщем есть задача: 1) Есть TreePanel. 2) Есть...

ExtJs + MySQL
у меня есть view в ExtJs с комбобоксом Ext.define('s_sql.view.User_view' ,{...

ExtJS + Rest
Помогите с проблемой: запустил rest сервис на .net в сетке - при url:...

Использование ExtJS
В книге по html первый же пример на использование ExtJS почему-то у меня не...

Изучение Extjs 4
Доброго времени суток:) Требуется изучить данный фреймворк ( extjs ) C с...

7
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 862
Регистрация: 12.06.2012
Сообщений: 19,887
Завершенные тесты: 1
09.08.2013, 11:13 #2
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Код PHP
скажите, а какой смысл использовать подготовленные выражения, если вы подставляете их в запрос напрямую? Либо тогда уж используйте PDO::query и забейте на безопасность (или используйте PDO::quote для очистки), либо используйте подготовленные выражения как положено
0
Pro100Tom
69 / 28 / 11
Регистрация: 29.10.2012
Сообщений: 339
09.08.2013, 11:15  [ТС] #3
Честно скажу, ничего не понял. Объясните пожалуйста.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 862
Регистрация: 12.06.2012
Сообщений: 19,887
Завершенные тесты: 1
09.08.2013, 11:26 #4
Цитата Сообщение от Pro100Tom Посмотреть сообщение
PHP
1
2
$stmt = $dbh->prepare("INSERT INTO Users (name, numbers) VALUES ('".$_POST['name']."','".$_POST['numbers']."')");
* * $stmt->execute();
Ну прежде чем использовать код, то желательно хотя бы почитать, для чего он, а не бездумно использовать. Этот код (prepare+execute) используется для подготовленных выражений. Они позволяют выполнять безопасные запросы к БД, т.к. БД сама подготавливает запрос так, как надо. Но для этого необходимо передавать значения параметрами, а не напрямую. Если вы не хотите использовать подготовленные выражения - то не используйте. Незачем впустую гонять сервер, используйте query(), а не prepare()+execute().
Что это вообще такое, и зачем оно нужно? Это все нужно для защиты от SQL-инъекций. Текущий код уязвим к ним. Можно сделать что угодно, вплоть до удаления БД, а если права пользователя мускула позволяют, то и чего покруче, хоть шелл залить.
Цитата Сообщение от Pro100Tom Посмотреть сообщение
PHP
1
"INSERT INTO Users (name, numbers) VALUES ('".$_POST['name']."','".$_POST['numbers']."')"
Представьте, что в $_POST['name'] содержится, к примеру, такой код -
SQL
1
text', '1'); DROP TABLE `Users`; -- '
Ну а в $_POST['numbers'], пускай, будет 100
В итоге, при подстановке в запрос, БД получит следующее
SQL
1
INSERT INTO Users (name, numbers) VALUES ('text', '1'); DROP TABLE `Users`; -- '','100')
Все, что идет после -- - это комментарий. В итоге, запрос выглядит таким образом
SQL
1
INSERT INTO Users (name, numbers) VALUES ('text', '1'); DROP TABLE `Users`;
А вернее, два запроса: первый вставляет запись в таблицу, а второй, сразу за ним, ее удаляет полностью. И это мелочь из того, что можно сделать..
1
Pro100Tom
69 / 28 / 11
Регистрация: 29.10.2012
Сообщений: 339
09.08.2013, 11:31  [ТС] #5
Подскажите пожалуйста, как стоит сделать правильно, чтобы избежать таких моментов. Не могли бы показать пример с query, где бы передавались так параметры. И что означает фраза "залить шелл"?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 862
Регистрация: 12.06.2012
Сообщений: 19,887
Завершенные тесты: 1
09.08.2013, 11:35 #6
поэтому надо либо экранировать переменные перед запросом с помощью quote(), либо, раз уж вы используете prepare - то и подготавливать выражение
Либо с неименованными параметрами, если по-простому, без всяких bindValue и т.п., то так
PHP
1
2
$stmt = $dbh->prepare('INSERT INTO `Users` (`name`, `numbers`) VALUES (?,?)');
$stmt->execute( array($_POST['name'], $_POST['numbers']) );
либо с именованными
PHP
1
2
$stmt = $dbh->prepare('INSERT INTO `Users` (`name`, `numbers`) VALUES (:name,:nums)');
$stmt->execute( array(':name'=>$_POST['name'], ':nums'=>$_POST['numbers']) );
И тогда при передаче той же самой строки мы получим уже следующее
SQL
1
INSERT INTO Users (name, numbers) VALUES ('text\', \'1\'); DROP TABLE `Users`; -- \'','100')
в принципе, разницу видно по подсветке

Добавлено через 3 минуты
Цитата Сообщение от Pro100Tom Посмотреть сообщение
пример с query, где бы передавались так параметры
PHP
1
2
3
$name = $dbh->quote($_POST['name']);
$numbers = $dbh->quote($_POST['numbers']);
$stmt = $dbh->query('INSERT INTO `Users` (`name`, `numbers`) VALUES (' . $name . ', ' . $numbers . ')');
Цитата Сообщение от Pro100Tom Посмотреть сообщение
что означает фраза "залить шелл"?
http://webetako.com/chto-takoe-shell-na-sayte.html
1
Pro100Tom
69 / 28 / 11
Регистрация: 29.10.2012
Сообщений: 339
09.08.2013, 11:45  [ТС] #7
А в чем разница query и prepare execute. Если я правильно понял, то prepare execute более безопасный способ или я ошибаюсь? Хотя в вашей реализации вроде бы и там и там безопасно. А по скорости какой способ эффективнее?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 862
Регистрация: 12.06.2012
Сообщений: 19,887
Завершенные тесты: 1
09.08.2013, 11:53 #8
Зайдите на документацию, там все написано.
PDO::query
PDO::query — Выполняет SQL запрос и возвращает результирующий набор в виде объекта PDOStatement
...........
PDO::query() выполняет SQL запрос без подготовки и возвращает результирующий набор (если есть) в виде объекта PDOStatement
..................
Данные в запросе должны быть правильно экранированы.
PDO::quote
PDO::quote() заключает строку в кавычки (если требуется) и экранирует специальные символы внутри строки подходящим для драйвера способом.

Если вы используете эту функцию для построения SQL запросов, настоятельно рекомендуется пользоваться методом PDO::prepare() для подготовки запроса с псевдопеременными вместо использования PDO::quote() для вставки данных введенных пользователем в SQL запрос. Подготавливаемые запросы с параметрами не только компактней, удобней, устойчивей к SQL иньекциям, но и работают быстрее, нежели вручную построенные запросы, так как и клиент и сервер могут кэшировать такие запросы в уже скомпилированном виде.

Не все PDO драйверы реализуют этот метод (особенно PDO_ODBC). Предполагается, что вместо него будут использоваться подготавливаемые запросы.
......................
Возвращает экранированную строку, которую теоретически безопасно использовать в теле SQL запроса. Возвращает FALSE, если драйвер не поддерживает экранирование.
PDO::prepare
PDO::prepare — Подготавливает запрос к выполнению и возвращает ассоциированный с этим запросом объект
.......
Подготавливает SQL запрос к базе данных к запуску посредством метода PDOStatement::execute(). Запрос может содержать именованные (:name) или неименованные (?) псевдопеременные, которые будут заменены реальными значениями во время запуска запроса на выполнение. Использовать одновременно и именованные, и неименованные псевдопеременные в одном запросе нельзя, необходимо выбрать что-то одно. Используйте псевдопеременные, чтобы привязать к запросу пользовательский ввод, не включайте данные, введенные пользователем, напрямую в запрос.

Вы должны подбирать уникальные имена псевдопеременных для каждого значение, которое необходимо передавать в запрос при вызове PDOStatement::execute(). Нельзя использовать одну псевдопеременную в запросе дважды. Также нельзя к одной именованной псевдопеременной привязать несколько значений, как например, в выражении IN() SQL запроса.

Вызов PDO::prepare() и PDOStatement::execute() для запросов, которые будут запускаться многократно с различными параметрами, повышает производительность приложения, так как позволяет драйверу кэшировать на клиенте и/или сервере план выполнения запроса и метаданные, а также помогает избежать SQL иньекций, так как нет необходимости экранировать передаваемые параметры.

Если драйвер не поддерживает подготавливаемые запросы, PDO умеет их эмулировать. Также, PDO может заменять псевдопеременные на то, что больше подходит, если, например, драйвер поддерживает только именованные или, наоборот, только неименованные маркеры.
Добавлено через 1 минуту
хотя вам и query не нужен, а exec. Либо используйте способ с подготовленными выражениями, либо используйте PDO::quote и PDO::exec после
1
09.08.2013, 11:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 11:53

Ресурсы по фреймворку ExtJS 3.4.0
Подскажите, пожалуйста, ресурсы по данному фреймворку(ExtJS 3.4.0) на русском...

Extjs grid фильтрация
Здравствуйте уважаемые программисты, у меня возник вопрос при стандартной...

Extjs 4 ComboBox c мультиселектом
Добрый день. Создаю комбобокс с мультиселектом, подгружаю данные из сторе,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru