Php Отправить на самовосстанавливающийся исходный код - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь отправить форму php самому себе, но после отправки страница возвращает исходный код страницы, а не обработанные данные.

У меня есть issset, чтобы проверить, была ли отправлена ​​форма, изатем используйте функции на той же странице для обработки отправленных данных.

Вот код:

    if(isset($_POST['submit'])){

        if ($_POST['name' == 'px']) {
            $pxValue = $_POST['value'];
            $value = convertToEm($pxValue); 
        }

        if ($_POST['name' == 'em']) {
            $emValue = $_POST['value'];
            $value = convertToPx($emValue); 
        }

        function convertToEm($value) {
            $base_font = 16;
            $em_value = $value / $base_font;
            return $em_value;

        }
    }

Вот форма:

<form action="" id="converterPx" method="POST">
    <h3>Convert Pixels to Ems:</h3>
    <label>PX:</label>
    <input type="text" name="value" value="" />
    <?php echo 'Result:'. $value; ?>
    <input type="hidden" name="type" value="px" />
    <input type="submit" name="submit" id="submit-px" />
</form>

Попытка получитьформа, обработанная на той же странице

Используя Инспектор Браузера, я вижу, что POST отправляется со значениями.

Любая помощь с этим была бы хороша

Ответы [ 6 ]

1 голос
/ 22 февраля 2012

Это опечатка в вашем коде, вы использовали имя вместо типа

if ($_POST['type']== 'px') {
        $pxValue = $_POST['value'];
        $value = convertToEm($pxValue); 
    }

    if ($_POST['type'] == 'em') {
        $emValue = $_POST['value'];
        $value = convertToPx($emValue); 
    }
1 голос
/ 22 февраля 2012

Чтобы выполнить самостоятельное действие на той же странице, используйте это в форме действия $ _SERVER ['REQUEST_URI']

// Это точный код ответа на ваш вопрос

<?php
if(isset($_POST['submitBtn'])){


    function convertToEm($value) {

            $base_font = 16;
            $px_value = $value/$base_font;
        return  $px_value;
        }
        function convertToPx($value) {
            $base_font = 32;
            $em_value = $value/$base_font;
            return  $em_value;
        }

       if (isset($_POST['type']) && $_POST['type']=='px') {

            $pxValue = $_POST['value'];
        $value = convertToEm($pxValue); 

        }

        if (isset($_POST['type']) && $_POST['type'] == 'em') {

            $emValue = $_POST['value'];
            $value = convertToPx($emValue); 

        }


    }

//form data

<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" id="converterPx" method="POST">
    <h3>Convert Pixels to Ems:</h3>
    <label>PX:</label>
    <input type="text" name="value" />
    <?php echo 'Result:'.$value; ?>
    <input type="hidden" name="type" value="px" />
    <input type="submit" name="submitBtn" id="submit-px" />
</form>
1 голос
/ 22 февраля 2012

Если источник PHP появляется на возвращенной странице, это либо потому, что вы забыли теги

Или из-за того, что сервер не настроен для правильного выполнения PHP

(или имя файла имеет неправильное расширение)

0 голосов
/ 22 февраля 2012

Вы не отправляете на себя , вы отправляете на ничего :

<form action="" id="converterPx" method="POST">

Редактировать: Как указал Лоуренс, следует избегать использования метода, который я первоначально описал ниже.Вместо этого используйте $_SERVER['SCRIPT_NAME'];, а для получения дополнительной информации см. http://www.webadminblog.com/index.php/2010/02/23/a-xss-vulnerability-in-almost-every-php-form-ive-ever-written/

Оригинал : в зависимости от того, как вы вызываете форму, вы можете попробовать:

<form action="<?php echo $_SERVER['PHP_SELF'] ?>" id="converterPx" method="POST">

Подробнее здесь: http://www.html -form-guide.com / php-form / php-form-action-self.html

0 голосов
/ 22 февраля 2012

Вы забыли теги <?php ?>?также $_POST['name' == 'px'] должно быть $_POST['name'] == 'px', функция convertToPx отсутствует, в вашей форме нет параметра с именем name и вы ничего не повторяете.

<?php if(isset($_POST['submit'])){

        if ($_POST['name']== 'px') {
            $pxValue = $_POST['value'];
            $value = convertToEm($pxValue); 
        }

        if ($_POST['name'] == 'em') {
            $emValue = $_POST['value'];
            $value = convertToPx($emValue); 
        }

        function convertToEm($value) {
            $base_font = 16;
            $em_value = $value / $base_font;
            return $em_value;
        }
        function convertToPx($value) {
            $base_font = 32;
            $em_value = $value / $base_font;
            return $em_value;
        }


    echo $value;
    }
?>
0 голосов
/ 22 февраля 2012

$_POST['name' == 'px'], вероятно, должно быть $_POST['name'] == 'px'] (с аналогичным изменением в аналогичной конструкции).

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

...