PHP变量作为表单动作

时间:2015-07-22 00:29:59

标签: php html forms post action

我想创建一个表单,其行为由表单中的一个选项定义。

    <form method="POST" action="../<?php echo $location?>.php">
    <label>Post to: <select project="location" id="location" name="location">
        <option value="null"></option>
        <option value="$var1">Option1</option>
        ...
    </select><br>
    <input id ="button1" type="submit" name="submit" value="Post">
</form>
<?php $location = $_POST["location"]; ?>

单击提交按钮时,它会一直使用空值作为位置;有没有办法在表单选择发布的位置之前存储$ location的值?

3 个答案:

答案 0 :(得分:2)

没有

PHP在服务器上执行。当您发布此表单时,PHP仅在发布帖子时才知道该变量的内容。所以在第一次呈现页面时,变量当然是空的。

但你可以用Javascript做到这一点:

<form id="postForm" method="POST" action="">
    <label>
        Post to:
        <select project="location" id="location" name="location">
            <option value="first"></option>
            <option value="handle-something">Option1</option>
        </select>
    </label>
    <input id="button1" type="submit" name="submit" value="Post">
</form>

<script>
    document.getElementById('location').onchange = function() {
        // maybe you can get val via this or so
        var location = document.getElementById('location').value;
        document.getElementById('postForm').action = '/' + value + '.php';
    };
</script>

不是testet。

答案 1 :(得分:1)

虽然您可以在渲染时动态生成表单,但在表单提供后,您无法使用php更改它。您将需要使用javascript,因为@copynpaste已经显示。您可以使用另一种选择。

将表单发送到标准操作,并在服务器端提取变量,然后决定要执行哪些操作。

示例:

<form method="POST" action="formaction.php">
        <label>Post to: <select project="location" id="location" name="location">
            <option value="null"></option>
            <option value="$var1">Option1</option>
            ...
        </select><br>
        <input id ="button1" type="submit" name="submit" value="Post">
</form>

里面的formaction.php

$action = $_POST['action'];

include "{$action}.php";

这将包含一个基于“location”值的文件。

答案 2 :(得分:0)

由于您不太可能希望允许发布数据根据未经过验证的帖子数据转到潜在的任意,不受控制的文件位置,因此我喜欢检查数据的可接受值的值;然后应用&#39;默认&#39; catch-all解决两种情况:(1)在没有发布数据的情况下加载表单的情况; (2)表格载有意外或不可接受的职位数据的情况:

<?php 
    $location = $_POST["location"];
    switch( $location )
    {
        case 'create':
        case 'remove':
        case 'update':
        case 'delete':
            $form_location = $location;
            break;
        default:
            $form_location = 'default';
            break;
    }
?>
<form method="POST" action="../<?php echo $form_location; ?>.php">
    <label>Post to: <select project="location" id="location" name="location">
    <option value="null"></option>
    <option value="$var1">Option1</option>
    ...
    </select><br>
    <input id ="button1" type="submit" name="submit" value="Post">
</form>