PHP - лучший способ вызвать данные $ _POST?

0

Есть ли лучший способ использования пост-данных, а не определение переменных вручную?

Мой текущий метод

<form method="POST" action="form.php">

    <input type="text" name="name" id="name" />

    <input type="submit" value="Submit">

</form>

<?php

    $name = $_POST['name'];

    function echoname ($name) {

        echo $name;

    };

    echo "This is my new" . echoname ($name);

?>

Теперь я знаю, что вы можете просто сделать это для моего примера, но это всего лишь пример:

<?php

    $name = $_POST['name']

        echo "This is my new" . $name;

?>

Есть ли лучший способ использовать $_POST['value'] без необходимости каждый раз определять данные сообщения как переменной?

В качестве примечания, я посмотрел здесь: PHP Manual $ _POST уже

Благодарю!

  • 0
    Существует функция под названием extract (), которая может превратить все именованные индексы в $ _POST в отдельные переменные с необязательным префиксом, чтобы избежать коллизий именования. php.net/manual/en/function.extract.php
  • 0
    @FreemanLambda, эта страница имеет предупреждение не использовать с ненадежными данными ...
Показать ещё 2 комментария
Теги:
forms
post

6 ответов

3
Лучший ответ

Если вы не хотите использовать extract() для целей безопасности (даже если вы можете просто пропустить переменные, которые уже существуют), вы можете просто пропустить массив - проверьте, существует ли значение $_POST, и если это так, создайте переменная ключа:

<?php
    $postVariablesToExtract = array("name", "password", "email");

    foreach ($postVariablesToExtract as $postVariableToExtract) {
        if (isset($_POST[$postVariableToExtract])) {
            $$postVariableToExtract = $_POST[$postVariableToExtract];
        } else {
            $$postVariableToExtract = null;
        }
    }

    var_dump($name); //null - as we don't have any POST values
    var_dump($password); //null - as we don't have any POST values
    var_dump($email); //null - as we don't have any POST values
?>
  • 0
    Этот способ выглядит намного сложнее, но я думаю, что это ускорит проверку инъекций, отфильтровывая массив?
  • 0
    @AaronHatton extract - это, в основном, функция, подобная этой, которая создает переменные на основе ключей. Единственная разница здесь в том, что мы устанавливаем только те переменные, которые мы уже определили (поэтому я не могу изменить свое имя пользователя, опубликовав username=MyOwnUsernameVariable ).
Показать ещё 2 комментария
0

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

  • foreach ($ _POST как $ key => $ value) $ body. = $ key. '->'. $ value. '
    ";

  • Если опубликованные данные не имеют ключа, а только значения, используйте данные Raw Post:

    $ postdata = file_get_contents ("php://input");

  • Вы можете использовать $ _REQUEST, а также $ _POST, чтобы получить все, например, данные Post, Get и Cookie.

  • Вы также можете использовать просто $ input_data = $ _POST extract(), который может быть вам полезен.

0

Я не уверен, как вам это нужно, но может быть важно, чтобы $ _POST был нормальным массивом, поэтому вы можете использовать функцию foreach.

foreach ($_POST as $item) {
  print_r($item);
}
0

Конечно, вы можете использовать переменную напрямую, то есть:

echo "This is my new " . $_POST['name'];

Однако неплохо проверить наличие пустоты (или проверки в целом). Например, в приведенном ниже случае, если переменная пуста, я присваиваю значение по умолчанию:

$name = empty($_POST['name']) ? 'John' : $_POST['name'];
echo "This is my new $name"; 
  • 0
    вместо этого используйте isset . empty выберет значение по умолчанию, если значение было "" или 0 что, скорее всего, не то, что хочет OP.
0

$_POST['value'] уже является переменной, поэтому ее не нужно хранить в переменной. Опять же, его обычная практика хранить его в переменной перед тем, как манипулировать им.

Кроме того, $_POST - это массив. Вот почему вам нужно указать ключ, в вашем случае ['value'] является вашим ключом. Теперь вы также можете выделить весь $_POST если хотите увидеть другие значения, которые он имеет, но тогда эхо не работает на массивах, поэтому вам нужно будет использовать print_r($_POST);

0

Да, вы можете использовать

echo "This is my new" . $_POST['name'];

но, лучший способ

if(isset($_POST['name'])) // check if this data is exsit
    echo "This is my new" . $_POST['name'];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню