Php Codeigniter:向控制器提交参数,需要正确的URI
我有一个表单,有4个下拉列表和一个提交按钮。当用户单击submit按钮时,我想转到我的控制器,处理输入/输出,给用户选择,但具有正确的URI 下拉列表是根据用户的选择从Ajax动态生成的,第一个下拉列表除外。他们工作得非常好 处理用户输入的方法位于此控制器中: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
/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工作正常,控制器/模型会按其应该的方式处理参数
我如何做到这一点?我尝试了两件事,都失败了。有点
“CE1000C-T/XEE”
等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中使用查询字符串,这可能是最好的解决方案。感谢您的输入,我之前无法回答您的问题。