Почему я должен использовать $ _GET и $ _POST вместо $ _REQUEST? [дубликат]

Вот вариант для вас.

Загрузите проанализированные данные во временную таблицу, а затем присоедините ее к таблице поиска. Я был бы легче и, вероятно, выступил бы лучше.

Посмотрите на это. Есть пример с некоторыми тестовыми данными, использующими временные таблицы. Очевидно, что вам нужно будет подстроиться под ваши конкретные таблицы и требования:

--This will be our table that has the data you want to parse
CREATE TABLE #TestData (
TextColumn nvarchar(1000)
)

--lookup table for colours
CREATE TABLE #LookUp(
LookUpIndex INT
,Colour NVARCHAR(100)
)

--Use a temp table to load the parsed data from #TestData
CREATE TABLE #TestDataParse (
LookUpIndex INT
,TextColumn NVARCHAR(1000)
)

--Load our test data
INSERT INTO [#TestData] ([TextColumn])
VALUES('random text dog ''123'' more random text')
,('random text dog ''345'' more random text')
,('random text dog ''723'' more random text')


--populate our lookup table
INSERT INTO [#LookUp] (
                          [LookUpIndex]
                        , [Colour]
                      )
VALUES(123, 'Blue')
,(345, 'Green')
,(723 , 'Orange')


--Now parse the LookUp number out and load that to our temp table
INSERT INTO [#TestDataParse] (
                                 [LookUpIndex]
                               , [TextColumn]
                             )
SELECT
Left(Substring(TextColumn, Patindex('%''%', TextColumn) + 1, Len(TextColumn) - Patindex('%''%', TextColumn))
           ,Patindex('%''%', Substring(TextColumn, Patindex('%''%', TextColumn) + 1, Len(TextColumn) - Patindex('%''%', TextColumn)))- 1) AS LookUpIndex
           ,[TextColumn]
FROM [#TestData]

--Now we can join that back to the lookup table
SELECT     *
FROM       [#TestDataParse] [a]
INNER JOIN [#LookUp] [b]
    ON [b].[LookUpIndex] = [a].[LookUpIndex];


--Example done
--Drop our #temp tables
DROP TABLE [#LookUp]
DROP TABLE [#TestData]
DROP TABLE [#TestDataParse]

или вы можете пропустить загрузку во временную таблицу и использовать подзапрос, чтобы упростить соединение с вашей таблицей поиска, что-то вроде:

SELECT * FROM (
                SELECT
                Left(Substring(TextColumn, Patindex('%''%', TextColumn) + 1, Len(TextColumn) - Patindex('%''%', TextColumn))
                           ,Patindex('%''%', Substring(TextColumn, Patindex('%''%', TextColumn) + 1, Len(TextColumn) - Patindex('%''%', TextColumn)))- 1) AS LookUpIndex
                           ,[TextColumn]
                FROM [#TestData] a
                ) AS tb
INNER JOIN [#LookUp] b ON [b].[LookUpIndex] = [tb].[LookUpIndex]

Я бы проверил каждую из них и посмотрел, какая из них лучше для вас.

8
задан TRiG 8 February 2014 в 16:58
поделиться

7 ответов

Я использую $ _REQUEST, когда я просто хочу, чтобы определенные данные от пользователя возвратили определенные данные.

Никогда не используйте $ _REQUEST, когда запрос будет иметь побочные эффекты. Запросами, которые производят побочные эффекты, должен быть POST (по семантическим причинам, и также из-за основного материала CSRF, ложный тег img может совершить нападки, любой ПОЛУЧАЕТ конечную точку без пользователя, даже знающего).

$ _GET должен использоваться, когда GETing или ОТПРАВЛЯЮЩИЙ на страницу приведет к различным результатам.

8
ответ дан 5 December 2019 в 05:46
поделиться

Помимо того, что $ _REQUEST читает из cookie

Помимо того, что это не определено (Это настраивается на уровне на установку), использование задач $_REQUEST это, это упрощает вещи. Существует (или должен быть), семантическое различие между ПОЛУЧИТЬ запросом и запросом POST. Таким образом для Вашего приложения должно иметь значение, если Вы вводитесь из одного источника или другого. Это - то, как протокол HTTP определяется, таким образом, путем игнорирования его, Вы нарушаете протокол, который подает Вашу менее совместимую заявку. Это - тот же аргумент типа, который может быть сделан для использования семантической разметки HTML, а не ориентированной на презентацию разметки. Или в более общем плане, после намерений протокола вместо того, чтобы просто делать безотносительно работ в конкретной ситуации.

8
ответ дан 5 December 2019 в 05:46
поделиться

Вы уже дали один из ответов, таким образом, я дам другому:

Это - больше стилистического выбора. Например, Вы обычно не хотите информации, которая изменяет состояние на сервере, чтобы быть кэшируемой, таким образом, Вы, вероятно, хотите ограничить его $_POST переменные.

5
ответ дан 5 December 2019 в 05:46
поделиться

Использование $ _REQUEST открывает некоторые векторы атаки для Вашего приложения, где переменные могли быть перезаписаны, где Вы не захотите, чтобы это произошло.

Также считайте порядок GPC (Доберитесь, Сообщение, Cookie), на котором будет заполнен $ _REQUEST.

т.е. запрос с:

$_GET['foo'] = 'bar'
$_POST['foo'] = 'baz'

приведет к

$_REQUEST['foo'] == 'bar'

4
ответ дан 5 December 2019 в 05:46
поделиться

часто упомянутая ненадежность $ _REQUEST является поддельной. все это способы получить данные от пользователя, который имеет незащищенную машину. всегда необходимо санировать вход, таким образом, нет никакого реального преимущества безопасности от использования ни одного.

только значительно, если у Вас есть различное использование для значений с тем же именем на различных каналах. в этом случае необходимо переименовать некоторых из них так или иначе.

2
ответ дан 5 December 2019 в 05:46
поделиться

HTTP ДОБИРАЕТСЯ, семантически предназначен, чтобы использоваться для выборки страницы, в то время как POST может быть обсужден, что при использовании Вы будете ожидать, что некоторое состояние изменяется.

Например, существует ожидание, что использование ДОБИРАЕТСЯ с теми же параметрами, многократно приводят к тем же результатам, при использовании POST, они не могут.

Не используя POST, когда необходимо уступить проблемам. Я думаю, что пользовавшиеся библиотеки Ruby on Rails AJAX ДОБИРАЮТСЯ вместо POST и вывода к большому количеству данных, потерянных, будучи тронутым поисковыми роботами.

Следовательно, необходимо, вероятно, избегать использования $ _REQUEST. Необходимо знать цели того, что страница делает и выбирает, как ответить на ПОЛУЧИТЬ запрос, и как ответить на запрос POST.

2
ответ дан 5 December 2019 в 05:46
поделиться

Вот тот, который я только что нашел: Когда и почему должен $ _REQUEST использоваться вместо $ _GET / $ _POST / $ _COOKIE?. Я сожалею, что не нашел его раньше, таким образом, я не буду задавать вопрос...

0
ответ дан 5 December 2019 в 05:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: