Форум программистов, компьютерный форум, киберфорум
ExtJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397

Из ExtJs в PHP

09.08.2013, 11:06. Показов 3674. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2013, 11:06
Ответы с готовыми решениями:

ExtJS
Всем привет! Обнесите пожалуйста простым языком как подключить EXTJS на Asp.net Mvc 4 ) спасибо! Замучило уже )

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

Extjs 3.4 BorderLayout
Всем здраствуйте, вообщем есть задача: 1) Есть TreePanel. 2) Есть Borderlayout Задача, надо как-то в region: "west"...

7
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.08.2013, 11:13
Цитата Сообщение от Pro100Tom Посмотреть сообщение
Код PHP
скажите, а какой смысл использовать подготовленные выражения, если вы подставляете их в запрос напрямую? Либо тогда уж используйте PDO::query и забейте на безопасность (или используйте PDO::quote для очистки), либо используйте подготовленные выражения как положено
0
 Аватар для Pro100Tom
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
09.08.2013, 11:15  [ТС]
Честно скажу, ничего не понял. Объясните пожалуйста.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.08.2013, 11:26
Цитата Сообщение от 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
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
09.08.2013, 11:31  [ТС]
Подскажите пожалуйста, как стоит сделать правильно, чтобы избежать таких моментов. Не могли бы показать пример с query, где бы передавались так параметры. И что означает фраза "залить шелл"?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.08.2013, 11:35
поэтому надо либо экранировать переменные перед запросом с помощью 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
154 / 31 / 11
Регистрация: 29.10.2012
Сообщений: 397
09.08.2013, 11:45  [ТС]
А в чем разница query и prepare execute. Если я правильно понял, то prepare execute более безопасный способ или я ошибаюсь? Хотя в вашей реализации вроде бы и там и там безопасно. А по скорости какой способ эффективнее?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.08.2013, 11:53
Зайдите на документацию, там все написано.
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.08.2013, 11:53
Помогаю со студенческими работами здесь

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

Использование ExtJS
В книге по html первый же пример на использование ExtJS почему-то у меня не работает. Код примера: Ext.OnReady(function) { ...

ExtJS + Rest
Помогите с проблемой: запустил rest сервис на .net в сетке - при url: http://localhost:1008/srv/adres/test/2 Вывод "example...

Минимизация окон в ExtJS
Необходимо настроить минимизацию окон приложения, где она отсутствует. Вот в этом куске кода нет свойств minimized или minimizable, но в...

Json & Extjs
Написал restful сервис и выложил ее на iis. Возвращает данные в формате json по...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru