Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter:向控制器提交参数,需要正确的URI_Php_Forms_Codeigniter_Url_Uri - Fatal编程技术网

Php Codeigniter:向控制器提交参数,需要正确的URI

Php Codeigniter:向控制器提交参数,需要正确的URI,php,forms,codeigniter,url,uri,Php,Forms,Codeigniter,Url,Uri,我有一个表单,有4个下拉列表和一个提交按钮。当用户单击submit按钮时,我想转到我的控制器,处理输入/输出,给用户选择,但具有正确的URI 下拉列表是根据用户的选择从Ajax动态生成的,第一个下拉列表除外。他们工作得非常好 处理用户输入的方法位于此控制器中:/app/controllers/shop/kategorier,索引方法如下所示: public function index($fabrikat, $type, $model, $produktnr = '0') { // ge

我有一个表单,有4个下拉列表和一个提交按钮。当用户单击submit按钮时,我想转到我的控制器,处理输入/输出,给用户选择,但具有正确的URI

下拉列表是根据用户的选择从Ajax动态生成的,第一个下拉列表除外。他们工作得非常好

处理用户输入的方法位于此控制器中:
/app/controllers/shop/kategorier
索引方法如下所示:

public function index($fabrikat, $type, $model, $produktnr = '0')
{
    // get all the data from the model
    $data['all'] = $this->fetch->get_kategorier($fabrikat, $type, $model, $produktnr);

    print_r($data['all']);      
}
<?php echo form_open('shop/kategorier/'); ?>

<select id="fabrikat" name="fabrikat">
    <option name="0">Vælg Fabrikat</option>
    <?php foreach ($fabrikater as $f) : ?>
        <option value="<?php echo $f->Fabrikat; ?>" name="<?php echo $f->Fabrikat; ?>"><?php echo $f->Fabrikat; ?></option>
    <?php endforeach; ?>
</select>

<select id="type" name="type">
</select>

<select id="model" name="model">  
</select>

<div id="produktnummer-wrap" style="display:none">
    <select id="produktnummer" name="produktnummer">
        <option name="0" value="">Vælg Produktnummer</option>
    </select>
</div>

<?php echo form_submit('findparts', 'Find Reservedele'); ?>
<?php echo form_close(); ?>
我的目标是:当用户点击提交按钮时,我不想让他们查看包含参数的准确URL页面,例如,这就是我真正想要的

注意:手动访问此URL工作正常,控制器/模型会按其应该的方式处理参数

我如何做到这一点?我尝试了两件事,都失败了。有点

  • 我尝试使用jQuery,并生成了一个包含所有 参数,并更改了上的.attr('href') 提交但那是一场噩梦,因为一些$model的 例如,
    “CE1000C-T/XEE”

  • 我试图在Kategorier中创建一个“代理”方法 控制器获取所有输入->帖子并将其附加到
    redirect('kategorier/'.$fabrikat./'.$etc)
    ,但这相当于 愚蠢的

  • 我不希望使用像
    /kategorier?fabrikat=LG&type=WASH等查询字符串

    我的表单如下所示:

    public function index($fabrikat, $type, $model, $produktnr = '0')
    {
        // get all the data from the model
        $data['all'] = $this->fetch->get_kategorier($fabrikat, $type, $model, $produktnr);
    
        print_r($data['all']);      
    }
    
    <?php echo form_open('shop/kategorier/'); ?>
    
    <select id="fabrikat" name="fabrikat">
        <option name="0">Vælg Fabrikat</option>
        <?php foreach ($fabrikater as $f) : ?>
            <option value="<?php echo $f->Fabrikat; ?>" name="<?php echo $f->Fabrikat; ?>"><?php echo $f->Fabrikat; ?></option>
        <?php endforeach; ?>
    </select>
    
    <select id="type" name="type">
    </select>
    
    <select id="model" name="model">  
    </select>
    
    <div id="produktnummer-wrap" style="display:none">
        <select id="produktnummer" name="produktnummer">
            <option name="0" value="">Vælg Produktnummer</option>
        </select>
    </div>
    
    <?php echo form_submit('findparts', 'Find Reservedele'); ?>
    <?php echo form_close(); ?>
    
    
    法布里卡特
    
    如果不使用一些JavaScript,就无法真正实现这一点:

    <script type="text/javascript">
    
    function update_selections()
    {
    
      var base_url = '<?php echo site_url('shop/kategorier/index'); ?>/' + $('#fabrikat').val() + '/' + $('#type').val() + '/' + $('#model').val();
      if( $('#produktnummer').val() != "" )
      {
        base_url = base_url + '/' + $('#produktnummer').val();
      }
    
      document.location.href = base_url;
    }
    
    </script>
    
    
    函数更新_选择()
    {
    var base#u url='/'+$('#fabrikat').val()+'/'+$('#type').val()+'/'+$('#model').val();
    if($('produktnummer').val()!=“”)
    {
    base_url=base_url+'/'+$('#produktnummer').val();
    }
    document.location.href=基本url;
    }
    

    删除当前表单并使用onclick事件触发此操作。

    @Repox我昨晚确实想出了一种方法,实际上与您的解决方案非常相似。以下是我所做的:

    $("#find-btn").on("click", function() {
        var fab = $("select#fabrikat").val();
        var type = $("select#type").val();
        var model = $("select#model").val();
        var produktnummer = $("select#produktnummer").val();
    
        // we have to replace spaces in models and types
        model = model.replace(/\s+/g, '-');
        type = type.replace(/\s+/g, '-');
    
        // produktnummer can be empty
        produktnummer = (produktnummer === '') ? "0" : produktnummer;
    
        // we also have to URI encode the model and prodnr since it
        // can be horror strings like 'xy762 / ø23'
        model = encodeURIComponent(model);
        produktnummer = encodeURIComponent(produktnummer);
    
        // our url string to update the href
        var url = fab + '/' + type + '/'  + model + '/'  + produktnummer;
    
        // update the href with the specific parameters
        $(this).attr("href", "http://app.dev/kategorier/index/"+url);
    });
    
    虽然我在处理控制器和模型中的参数时需要非常小心,但之后需要对它们进行正确的编码和解码。模型字符串的一小部分可能类似于:

    “EX+340-34/Ø14”或“77773+/23IK”

    在我的控制器中使用
    str_replace('-','$str)进行解码时,这并不理想
    
    但是,如果您希望这样做而不必在Codeigniter中使用查询字符串,这可能是最好的解决方案。

    感谢您的输入,我之前无法回答您的问题。