我在表单验证后遇到了重定向问题。我有3个不同的表单在不同的视图,验证后,如果表单提交失败,我想把它重定向到以前的登录页面。它工作得很好,但是,在提交表单后,如果我点击url并按enter键。当我在首页时,它会重定向到联系人。我要它重定向到他提交的前一个登录页面。3.我认为这不是正确的做法,提前谢谢
myform1.php我的Form1
<?php echo validation_errors(); ?>
<?php echo form_open('con/validate_form'); ?>
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" name='submit1' value="Submit1" /></div>
</form>
</body>
</html>
myform2.php
<html>
<head>
<title>My Form</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('con/validate_form'); ?>
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" name-'submit2' value="Submit2" /></div>
</form>
</body>
</html>
myform3.php
<html>
<head>
<title>My Form3</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('con/valdate_form'); ?>
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" name="submit3" value="Submit3" /></div>
</form>
</body>
</html>
这是控制器页面
public function validate_form(){
$this->load->library('form_validation');
$this->form_validation->set_rules('firstname', 'First name', 'required');
if ($this->form_validation->run() == FALSE){
($this->input->post('submit1')=='submit1') ? $this->load->view('myform1')
: ($this->input->post('submit2')=='submit2') ? $this->load->view('myform2')
: $this->load->view('myform3');
}
else
{
$this->register();
}
}
控制器con
public function myform1(){
$this->load->view('myform1');
}
public function myform2() {
$this->load->view('myform2');
}
public function myfrom3() {
$this->load->view('myform3');
}
发布于 2013-03-03 09:34:05
我不明白为什么你有3个相同的表格,但是好吧…好呀。它可以是一种继续进行的方法(使用相同的验证方法来避免重复代码)。
有不同的方法可以继续:
1)对当前位置使用隐藏输入:
myform1.php
<?php echo validation_errors(); ?>
<?php echo form_open('con/validate_form'); ?>
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<input type="hidden" name="redirect_to" value="<?php echo current_url(); ?>" />
<div><input type="submit" name='submit1' value="Submit1" /></div>
</form>
</body>
</html>
控制器> validate_form()方法:
public function validate_form()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('firstname', 'First name', 'required');
if ($this->form_validation->run() == FALSE)
{
$redirect_to = $this->input->post('redirect_to');
redirect($redirect_to);
}
else
{
$this->register();
}
}
但它并不完美,因为使用redirect()
方法不能轻松地重新填充表单。
2)这就是为什么我们通常不使用validate_form()
的原因。
您希望发布一个表单,对其进行验证,如果验证失败,则再次显示带有验证错误的表单,或者如果验证通过,则调用register方法。
要做到这一点,最好的方法是将表单发送回表单本身。这样,在您的方法中,您可以检查表单是否已提交,并确定要执行的操作:
public function myform1()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->register();
}
}
视图:
<html>
<head>
<title>My Form 1</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('con/myform1'); ?>
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" name-'submit' /></div>
</form>
</body>
</html>
发布于 2013-03-03 13:58:02
我所做的是为不同类型的表单错误创建一个错误文件夹.....对于form_validation错误,我将其重定向到特定的错误页面...它对我来说很好...
我还觉得您可能会尝试对多个表单视图使用相同的控制器...这就产生了一个问题……
我认为您的联系人和登录表单都有相同的重定向控制器con/myform1....看看这个......
希望这能帮上忙。
https://stackoverflow.com/questions/15180880
复制相似问题