Php,表单,重定向和查询

时间:2016-03-14 22:47:36

标签: php html5 forms

我觉得这是一个常见问题,但我没有找到合适的答案,所以我问你! ;)

让我们从经典 index.php 中的表单开始:

...
    <form action="<?php echo BASE_URL; ?>">
        <div style="color:white">Instructions</div>
        <input type="number" name="param" />
        <input type="hidden" name="action" value="view" />
        <input type="hidden" name="controller" value="Solution" />

        <input type="????" name="instance_id" value="?????" />

        <input type="submit" value="Solutions Listing" id="button_solutions">
    </form>
...

这里的问题是提交按钮之前的最后输入字段。用户应该在第一个非隐藏输入中输入 param ,这应该触发一个php函数,通过选择数据库来确定 instance_id

我想要做的是,当用户点击提交时,重定向通过

等链接
BASE_URL."?controller=Solution&action=view&param=toto&instance_id=value"

让我说我在php中选择数据库的函数叫做toto(),toto返回instance_id。 我知道如何通过表单指向带有GET参数的网址,但是 我不知道如何触发php功能。 我知道如何通过参数输入确定instance_id 但是 我不知道如何通过php函数创建一个带GET参数的重定向

请考虑任何帮助 感谢

1 个答案:

答案 0 :(得分:1)

如果您不需要在客户端上看到instance_id,则可以创建某种重定向页面,该页面从数据库中检索instance_id。此页面可能与目标网页相同。

<form method="GET" action="<?php echo BASE_URL; ?>">
    <div style="color:white">Instructions</div>
    <input type="number" name="param" />
    <input type="hidden" name="action" value="view" />
    <input type="hidden" name="controller" value="Solution" />

    <input type="submit" value="Solutions Listing" id="button_solutions">
</form>

并在你的php脚本中

// instance_id not set
if (!isset($_GET['instance_id'])) {
    $args = $_GET;
    $param = $args['param'];

    // do something with param and save it to instance_id
    $instance_id = ...

    $args['instance_id'] = $instance_id;

    // create get query
    $query = http_build_query($args);

    $url = BASE_URL . '?' . $query;
    header('Location: ' . $url);
} else {
    // instance_id set - do something with it
    $instance_id = $_GET['instance_id'];
}

如果您不能使用此方法并且必须同时显示instance_id的结果,则用户输入参数,您必须使用ajax请求,该请求向服务器发送请求以获取instance_id。

使用JavaScript(使用jQuery)执行此操作可能如下所示:

$('input[name="param"]').on('change', function() {
    $.ajax({
        url: '...',
        data: { param: $(this).val() },
        method: 'GET'
    }).done(function(data) {
        $('input[name="instance_id"]').val(data);
    });
});

php文件将param作为GET值,并应从数据库返回instance_id。